From 647943ae942e9710b99f04d36cff38c499062535 Mon Sep 17 00:00:00 2001 From: Zhao Xiaojie Date: Tue, 12 Mar 2019 18:23:58 +0800 Subject: [PATCH] deploy --- images/gsoc/jenkins-gsoc-logo_small.png | Bin 0 -> 50095 bytes index.html | 8 +- index.json | 56 ++ index.xml | 30 ++ sitemap.xml | 44 +- tags/cdf/index.html | 276 ++++++++++ tags/cdf/index.xml | 27 + tags/cdf/page/1/index.html | 1 + tags/cicd/index.html | 276 ++++++++++ tags/cicd/index.xml | 27 + tags/cicd/page/1/index.html | 1 + tags/community/index.html | 27 + tags/community/index.xml | 18 + tags/events/index.html | 300 +++++++++++ tags/events/index.xml | 32 ++ tags/events/page/1/index.html | 1 + tags/gsoc/index.html | 300 +++++++++++ tags/gsoc/index.xml | 32 ++ tags/gsoc/page/1/index.html | 1 + tags/gsoc2019/index.html | 300 +++++++++++ tags/gsoc2019/index.xml | 32 ++ tags/gsoc2019/page/1/index.html | 1 + tags/index.html | 110 +++- tags/index.xml | 56 +- tags/jenkins/index.html | 2 + tags/jenkins/index.xml | 12 + tags/opensource/index.html | 276 ++++++++++ tags/opensource/index.xml | 27 + tags/opensource/page/1/index.html | 1 + .../2018-11-14-first-voice/index.html | 2 +- .../index.html | 11 +- .../2019-01-16-webhook-firewalls/index.html | 9 + .../index.html | 2 +- .../index.html | 9 + .../index.html | 9 + .../index.html | 11 +- .../index.html | 498 ++++++++++++++++++ .../2019-03-13-ready-for-cdf/index.html | 451 ++++++++++++++++ .../images/gsoc/jenkins-gsoc-logo_small.png | Bin 0 -> 50095 bytes wechat/index.html | 29 +- wechat/index.xml | 30 ++ wechat/page/2/index.html | 60 +-- wechat/page/3/index.html | 54 ++ 43 files changed, 3381 insertions(+), 68 deletions(-) create mode 100644 images/gsoc/jenkins-gsoc-logo_small.png create mode 100644 tags/cdf/index.html create mode 100644 tags/cdf/index.xml create mode 100644 tags/cdf/page/1/index.html create mode 100644 tags/cicd/index.html create mode 100644 tags/cicd/index.xml create mode 100644 tags/cicd/page/1/index.html create mode 100644 tags/events/index.html create mode 100644 tags/events/index.xml create mode 100644 tags/events/page/1/index.html create mode 100644 tags/gsoc/index.html create mode 100644 tags/gsoc/index.xml create mode 100644 tags/gsoc/page/1/index.html create mode 100644 tags/gsoc2019/index.html create mode 100644 tags/gsoc2019/index.xml create mode 100644 tags/gsoc2019/page/1/index.html create mode 100644 tags/opensource/index.html create mode 100644 tags/opensource/index.xml create mode 100644 tags/opensource/page/1/index.html create mode 100644 wechat/articles/2019-03-13-gsoc2019-announcement/index.html create mode 100644 wechat/articles/2019-03-13-ready-for-cdf/index.html create mode 100644 wechat/images/gsoc/jenkins-gsoc-logo_small.png diff --git a/images/gsoc/jenkins-gsoc-logo_small.png b/images/gsoc/jenkins-gsoc-logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2afe2a0b5d51920ce17563d1f8209a1834ecbd GIT binary patch literal 50095 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

1OV(o;s!`sy`Dj=%Z>X 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

Na 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 5f5368b0..6ec01439 100644 --- a/index.html +++ b/index.html @@ -248,8 +248,8 @@ - - + + @@ -269,8 +269,8 @@ - - + + diff --git a/index.json b/index.json index 0b0272d5..34774548 100644 --- a/index.json +++ b/index.json @@ -13,6 +13,13 @@ "description": "跨平台构建的流水线 demo", "content": " 面向读者:最好是了解 Jenkins 流水线的基本语法。\nElectron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库。\n本文将介绍 Electron 桌面应用的流水线的设计。\n但是如何介绍呢?倒是个大问题。笔者尝试直接贴代码,在代码注释中讲解。这是一次尝试,希望得到你的反馈。\n完整代码 pipeline { // 我们决定每一个阶段指定 agent,所以, // 流水线的 agent 设置为 none,这样不会占用 agent agent none // 指定整条流水线的环境变量 environment { APP_VERSION = \u0026quot;\u0026quot; APP_NAME = \u0026quot;electron-webpack-quick-start\u0026quot; } stages { stage(\u0026quot;生成版本号\u0026quot;){ agent {label \u0026quot;linux\u0026quot; } steps{ script{ APP_VERSION = generateVersion(\u0026quot;1.0.0\u0026quot;) echo \u0026quot;version is ${APP_VERSION}\u0026quot; }} } stage('并行构建') { // 快速失败,只要其中一个平台构建失败, // 整次构建算失败 failFast true // parallel 闭包内的阶段将并行执行 parallel { stage('Windows平台下构建') { agent {label \u0026quot;windows \u0026amp;\u0026amp; nodejs\u0026quot; } steps { echo \u0026quot;${APP_VERSION}\u0026quot; } } stage('Linux平台下构建') { agent {label \u0026quot;linux \u0026amp;\u0026amp; nodejs\u0026quot; } // 不同平台可能存在不同的环境变量 // environment 支持阶段级的环境变量 environment{ SUFFIX = \u0026quot;tar.xz\u0026quot; APP_PLATFORM = \u0026quot;linux\u0026quot; ARTIFACT_PATH = \u0026quot;dist/${APP_NAME}-${APP_PLATFORM}-${APP_VERSION}.${SUFFIX}\u0026quot; } steps { script{ // Jenkins nodejs 插件提供的 nodejs 包装器 // 包装器内可以执行 npm 命令。 // nodejs10.15.2 是在 Jenkins 的全局工具配置中添加的 NodeJS 安装器 nodejs(nodeJSInstallationName: 'nodejs10.15.2') { // 执行具体的构建命令 sh \u0026quot;npm install yarn\u0026quot; sh \u0026quot;yarn version --new-version ${APP_VERSION}\u0026quot; sh \u0026quot;yarn install\u0026quot; sh \u0026quot;yarn dist --linux deb ${SUFFIX}\u0026quot; // 上传制品 uploadArtifact(\u0026quot;${APP_NAME}\u0026quot;, \u0026quot;${APP_VERSION}\u0026quot;, \u0026quot;${ARTIFACT_PATH}\u0026quot;) }}} // 将括号合并是为了让代码看起来紧凑,提升阅读体验。下同。 } stage('Mac平台下构建') { agent {label \u0026quot;mac \u0026amp;\u0026amp; nodejs\u0026quot; } stages { stage('mac 下阶段1') { steps { echo \u0026quot;staging 1\u0026quot; } } stage('mac 下阶段2') { steps { echo \u0026quot;staging 2\u0026quot; } } } } } } stage(\u0026quot;其它阶段,读者可根据情况自行添加\u0026quot;){ agent {label \u0026quot;linux\u0026quot;} steps{ echo \u0026quot;发布\u0026quot; } } } post { always { cleanWs() } } // 清理工作空间 } def generateVersion(def ver){ def gitCommitId = env.GIT_COMMIT.take(7) return \u0026quot;${ver}-${gitCommitId}.${env.BUILD_NUMBER}\u0026quot; } def uploadArtifact(def appName, def appVersion, def artifactPath){ echo \u0026quot;根据参数将制品上传到制品库中,待测试\u0026quot; } 代码补充说明 因为 Electron 是跨平台的,我们需要将构建过程分别放到 Windows、Linux、Mac 各平台下执行。所以,不同平台的构建任务需要执行在不同的 agent 上。我们通过在 stage 内定义 agent 实现。如在“Mac平台下构建”的阶段中,agent {label \u0026quot;mac \u0026amp;\u0026amp; nodejs\u0026quot; } 指定了只有 label 同时包括了 mac 和 nodejs 的 agent 才能执行构建。\n多平台的构建应该是并行的,以提升流水线的效率。我们通过 parallel 指令实现。\n另外,默认 Electron 应用使用的三段式版本号设计,即 Major.Minor.Patch。但是笔者认为三段式的版本号信息还不够追踪应用与构建之间的关系。笔者希望版本号能反应出构建号和源代码的 commit id。函数 generateVersion 用于生成此类版本号。生成的版本号,看起来类似这样:1.0.0-f7b06d0.28。\n完整源码地址:https://github.com/zacker330/electronjs-pipeline-demo\n小结 上例中,Electron 应用的流水线设计思路,不只是针对 Electron 应用,所有的跨平台应用的流水线都可以参考此思路进行设计。设计思路大概如下: 1. 多平台构建并行化。本文只有操作系统的类型这个维度进行了说明。现实中,还需要考虑其它维度,如系统位数(32位、64位)、各操作系统下的各版本。 2. 各平台下的构建只做一次编译打包。并将制品上传到制品库,以方便后续步骤或阶段使用。 3. 全局变量与平台相关变量进行分离。\n最后,希望能给读者带来一些启发。\n参考: 持续交付的八大原则:https://blog.csdn.net/tony1130/article/details/6673741 Jenkins nodejs 插件:https://plugins.jenkins.io/nodejs Electron 版本管理:https://electronjs.org/docs/tutorial/electron-versioning#semver 审校 LinuxSuRen(https://github.com/LinuxSuRen) " }, + { + "uri": "https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/", + "title": "为 Continuous Delivery Foundation 的成立感到兴奋", + "tags": ["cdf", "cicd", "jenkins", "opensource"], + "description": "CDF 就要来啦", + "content": "大概十一年前,我就开始为现在被称为 Jenkins 的项目做贡献,自己当时其实也并不知道在做什么。但是接下来发生的事情令人感觉难以置信,数以百计的贡献者加入,成千上万的新用户开始使用 Jenkins,每天都会运行数以百万条的流水线。这样的增长是充满挑战性的,用户的增长意味着问题的增长,问题的增长就意味着需要新的解决方式。 在大约两年半之前,我在2017年的 Jenkins World Contributor Summit 大会上面对一大群 Jenkins 的贡献者们,为我的所谓的 \u0026lsquo;Jenkins软件基金会\u0026rsquo; 做了宣传,那就是,不要羞于从 Python 社区汲取思想,在我的朋友 Chris Aniszczyk 和 Linux 基金会的帮助下,这个基金会变成了一个更加全面的 *持续交付基金会*(CDF),我的同事 Tracy Miranda 一直在领导这项工作,帮助推动 CDF 的成立。\nKohsuke 为 jenkinsci-dev@ mailing list 撰写了一篇很好的概述文章,其中列举了如果 Jenkins 项目一旦建立后就应该加入 Continuous Delivery Foundation 的原因。如果你对 Jenkins 项目感兴趣,但是还没有阅读过这边文章的话,那我认为你应该花些时间来阅读 Kohsuke 的这份邮件。但是在 这篇文章 中,我 想分享我愿意帮助建立持续交付基金会(CDF)的原因。\n持续交付(CD)已经成为我职业生涯中不可或缺的一部分,甚至在 Jez Humble 将此概念清晰地表述之前,我就开始学习 CD 并且对它一直充满热情。我认为它对软件的开发实践至关重要,当有人说他们没有练习使用 CI 或 CD 时,我感觉这就像回到了原始社会。想象一下,如果有人说 \u0026ldquo;呃,我们在这里有一个采用 Source Control 的项目,但领导们觉得这个东西不太靠谱\u0026rdquo;,我想你肯定会惊掉下巴。\u0026rdquo;在这个时代竟然还有开发团队都不使用源代码管理?\u0026rdquo;。总体来说,我认为CD已经是现代软件开发的基础了。\n持续交付也 不是 说只依赖于 Jenkins 这样的单一工具,它也是依赖于其他的用于协同工作的许多工具。虽然我可能觉得 Jenkins 是所有工具中占最中心位置的工具,但也不是说 Jenkins 是这些工具中唯一优秀的一款工具。但是不幸的是,像 Jenkins 这样的许多开源社区往往对他们的世界有着一定的狭隘观点。他们只专注于他们的事情,虽然这是有道理的,但这及可能导致错失交叉合作产生新价值的机会。\n我们所依赖 CD 的许多工具现在都是完全支持的,或者一小部分由不同的供应商支持。Jenkins 从 CloudBees、微软和 Red Hat 获得了大量投资。在过去的五年中,我逐渐认识到像 CDF 这样的基金会需要在这些不同公司中保持中立的位置。我们为企业贡献者提供一套指导方针,规则和期望,这样开源项目就会更有可能从他们那里获得支持。无论是宣传,代码或是现金,帮助企业贡献者在与我们其他人在一个相同的中立立场上,都会有助于确保开源工作的长久性。而且基金会制定规则的附加好处是,公司的参与者不会有意或无意地想要去超越对方或某个贡献者。\n在免费和开源项目的早期阶段,我们自欺欺人地认为每个人都会阅读我们的许可证,订阅我们的“开源精神”,提出问题并修复问题,或者为我们贡献代码。但 现实情况是,运营大型开源社区其实需要更多的资源。它不仅需要人,需要基础设施,而且还需要钱。像 CDF 这样的基金会为依赖项目或以其他方式投资项目的组织提供了一种有意义的参与方式。 Jenkins 项目的资金预算很紧张,我们每年的花费大约在10,000-15,000美元之间。如果我们要将我们捐赠的资产,提供的免费服务或我过去十一年来所做的事情都收取报酬的话,那么这个数字每年在60,000-80,000美元之间。 Kohsuke 可以证明我有能力为 Jenkins 项目提供免费的东西,但免费的东西并不是每年都保证会有的。为了更好的发展,Jenkins 需要一个稳定的预算,类似于像 FreeBSD Foundation 这样的大型基金会,这样我们便可以投资于服务和人员。\n如果您发现自己在担心开源的可持续性,那么请查看不同的社区,众筹或其他意识形态工具(如许可变更),并且请允许我帮助您。一致的预算是让大型开源项目可持续发展的重要因素。因为开源项目靠的是 *人*。确保有才能的作家,开发人员,营销人员,测试人员和设计师继续提供支持,就代表着他们雇主必须代表他们投入时间的成本,或者他们需要通过其他方式获得报酬。我坚信开源基金会能够为更大的免费和开源项目发展提供解决 预算 问题的途径。\nCDF虽然尚未启动,但我已经对它的潜力感到兴奋。因为这个基金会不仅适用于Jenkins项目,还适用于整个持续交付领域。\n" + }, { "uri": "https://jenkins-zh.github.io/wechat/articles/2019-01-08-mpl-modular-pipeline-library/", "title": "MPL - 模块化的流水线库", @@ -146,6 +153,20 @@ "description": "", "content": "" }, + { + "uri": "https://jenkins-zh.github.io/tags/cdf/", + "title": "Cdf", + "tags": [], + "description": "", + "content": "" + }, + { + "uri": "https://jenkins-zh.github.io/tags/cicd/", + "title": "Cicd", + "tags": [], + "description": "", + "content": "" + }, { "uri": "https://jenkins-zh.github.io/tags/cloud-native/", "title": "Cloud Native", @@ -209,6 +230,13 @@ "description": "", "content": "" }, + { + "uri": "https://jenkins-zh.github.io/tags/events/", + "title": "Events", + "tags": [], + "description": "", + "content": "" + }, { "uri": "https://jenkins-zh.github.io/tags/evergreen/", "title": "Evergreen", @@ -216,6 +244,20 @@ "description": "", "content": "" }, + { + "uri": "https://jenkins-zh.github.io/tags/gsoc/", + "title": "Gsoc", + "tags": [], + "description": "", + "content": "" + }, + { + "uri": "https://jenkins-zh.github.io/tags/gsoc2019/", + "title": "Gsoc2019", + "tags": [], + "description": "", + "content": "" + }, { "uri": "https://jenkins-zh.github.io/tags/installers/", "title": "Installers", @@ -279,6 +321,13 @@ "description": "运行在 K8S 上的 Jenkins 动态节点", "content": " 最近我们构建和部署服务的方式与原来相比简直就是突飞猛进,像那种笨拙的、单一的、用于构建单体式应用程序的方式已经是过去式了。我们努力了这么久,终于达到了现在的效果。现在的应用为了提供更好的拓展性和可维护性,都会去拆解成各种相互依赖小、解耦性强的微服务,这些服务有各自的依赖和进度。如果你想去构建你所负责的服务,那么从一开始,就应该使用 CI/CD 的方式;当然,如果你走上了这条路, Jenkins 就是你的良师益友。\n如果你是做微服务的话,那让我们在开始之前先花些时间想一想。如果你只在 Jenkins 上构建单体式应用程序,那你肯定每天都会运行很多 Jenkins job, 而且还要不厌其烦地运行很多次。所以,我们应该好好想清楚怎么样来做出一些改变来适应这种事情。其实只需要付出一些努力,Jenkins 就可以帮我们很好地解决这种事情。\n我的 Jenkins 的进阶之路 作为一个 Devops 从业者,我遇到的最大问题是如何管理并优化自己的 Jenkins agent 结构。如果只是用 Jenkins 玩玩,实验性地跑一些流水线,那根本不用考虑 agent 的事情。如果你每天要跑成百上千条流水线的话,那考虑怎么去做优化就是一件非常非常重要的事情了。在 Jenkins 进阶之路中,我也尝试了各种不同的方式来寻找最好的 Jenkins agent 的使用方式。相信如果你也和我一样经历过,那下面这些事情你一定会很熟悉喽。\n下面是我在这些年中使用 Jenkins 的各个阶段.\n 所有的构建都在 master 节点上跑,在这个节点上运行所有的组件. (我给这个阶段起了个可爱的名字, Hello Jenkins) 创建一个 Jenkins EC2 代理,并且在这个代理上运行所有的构建,怎么说呢, 就是大而全,这个节点什么都能做。如果需要同时做多条任务,那就把这个大而全的节点克隆一份。 (这个阶段我起的名字是 Monster Agent.) 为每种服务创建不同的 Jenkins EC2 的节点 (这个阶段我起的名字叫做 Snowflake Agent.) 在容器中运行流水线的所有步骤。 打个比方,在 Jenkins 中使用 Docker Plugin 这个插件将代理挂载到容器中,或者使用 multi-stage Dockerfiles 把所有构建,测试打包的流程都封装起来。这两种方法都是很好的容器抽象化的开端,并且允许您轻松地将制品从一个容器复制到另一个容器。当然了,每一种方法都是需要访问 Docker engine 的。为了让我的 Jenkins 代理能够正常工作,现在我用以下几种方式来管理 docker host 在我的 Jenkins 主容器中运行一个Docker engine - Docker in Docker (DinD) 把主机上的 Docker socket 挂载到我的容器中来,让我的容器能够以 sidecar 的方式运行。 为 Jenkins 主服务器配置单个外部 EC2 Docker 主机,以用于在容器中启动构建 使用 EC2 插件和包含 Docker Engine 的 AMI 动态启动代理,然后运行多阶段 Dockerfile 中的所有步骤 以上这些阶段各有利弊,但都是为了让我们从管理 Jenkins 节点中解放出来。不过,最近我又进阶到了另外一个阶段:Jenkins on Kubernetes.\n一旦你在 Jenkins 中把构建节点和 job 都容器化了的话,迁移工作平台将变的十分简单易行。在这里郑重声明一下,在我用这个方法之前我一直没有接触过 Kubernetes,一次也没有。也就是说,在 Google Cloud Platform(GCP)GKE 中创建 Kubernetes 集群,使用 Helm Chart启动 Jenkins master ,并在 Kubernetes 集群中的 Jenkins 代理中运行构建是非常简单的。\n流水线脚本中启动 K8s 中的代理 这篇文章就是为了向大家说明,如何配置 Jenkins 才能使流水线脚本能够在 K8s 集群中启动 Jenkins 节点。首先你要先安装 Kubernetes plugin 这个插件。有意思的是,当我用 Helm chart 来安装我的 Jenkins 时,安装好的 Jenkins 里面已经有了这个插件。还有一个前提,是你启动的 Jenkins 节点要和你的 Jenkins master 在同一个 K8s 集群里。\n一旦在 K8s 中运行了你的 Jenkins master 节点,那只需要再简单地配置几步,就能启动一个小构建啦。\n配置 Jenkins Master 为了保证 Jenkins 能够访问 K8s 集群的资源,首先你需要按照以下步骤创建一些凭据:\n 进入 Jenkins 的 UI 界面,点击左边导航栏里的凭据链接 点击 Stores scoped to Jenkins 列表下 global 中的 Add credentials (将鼠标悬停在链接旁边即可看到箭头) 点击添加凭证 写好 Kubernetes Service Account 将范围设置为全局 点击 OK 按钮 这样之后 Jenkins 就可以使用这个凭据去访问 K8s 的资源啦\n在 Jenkins Master 中配置云 下一步就是在 Jenkins 中设置云的配置\n 进入 Jenkins UI 界面,点击 系统管理 → 系统设置 进入管理界面后查找 『云』,一般在下面,然后点击 『新增一个云』,选择 kubernetes 类型 然后这些是必填的参数 Name: 这个自定义, 默认的是kubernetes Kubernetes URL: https://kubernetes.default- 这个一般是从你的 service account 自动配置的 Kubernetes Namespace: 一般是 default 除非你要在一个特殊的命名空间 ,否则不要动他 Credentials: 选择上一步你创建的凭据 Jenkins URL: http://\u0026lt;your_jenkins_hostname\u0026gt;:8080 Jenkins tunnel: \u0026lt;your_jenkins_hostname\u0026gt;:5555 - 这就是用来和 Jenkins 启动的 agent 进行交互的端口 你看,只需要几个参数就能在 K8s 集群中启动一些节点了,当然你的环境有需要的话,你也可以做一些其他的调整\n现在你已经可以通过定义一些 pod 来让 Jenkins master 访问 K8s 集群了。pod其实是 K8s 中的概念,在一个 pod 中里面会有一个或者多个容器,它们共享网络还有存储,然后我们可以在这个 pod 中执行一些构建工作。每一个 Jenkins 节点都是作为 K8s pod 来启动的。这个 pod 里面经常都会包含一个默认的 JNLP 的容器,还有一些你在 pod 模板中定义的容器。现在有至少两种方法来定义你的 pod template。\n通过 Jenkins UI 配置一个 pod template 还是老地方 Manage Jenkins → Configure Systems 还是老地方 找到之前配置 Jenkins K8s 的地方 点击 Add Pod Template button 选择 Kubernetes Pod Template 输入下面的值 Name:自定义 Namespace: default-除非你想换个你在上一步自定义的命名空间 Labels: 自定义 - 这个将用来匹配你在 jenkinsfile 中的 label 值 Usage: 如果你想让这个 pod 作为默认节点的话,就选择 \u0026ldquo;Use this node as much as possible\u0026rdquo;, 如果选择 \u0026ldquo;Only build jobs with label matching expressions matching this node\u0026rdquo; 的话 那就是只有在 Jenkins 脚本中定义的label匹配的构建才能使用这个节点 The name of the pod template to inherit from: - 这个可以置空. 现在还用不到 Containers: 你想在这个 pod 中启动的容器,在下面会有详细的介绍 EnvVars: 你想在 pod 中注入的环境变量 下面会有接受 Volumes: 你想在 pod 中挂载的任何一种的卷 需要记住,在一个 pod 中会有不止一个容器,它们都是同生共死的。如果你是用 Helm chart 安装 Jenkins 的话,pod 中就会包含 JNLP 这个容器,这个容器也是 Jenkins agent 中必须包含的。然而为了完成更多的服务的构建,你还需要添加一些其他工具链的容器。\n添加容器模板 进入 Jenkins UI 界面,回到上一步创建 pod template 的地方 点击 Add Container 按钮, 选择 Container Template 输入下面的值 Name:自定义 Docker image: 根据你自己的需求来写,比如你在构建一个用 go 写的应用,那你就可以输入 golang:1.11-alpine3.8 Label: 表明要用在流水线脚本中引用此容器模板的标签字符串 Always pull image: - 如果你想让 pod 启动的时候都去拉取镜像 那就选择这个 你可以保留其他参数的默认值,但是你可以看到该插件可以对你的 pod 以及在其中运行的各个容器进行很详细地控制。你可以通过此插件设置在 Kubernetes pod 配置中的任何值。你还可以通过输入原始 YAML 来注入配置数据。你无需因选项过多而分心,选择配置它们中得一小部分就可以获得工作环境啦。\n您可以单击容器模板中的“添加环境变量”按钮,将环境变量注入特定容器,也可以单击模板中的“添加环境变量”按钮,将环境变量注入所有的容器。 以下环境变量会自动注入默认的 JNLP 容器,来保障它能自动连接到 Jenkins 主服务器:\n JENKINS_URL: Jenkins 网页界面网址 JENKINS_JNLP_URL: Jenkins 特定 slave 中 jnlp 的 url JENKINS_SECRET: 身份验证的密钥 JENKINS_NAME: Jenkins 代理的名称 如果单击“添加卷”按钮,您将看到几个用于添加卷的选项,在这里我使用 Host Path Volume 选项将 docker socket 安装在 pod 中。然后,我可以运行安装了 Docker 客户端的容器,并且来构建和推送 Docker 镜像。\n此时,我们为 Kubernetes 集群创建了一个云配置,并定义了一个由一个或多个容器组成的 pod。现在,我们如何使用它来运行 Jenkins 工作? 很简单,只需要我们在 Jenkins 流水线脚本中通过标签引用 pod 和容器就可以了。 本文中的示例是使用脚本流水线,当然您可以使用声明式流水线语法实现相同的结果:\nnode('test-pod') { stage('Checkout') { checkout scm } stage('Build'){ container('go-agent') { // This is where we build our code. } } } 用 jenkinsfile 来实现相同的功能 通过 UI 配置插件现在看起来是很不错的。但是有一个明显的问题是,配置不能像源代码一样能够进行版本控制和存储。幸运的是,您可以直接在 Jenkinsfile 中创建整个 pod 定义。哈哈,在 Jenkinsfile 中有什么你不能做的???\n可以将 UI 或 YAML 定义中可用的任何配置参数添加到 podTemplate 和 containerTemplate 部分。 在下面的示例中,我已经定义了一个包含两个容器模板的 pod。 pod 标签将会用于节点,表示我们想要启动此 pod 的实例。 直接在节点内定义但没有在容器块中定义的任何步骤,都可以在默认的 JNLP 容器中运行。\n容器块用于表示该容器块内的步骤应在具有给定标签的容器内运行。我已经定义了一个标签为 golang 的容器模板,我将用它来构建 Go 可执行文件,我最终将其打包成 Docker 镜像。在 volumes 中,我已经指出我想要挂载主机的 Docker 套接字,但我仍然需要 Docker 客户端使用 Docker API 与它进行交互。因此,我已经定义了一个标签为 docker 的容器模板,该模板使用安装了 Docker 客户端的镜像。\npodTemplate( name: 'test-pod', label: 'test-pod', containers: [ containerTemplate(name: 'golang', image: 'golang:1.9.4-alpine3.7'), containerTemplate(name: 'docker', image:'trion/jenkins-docker-client'), ], volumes: [ hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock', ], { //node = the pod label node('test-pod'){ //container = the container label stage('Build'){ container('golang'){ // This is where we build our code. } } stage('Build Docker Image'){ container(‘docker’){ // This is where we build the Docker image } } } }) 在我的基于 Docker 的流水线脚本中,我构建了 Docker 镜像并将它们推送到了 Docker 仓库,对我来说,能够复制这些配置信息非常重要。完成后,我已准备好使用 gcloud(Google Cloud SDK)构建我的镜像,并将该镜像推送到 Google Container Registry,以便部署到我的 K8s 群集。\n为此,我使用 gcloud 镜像指定了一个容器模板,并将我的 docker 命令更改为 gcloud 命令。 就这么简单!\npodTemplate( name: 'test-pod', label: 'test-pod', containers: [ containerTemplate(name: 'golang', image: 'golang:1.9.4-alpine3.7'), containerTemplate(name: 'gcloud', image:'gcr.io/cloud-builders/gcloud'), ], { //node = the pod label node('test-pod'){ //container = the container label stage('Build'){ container('golang'){ // This is where we build our code. } } stage('Build Docker Image'){ container(‘gcloud’){ //This is where we build and push our Docker image. } } } }) 在 Kubernetes 上运行 Jenkins master、 Jenkins 代理,构建和部署示例应用程序其实只花了我几个小时。但这之后,我花了一个周末的时间才深入了解了平台。如果你学得够快,我相信你在几天内就可以完全掌握并且灵活运用这个平台了。\n" }, + { + "uri": "https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/", + "title": "Jenkins 已经被 Google Summer Of Code 2019 接受!", + "tags": ["gsoc", "gsoc2019", "events", "community"], + "description": "19年的 Google Summer Of Code 正式起航", + "content": " 作为 Jenkins GSoC 管理员团队的代表,我很高兴地宣布 Jenkins 在2019年的 Google Summer of Code上 已经被接受。 今年,我们邀请了学生和导师加入 Jenkins 社区,并一起努力增强 Jenkins 生态圈。\n这里提供一些数字,这是有史以来最大的一次 GSoC,今年共有206个组织参与。并且,希望对 Jenkins 而言也是最大的一年。 我们有25个项目想法,而且有超过30个准导师(不断增多!)。 这已经超过了2016年以及2018年的总和。 有很多的插件,特别兴趣小组以及子项目已经加入了今年的 GSoC.而且,我们已经收到了十几个学生的消息以及第一次贡献,耶!\n下一步? GSoC 已经正式启动,请期待更多的学生在我们的Gitter 频道和邮件列表中联系项目。 在特别兴趣小组和子项目频道中已经有了很多沟通。 我们会努力帮助学生找到他们感兴趣的项目,在这个领域探索,并帮助他们在4月9日的截止日前准备好他们的项目提议。 然后,我们将会继续这个申请,选择项目并分配导师团队。\n所有关于 Jenkins GSoC 的信息都可以在子项目页面上找到。\n我是一个学生。如何申请? 在/projects/gsoc/students[学生的信息]页面中有完整的申请指导。\n我们鼓励感兴趣的学生尽早联系 Jenkins 社区并开始探索项目。所有的项目在对应的页面上都有聊天室与邮件列表。 我们也会为学生组织工作日的会议,在这些会议上你可以见到管理员和导师,并向他们提问。 另外,加入我们的Gitter 频道和邮件列表,以便收到项目中即将到来的事情。\n3月25日开放申请,但你现在就可以准备了!利用这段申请前的时间来讨论并改进你的项目提议。 我们也建议你着手熟悉 Jenkins 并开始探索你的提议的领域。项目的想法包括快速开始的指导,以及有助于初期研究时对新手友好的问题。 如果没有看到任何感兴趣的,你可以提出你自己的项目想法或者 查看由其他参与 GSoC 的组织提出的想法。\n我想要成为一名导师。会不会太晚了? 不晚!我们正在寻找更多的项目想法,以及 Jenkins 的贡献者或用户中对 Jenkins 富有热情并想要指导学生的人。 无须底层经验,导师可以和学生一起研究项目并给出技术指导。 我们尤其对 Java 技术栈方向感兴趣,以及一些新的技术和领域(例如:Kubernetes, IoT, Python, Go 或者其他的)。\n你可以提议一个新项目或者加入已有的。查看博客寻找导师以及导师的信息中的细节。 如果你想要提议一个新项目,那么请在3月11日之前完成,以便学生有时间探索并准备他们的提议。\n今年,导师并不必须要有 Jenkins 开发上的很强的专业知识。目标是指导学生参与到 Jenkins 社区。 如果需要特殊的专业知识,GSoC 组织管理员会帮助寻找顾问。\n重要的日期 3月11日 - 停止新的 GSoC 项目提议 4月9日 - 停止接受学生的申请 5月6日 - 宣布接受了的项目,团队开始社区合作以及编码 8月26日 - 结束编码 9月3日 - 宣布结果 查看 GSoC 时间线了解更多信息。 在 GSoC 期间和之后,我们也会组织 Jenkins 相关的特别活动(例如:在 Jenkins World 上)。\n" + }, { "uri": "https://jenkins-zh.github.io/wechat/articles/2018-11-14-first-voice/", "title": "Jenkins 微信订阅号", @@ -314,6 +363,13 @@ "description": "", "content": "" }, + { + "uri": "https://jenkins-zh.github.io/tags/opensource/", + "title": "Opensource", + "tags": [], + "description": "", + "content": "" + }, { "uri": "https://jenkins-zh.github.io/tags/outreachy/", "title": "Outreachy", diff --git a/index.xml b/index.xml index 5d96ff65..6556a085 100644 --- a/index.xml +++ b/index.xml @@ -37,6 +37,18 @@ Electron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台 完整代码 pipeline { // 我们决定每一个阶段指定 agent,所以, // 流水线的 agent 设置为 none,这样不会占用 agent agent none // 指定整条流水线的环境变量 environment { APP_VERSION = &quot;&quot; APP_NAME = &quot;electron-webpack-quick-start&quot; } stages { stage(&quot;生成版本号&quot;){ agent {label &quot;linux&quot; } steps{ script{ APP_VERSION = generateVersion(&quot;1.0.0&quot;) echo &quot;version is ${APP_VERSION}&quot; }} } stage('并行构建') { // 快速失败,只要其中一个平台构建失败, // 整次构建算失败 failFast true // parallel 闭包内的阶段将并行执行 parallel { stage('Windows平台下构建') { agent {label &quot;windows &amp;&amp; nodejs&quot; } steps { echo &quot;${APP_VERSION}&quot; } } stage('Linux平台下构建') { agent {label &quot;linux &amp;&amp; nodejs&quot; } // 不同平台可能存在不同的环境变量 // environment 支持阶段级的环境变量 environment{ SUFFIX = &quot;tar. + + 为 Continuous Delivery Foundation 的成立感到兴奋 + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + 大概十一年前,我就开始为现在被称为 Jenkins 的项目做贡献,自己当时其实也并不知道在做什么。但是接下来发生的事情令人感觉难以置信,数以百计的贡献者加入,成千上万的新用户开始使用 Jenkins,每天都会运行数以百万条的流水线。这样的增长是充满挑战性的,用户的增长意味着问题的增长,问题的增长就意味着需要新的解决方式。 在大约两年半之前,我在2017年的 Jenkins World Contributor Summit 大会上面对一大群 Jenkins 的贡献者们,为我的所谓的 &lsquo;Jenkins软件基金会&rsquo; 做了宣传,那就是,不要羞于从 Python 社区汲取思想,在我的朋友 Chris Aniszczyk 和 Linux 基金会的帮助下,这个基金会变成了一个更加全面的 *持续交付基金会*(CDF),我的同事 Tracy Miranda 一直在领导这项工作,帮助推动 CDF 的成立。 +Kohsuke 为 jenkinsci-dev@ mailing list 撰写了一篇很好的概述文章,其中列举了如果 Jenkins 项目一旦建立后就应该加入 Continuous Delivery Foundation 的原因。如果你对 Jenkins 项目感兴趣,但是还没有阅读过这边文章的话,那我认为你应该花些时间来阅读 Kohsuke 的这份邮件。但是在 这篇文章 中,我 想分享我愿意帮助建立持续交付基金会(CDF)的原因。 +持续交付(CD)已经成为我职业生涯中不可或缺的一部分,甚至在 Jez Humble 将此概念清晰地表述之前,我就开始学习 CD 并且对它一直充满热情。我认为它对软件的开发实践至关重要,当有人说他们没有练习使用 CI 或 CD 时,我感觉这就像回到了原始社会。想象一下,如果有人说 &ldquo;呃,我们在这里有一个采用 Source Control 的项目,但领导们觉得这个东西不太靠谱&rdquo;,我想你肯定会惊掉下巴。&rdquo;在这个时代竟然还有开发团队都不使用源代码管理?&rdquo;。总体来说,我认为CD已经是现代软件开发的基础了。 +持续交付也 不是 说只依赖于 Jenkins 这样的单一工具,它也是依赖于其他的用于协同工作的许多工具。虽然我可能觉得 Jenkins 是所有工具中占最中心位置的工具,但也不是说 Jenkins 是这些工具中唯一优秀的一款工具。但是不幸的是,像 Jenkins 这样的许多开源社区往往对他们的世界有着一定的狭隘观点。他们只专注于他们的事情,虽然这是有道理的,但这及可能导致错失交叉合作产生新价值的机会。 + + MPL - 模块化的流水线库 https://jenkins-zh.github.io/wechat/articles/2019-01-08-mpl-modular-pipeline-library/ @@ -302,6 +314,24 @@ JCasC 能为 Jenkins 管理员做些什么? JCasC 允许我们在启动时或 所有的构建都在 master 节点上跑,在这个节点上运行所有的组件. (我给这个阶段起了个可爱的名字, Hello Jenkins) 创建一个 Jenkins EC2 代理,并且在这个代理上运行所有的构建,怎么说呢, 就是大而全,这个节点什么都能做。如果需要同时做多条任务,那就把这个大而全的节点克隆一份。 (这个阶段我起的名字是 Monster Agent.) 为每种服务创建不同的 Jenkins EC2 的节点 (这个阶段我起的名字叫做 Snowflake Agent.) 在容器中运行流水线的所有步骤。 打个比方,在 Jenkins 中使用 Docker Plugin 这个插件将代理挂载到容器中,或者使用 multi-stage Dockerfiles 把所有构建,测试打包的流程都封装起来。这两种方法都是很好的容器抽象化的开端,并且允许您轻松地将制品从一个容器复制到另一个容器。当然了,每一种方法都是需要访问 Docker engine 的。为了让我的 Jenkins 代理能够正常工作,现在我用以下几种方式来管理 docker host 在我的 Jenkins 主容器中运行一个Docker engine - Docker in Docker (DinD) 把主机上的 Docker socket 挂载到我的容器中来,让我的容器能够以 sidecar 的方式运行。 为 Jenkins 主服务器配置单个外部 EC2 Docker 主机,以用于在容器中启动构建 使用 EC2 插件和包含 Docker Engine 的 AMI 动态启动代理,然后运行多阶段 Dockerfile 中的所有步骤 以上这些阶段各有利弊,但都是为了让我们从管理 Jenkins 节点中解放出来。不过,最近我又进阶到了另外一个阶段:Jenkins on Kubernetes. + + Jenkins 已经被 Google Summer Of Code 2019 接受! + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + 作为 Jenkins GSoC 管理员团队的代表,我很高兴地宣布 Jenkins 在2019年的 Google Summer of Code上 已经被接受。 今年,我们邀请了学生和导师加入 Jenkins 社区,并一起努力增强 Jenkins 生态圈。 +这里提供一些数字,这是有史以来最大的一次 GSoC,今年共有206个组织参与。并且,希望对 Jenkins 而言也是最大的一年。 我们有25个项目想法,而且有超过30个准导师(不断增多!)。 这已经超过了2016年以及2018年的总和。 有很多的插件,特别兴趣小组以及子项目已经加入了今年的 GSoC.而且,我们已经收到了十几个学生的消息以及第一次贡献,耶! +下一步? GSoC 已经正式启动,请期待更多的学生在我们的Gitter 频道和邮件列表中联系项目。 在特别兴趣小组和子项目频道中已经有了很多沟通。 我们会努力帮助学生找到他们感兴趣的项目,在这个领域探索,并帮助他们在4月9日的截止日前准备好他们的项目提议。 然后,我们将会继续这个申请,选择项目并分配导师团队。 +所有关于 Jenkins GSoC 的信息都可以在子项目页面上找到。 +我是一个学生。如何申请? 在/projects/gsoc/students[学生的信息]页面中有完整的申请指导。 +我们鼓励感兴趣的学生尽早联系 Jenkins 社区并开始探索项目。所有的项目在对应的页面上都有聊天室与邮件列表。 我们也会为学生组织工作日的会议,在这些会议上你可以见到管理员和导师,并向他们提问。 另外,加入我们的Gitter 频道和邮件列表,以便收到项目中即将到来的事情。 +3月25日开放申请,但你现在就可以准备了!利用这段申请前的时间来讨论并改进你的项目提议。 我们也建议你着手熟悉 Jenkins 并开始探索你的提议的领域。项目的想法包括快速开始的指导,以及有助于初期研究时对新手友好的问题。 如果没有看到任何感兴趣的,你可以提出你自己的项目想法或者 查看由其他参与 GSoC 的组织提出的想法。 +我想要成为一名导师。会不会太晚了? 不晚!我们正在寻找更多的项目想法,以及 Jenkins 的贡献者或用户中对 Jenkins 富有热情并想要指导学生的人。 无须底层经验,导师可以和学生一起研究项目并给出技术指导。 我们尤其对 Java 技术栈方向感兴趣,以及一些新的技术和领域(例如:Kubernetes, IoT, Python, Go 或者其他的)。 +你可以提议一个新项目或者加入已有的。查看博客寻找导师以及导师的信息中的细节。 如果你想要提议一个新项目,那么请在3月11日之前完成,以便学生有时间探索并准备他们的提议。 +今年,导师并不必须要有 Jenkins 开发上的很强的专业知识。目标是指导学生参与到 Jenkins 社区。 如果需要特殊的专业知识,GSoC 组织管理员会帮助寻找顾问。 + + Jenkins 微信订阅号 https://jenkins-zh.github.io/wechat/articles/2018-11-14-first-voice/ diff --git a/sitemap.xml b/sitemap.xml index 3fd1f58a..c48ae777 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -11,6 +11,11 @@ 2019-03-13T00:00:00+00:00 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + 2019-03-13T00:00:00+00:00 + + https://jenkins-zh.github.io/wechat/articles/2019-01-08-mpl-modular-pipeline-library/ 2019-03-06T00:00:00+00:00 @@ -97,6 +102,18 @@ 0 + + https://jenkins-zh.github.io/tags/cdf/ + 2019-03-13T00:00:00+00:00 + 0 + + + + https://jenkins-zh.github.io/tags/cicd/ + 2019-03-13T00:00:00+00:00 + 0 + + https://jenkins-zh.github.io/tags/cloud-native/ 0 @@ -144,11 +161,26 @@ 0 + + https://jenkins-zh.github.io/tags/events/ + 0 + + https://jenkins-zh.github.io/tags/evergreen/ 0 + + https://jenkins-zh.github.io/tags/gsoc/ + 0 + + + + https://jenkins-zh.github.io/tags/gsoc2019/ + 0 + + https://jenkins-zh.github.io/tags/installers/ 0 @@ -193,6 +225,10 @@ https://jenkins-zh.github.io/wechat/articles/2019-01-30-k8s-jenkins-secet-agent/ + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + + https://jenkins-zh.github.io/wechat/articles/2018-11-14-first-voice/ @@ -216,6 +252,12 @@ 0 + + https://jenkins-zh.github.io/tags/opensource/ + 2019-03-13T00:00:00+00:00 + 0 + + https://jenkins-zh.github.io/tags/outreachy/ 2019-02-13T00:00:00+00:00 @@ -278,7 +320,7 @@ https://jenkins-zh.github.io/tags/ - 2019-02-20T00:00:00+00:00 + 2019-03-13T00:00:00+00:00 0 diff --git a/tags/cdf/index.html b/tags/cdf/index.html new file mode 100644 index 00000000..6e4b6de9 --- /dev/null +++ b/tags/cdf/index.html @@ -0,0 +1,276 @@ + + + + + + + + + + + + Cdf | Jenkins 中文社区 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + +
+ + + +
+ +
+ + +
+ + + + +
+ +
+ + + +
+
+ + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + diff --git a/tags/cdf/index.xml b/tags/cdf/index.xml new file mode 100644 index 00000000..a91ac479 --- /dev/null +++ b/tags/cdf/index.xml @@ -0,0 +1,27 @@ + + + + Cdf on Jenkins 中文社区 + https://jenkins-zh.github.io/tags/cdf/ + Recent content in Cdf on Jenkins 中文社区 + Hugo -- gohugo.io + zh-CN + Wed, 13 Mar 2019 00:00:00 +0000 + + + + + + 为 Continuous Delivery Foundation 的成立感到兴奋 + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + 大概十一年前,我就开始为现在被称为 Jenkins 的项目做贡献,自己当时其实也并不知道在做什么。但是接下来发生的事情令人感觉难以置信,数以百计的贡献者加入,成千上万的新用户开始使用 Jenkins,每天都会运行数以百万条的流水线。这样的增长是充满挑战性的,用户的增长意味着问题的增长,问题的增长就意味着需要新的解决方式。 在大约两年半之前,我在2017年的 Jenkins World Contributor Summit 大会上面对一大群 Jenkins 的贡献者们,为我的所谓的 &lsquo;Jenkins软件基金会&rsquo; 做了宣传,那就是,不要羞于从 Python 社区汲取思想,在我的朋友 Chris Aniszczyk 和 Linux 基金会的帮助下,这个基金会变成了一个更加全面的 *持续交付基金会*(CDF),我的同事 Tracy Miranda 一直在领导这项工作,帮助推动 CDF 的成立。 +Kohsuke 为 jenkinsci-dev@ mailing list 撰写了一篇很好的概述文章,其中列举了如果 Jenkins 项目一旦建立后就应该加入 Continuous Delivery Foundation 的原因。如果你对 Jenkins 项目感兴趣,但是还没有阅读过这边文章的话,那我认为你应该花些时间来阅读 Kohsuke 的这份邮件。但是在 这篇文章 中,我 想分享我愿意帮助建立持续交付基金会(CDF)的原因。 +持续交付(CD)已经成为我职业生涯中不可或缺的一部分,甚至在 Jez Humble 将此概念清晰地表述之前,我就开始学习 CD 并且对它一直充满热情。我认为它对软件的开发实践至关重要,当有人说他们没有练习使用 CI 或 CD 时,我感觉这就像回到了原始社会。想象一下,如果有人说 &ldquo;呃,我们在这里有一个采用 Source Control 的项目,但领导们觉得这个东西不太靠谱&rdquo;,我想你肯定会惊掉下巴。&rdquo;在这个时代竟然还有开发团队都不使用源代码管理?&rdquo;。总体来说,我认为CD已经是现代软件开发的基础了。 +持续交付也 不是 说只依赖于 Jenkins 这样的单一工具,它也是依赖于其他的用于协同工作的许多工具。虽然我可能觉得 Jenkins 是所有工具中占最中心位置的工具,但也不是说 Jenkins 是这些工具中唯一优秀的一款工具。但是不幸的是,像 Jenkins 这样的许多开源社区往往对他们的世界有着一定的狭隘观点。他们只专注于他们的事情,虽然这是有道理的,但这及可能导致错失交叉合作产生新价值的机会。 + + + + \ No newline at end of file diff --git a/tags/cdf/page/1/index.html b/tags/cdf/page/1/index.html new file mode 100644 index 00000000..9699841b --- /dev/null +++ b/tags/cdf/page/1/index.html @@ -0,0 +1 @@ +https://jenkins-zh.github.io/tags/cdf/ \ No newline at end of file diff --git a/tags/cicd/index.html b/tags/cicd/index.html new file mode 100644 index 00000000..77785e62 --- /dev/null +++ b/tags/cicd/index.html @@ -0,0 +1,276 @@ + + + + + + + + + + + + Cicd | Jenkins 中文社区 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ + +
+ + + + +
+ +
+ + + +
+
+ + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + diff --git a/tags/cicd/index.xml b/tags/cicd/index.xml new file mode 100644 index 00000000..91927205 --- /dev/null +++ b/tags/cicd/index.xml @@ -0,0 +1,27 @@ + + + + Cicd on Jenkins 中文社区 + https://jenkins-zh.github.io/tags/cicd/ + Recent content in Cicd on Jenkins 中文社区 + Hugo -- gohugo.io + zh-CN + Wed, 13 Mar 2019 00:00:00 +0000 + + + + + + 为 Continuous Delivery Foundation 的成立感到兴奋 + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + 大概十一年前,我就开始为现在被称为 Jenkins 的项目做贡献,自己当时其实也并不知道在做什么。但是接下来发生的事情令人感觉难以置信,数以百计的贡献者加入,成千上万的新用户开始使用 Jenkins,每天都会运行数以百万条的流水线。这样的增长是充满挑战性的,用户的增长意味着问题的增长,问题的增长就意味着需要新的解决方式。 在大约两年半之前,我在2017年的 Jenkins World Contributor Summit 大会上面对一大群 Jenkins 的贡献者们,为我的所谓的 &lsquo;Jenkins软件基金会&rsquo; 做了宣传,那就是,不要羞于从 Python 社区汲取思想,在我的朋友 Chris Aniszczyk 和 Linux 基金会的帮助下,这个基金会变成了一个更加全面的 *持续交付基金会*(CDF),我的同事 Tracy Miranda 一直在领导这项工作,帮助推动 CDF 的成立。 +Kohsuke 为 jenkinsci-dev@ mailing list 撰写了一篇很好的概述文章,其中列举了如果 Jenkins 项目一旦建立后就应该加入 Continuous Delivery Foundation 的原因。如果你对 Jenkins 项目感兴趣,但是还没有阅读过这边文章的话,那我认为你应该花些时间来阅读 Kohsuke 的这份邮件。但是在 这篇文章 中,我 想分享我愿意帮助建立持续交付基金会(CDF)的原因。 +持续交付(CD)已经成为我职业生涯中不可或缺的一部分,甚至在 Jez Humble 将此概念清晰地表述之前,我就开始学习 CD 并且对它一直充满热情。我认为它对软件的开发实践至关重要,当有人说他们没有练习使用 CI 或 CD 时,我感觉这就像回到了原始社会。想象一下,如果有人说 &ldquo;呃,我们在这里有一个采用 Source Control 的项目,但领导们觉得这个东西不太靠谱&rdquo;,我想你肯定会惊掉下巴。&rdquo;在这个时代竟然还有开发团队都不使用源代码管理?&rdquo;。总体来说,我认为CD已经是现代软件开发的基础了。 +持续交付也 不是 说只依赖于 Jenkins 这样的单一工具,它也是依赖于其他的用于协同工作的许多工具。虽然我可能觉得 Jenkins 是所有工具中占最中心位置的工具,但也不是说 Jenkins 是这些工具中唯一优秀的一款工具。但是不幸的是,像 Jenkins 这样的许多开源社区往往对他们的世界有着一定的狭隘观点。他们只专注于他们的事情,虽然这是有道理的,但这及可能导致错失交叉合作产生新价值的机会。 + + + + \ No newline at end of file diff --git a/tags/cicd/page/1/index.html b/tags/cicd/page/1/index.html new file mode 100644 index 00000000..d0320bb8 --- /dev/null +++ b/tags/cicd/page/1/index.html @@ -0,0 +1 @@ +https://jenkins-zh.github.io/tags/cicd/ \ No newline at end of file diff --git a/tags/community/index.html b/tags/community/index.html index 4b88a6b3..2eabf800 100644 --- a/tags/community/index.html +++ b/tags/community/index.html @@ -210,6 +210,33 @@ +
+ +
+ + +

+ Jenkins 已经被 Google Summer Of Code 2019 接受! +

+ + + + +
+
+ + + +
diff --git a/tags/community/index.xml b/tags/community/index.xml index 5eb86165..cb92b896 100644 --- a/tags/community/index.xml +++ b/tags/community/index.xml @@ -37,6 +37,24 @@ 我期待我们将会一起完成了不起的作品,而且我希望在将来能够帮助更多的 Outreachy 实习生! + + Jenkins 已经被 Google Summer Of Code 2019 接受! + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + 作为 Jenkins GSoC 管理员团队的代表,我很高兴地宣布 Jenkins 在2019年的 Google Summer of Code上 已经被接受。 今年,我们邀请了学生和导师加入 Jenkins 社区,并一起努力增强 Jenkins 生态圈。 +这里提供一些数字,这是有史以来最大的一次 GSoC,今年共有206个组织参与。并且,希望对 Jenkins 而言也是最大的一年。 我们有25个项目想法,而且有超过30个准导师(不断增多!)。 这已经超过了2016年以及2018年的总和。 有很多的插件,特别兴趣小组以及子项目已经加入了今年的 GSoC.而且,我们已经收到了十几个学生的消息以及第一次贡献,耶! +下一步? GSoC 已经正式启动,请期待更多的学生在我们的Gitter 频道和邮件列表中联系项目。 在特别兴趣小组和子项目频道中已经有了很多沟通。 我们会努力帮助学生找到他们感兴趣的项目,在这个领域探索,并帮助他们在4月9日的截止日前准备好他们的项目提议。 然后,我们将会继续这个申请,选择项目并分配导师团队。 +所有关于 Jenkins GSoC 的信息都可以在子项目页面上找到。 +我是一个学生。如何申请? 在/projects/gsoc/students[学生的信息]页面中有完整的申请指导。 +我们鼓励感兴趣的学生尽早联系 Jenkins 社区并开始探索项目。所有的项目在对应的页面上都有聊天室与邮件列表。 我们也会为学生组织工作日的会议,在这些会议上你可以见到管理员和导师,并向他们提问。 另外,加入我们的Gitter 频道和邮件列表,以便收到项目中即将到来的事情。 +3月25日开放申请,但你现在就可以准备了!利用这段申请前的时间来讨论并改进你的项目提议。 我们也建议你着手熟悉 Jenkins 并开始探索你的提议的领域。项目的想法包括快速开始的指导,以及有助于初期研究时对新手友好的问题。 如果没有看到任何感兴趣的,你可以提出你自己的项目想法或者 查看由其他参与 GSoC 的组织提出的想法。 +我想要成为一名导师。会不会太晚了? 不晚!我们正在寻找更多的项目想法,以及 Jenkins 的贡献者或用户中对 Jenkins 富有热情并想要指导学生的人。 无须底层经验,导师可以和学生一起研究项目并给出技术指导。 我们尤其对 Java 技术栈方向感兴趣,以及一些新的技术和领域(例如:Kubernetes, IoT, Python, Go 或者其他的)。 +你可以提议一个新项目或者加入已有的。查看博客寻找导师以及导师的信息中的细节。 如果你想要提议一个新项目,那么请在3月11日之前完成,以便学生有时间探索并准备他们的提议。 +今年,导师并不必须要有 Jenkins 开发上的很强的专业知识。目标是指导学生参与到 Jenkins 社区。 如果需要特殊的专业知识,GSoC 组织管理员会帮助寻找顾问。 + + 回顾 2018: 革新的一年 https://jenkins-zh.github.io/wechat/articles/2018-12-25-year-in-review/ diff --git a/tags/events/index.html b/tags/events/index.html new file mode 100644 index 00000000..0c9c00d4 --- /dev/null +++ b/tags/events/index.html @@ -0,0 +1,300 @@ + + + + + + + + + + + + Events | Jenkins 中文社区 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ + +
+ + + + +
+ +
+ + +
+ +
+ + +

+ Jenkins 已经被 Google Summer Of Code 2019 接受! +

+ + + + +
+
+ + + +
+
+ + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + diff --git a/tags/events/index.xml b/tags/events/index.xml new file mode 100644 index 00000000..9181de13 --- /dev/null +++ b/tags/events/index.xml @@ -0,0 +1,32 @@ + + + + Events on Jenkins 中文社区 + https://jenkins-zh.github.io/tags/events/ + Recent content in Events on Jenkins 中文社区 + Hugo -- gohugo.io + zh-CN + + + + + + Jenkins 已经被 Google Summer Of Code 2019 接受! + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + 作为 Jenkins GSoC 管理员团队的代表,我很高兴地宣布 Jenkins 在2019年的 Google Summer of Code上 已经被接受。 今年,我们邀请了学生和导师加入 Jenkins 社区,并一起努力增强 Jenkins 生态圈。 +这里提供一些数字,这是有史以来最大的一次 GSoC,今年共有206个组织参与。并且,希望对 Jenkins 而言也是最大的一年。 我们有25个项目想法,而且有超过30个准导师(不断增多!)。 这已经超过了2016年以及2018年的总和。 有很多的插件,特别兴趣小组以及子项目已经加入了今年的 GSoC.而且,我们已经收到了十几个学生的消息以及第一次贡献,耶! +下一步? GSoC 已经正式启动,请期待更多的学生在我们的Gitter 频道和邮件列表中联系项目。 在特别兴趣小组和子项目频道中已经有了很多沟通。 我们会努力帮助学生找到他们感兴趣的项目,在这个领域探索,并帮助他们在4月9日的截止日前准备好他们的项目提议。 然后,我们将会继续这个申请,选择项目并分配导师团队。 +所有关于 Jenkins GSoC 的信息都可以在子项目页面上找到。 +我是一个学生。如何申请? 在/projects/gsoc/students[学生的信息]页面中有完整的申请指导。 +我们鼓励感兴趣的学生尽早联系 Jenkins 社区并开始探索项目。所有的项目在对应的页面上都有聊天室与邮件列表。 我们也会为学生组织工作日的会议,在这些会议上你可以见到管理员和导师,并向他们提问。 另外,加入我们的Gitter 频道和邮件列表,以便收到项目中即将到来的事情。 +3月25日开放申请,但你现在就可以准备了!利用这段申请前的时间来讨论并改进你的项目提议。 我们也建议你着手熟悉 Jenkins 并开始探索你的提议的领域。项目的想法包括快速开始的指导,以及有助于初期研究时对新手友好的问题。 如果没有看到任何感兴趣的,你可以提出你自己的项目想法或者 查看由其他参与 GSoC 的组织提出的想法。 +我想要成为一名导师。会不会太晚了? 不晚!我们正在寻找更多的项目想法,以及 Jenkins 的贡献者或用户中对 Jenkins 富有热情并想要指导学生的人。 无须底层经验,导师可以和学生一起研究项目并给出技术指导。 我们尤其对 Java 技术栈方向感兴趣,以及一些新的技术和领域(例如:Kubernetes, IoT, Python, Go 或者其他的)。 +你可以提议一个新项目或者加入已有的。查看博客寻找导师以及导师的信息中的细节。 如果你想要提议一个新项目,那么请在3月11日之前完成,以便学生有时间探索并准备他们的提议。 +今年,导师并不必须要有 Jenkins 开发上的很强的专业知识。目标是指导学生参与到 Jenkins 社区。 如果需要特殊的专业知识,GSoC 组织管理员会帮助寻找顾问。 + + + + \ No newline at end of file diff --git a/tags/events/page/1/index.html b/tags/events/page/1/index.html new file mode 100644 index 00000000..53246d2e --- /dev/null +++ b/tags/events/page/1/index.html @@ -0,0 +1 @@ +https://jenkins-zh.github.io/tags/events/ \ No newline at end of file diff --git a/tags/gsoc/index.html b/tags/gsoc/index.html new file mode 100644 index 00000000..c902b771 --- /dev/null +++ b/tags/gsoc/index.html @@ -0,0 +1,300 @@ + + + + + + + + + + + + Gsoc | Jenkins 中文社区 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ + +
+ + + + +
+ +
+ + +
+ +
+ + +

+ Jenkins 已经被 Google Summer Of Code 2019 接受! +

+ + + + +
+
+ + + +
+
+ + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + diff --git a/tags/gsoc/index.xml b/tags/gsoc/index.xml new file mode 100644 index 00000000..8fe2c124 --- /dev/null +++ b/tags/gsoc/index.xml @@ -0,0 +1,32 @@ + + + + Gsoc on Jenkins 中文社区 + https://jenkins-zh.github.io/tags/gsoc/ + Recent content in Gsoc on Jenkins 中文社区 + Hugo -- gohugo.io + zh-CN + + + + + + Jenkins 已经被 Google Summer Of Code 2019 接受! + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + 作为 Jenkins GSoC 管理员团队的代表,我很高兴地宣布 Jenkins 在2019年的 Google Summer of Code上 已经被接受。 今年,我们邀请了学生和导师加入 Jenkins 社区,并一起努力增强 Jenkins 生态圈。 +这里提供一些数字,这是有史以来最大的一次 GSoC,今年共有206个组织参与。并且,希望对 Jenkins 而言也是最大的一年。 我们有25个项目想法,而且有超过30个准导师(不断增多!)。 这已经超过了2016年以及2018年的总和。 有很多的插件,特别兴趣小组以及子项目已经加入了今年的 GSoC.而且,我们已经收到了十几个学生的消息以及第一次贡献,耶! +下一步? GSoC 已经正式启动,请期待更多的学生在我们的Gitter 频道和邮件列表中联系项目。 在特别兴趣小组和子项目频道中已经有了很多沟通。 我们会努力帮助学生找到他们感兴趣的项目,在这个领域探索,并帮助他们在4月9日的截止日前准备好他们的项目提议。 然后,我们将会继续这个申请,选择项目并分配导师团队。 +所有关于 Jenkins GSoC 的信息都可以在子项目页面上找到。 +我是一个学生。如何申请? 在/projects/gsoc/students[学生的信息]页面中有完整的申请指导。 +我们鼓励感兴趣的学生尽早联系 Jenkins 社区并开始探索项目。所有的项目在对应的页面上都有聊天室与邮件列表。 我们也会为学生组织工作日的会议,在这些会议上你可以见到管理员和导师,并向他们提问。 另外,加入我们的Gitter 频道和邮件列表,以便收到项目中即将到来的事情。 +3月25日开放申请,但你现在就可以准备了!利用这段申请前的时间来讨论并改进你的项目提议。 我们也建议你着手熟悉 Jenkins 并开始探索你的提议的领域。项目的想法包括快速开始的指导,以及有助于初期研究时对新手友好的问题。 如果没有看到任何感兴趣的,你可以提出你自己的项目想法或者 查看由其他参与 GSoC 的组织提出的想法。 +我想要成为一名导师。会不会太晚了? 不晚!我们正在寻找更多的项目想法,以及 Jenkins 的贡献者或用户中对 Jenkins 富有热情并想要指导学生的人。 无须底层经验,导师可以和学生一起研究项目并给出技术指导。 我们尤其对 Java 技术栈方向感兴趣,以及一些新的技术和领域(例如:Kubernetes, IoT, Python, Go 或者其他的)。 +你可以提议一个新项目或者加入已有的。查看博客寻找导师以及导师的信息中的细节。 如果你想要提议一个新项目,那么请在3月11日之前完成,以便学生有时间探索并准备他们的提议。 +今年,导师并不必须要有 Jenkins 开发上的很强的专业知识。目标是指导学生参与到 Jenkins 社区。 如果需要特殊的专业知识,GSoC 组织管理员会帮助寻找顾问。 + + + + \ No newline at end of file diff --git a/tags/gsoc/page/1/index.html b/tags/gsoc/page/1/index.html new file mode 100644 index 00000000..1de0baec --- /dev/null +++ b/tags/gsoc/page/1/index.html @@ -0,0 +1 @@ +https://jenkins-zh.github.io/tags/gsoc/ \ No newline at end of file diff --git a/tags/gsoc2019/index.html b/tags/gsoc2019/index.html new file mode 100644 index 00000000..e8999ad2 --- /dev/null +++ b/tags/gsoc2019/index.html @@ -0,0 +1,300 @@ + + + + + + + + + + + + Gsoc2019 | Jenkins 中文社区 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ + +
+ + + + +
+ +
+ + +
+ +
+ + +

+ Jenkins 已经被 Google Summer Of Code 2019 接受! +

+ + + + +
+
+ + + +
+
+ + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + diff --git a/tags/gsoc2019/index.xml b/tags/gsoc2019/index.xml new file mode 100644 index 00000000..b1d3db83 --- /dev/null +++ b/tags/gsoc2019/index.xml @@ -0,0 +1,32 @@ + + + + Gsoc2019 on Jenkins 中文社区 + https://jenkins-zh.github.io/tags/gsoc2019/ + Recent content in Gsoc2019 on Jenkins 中文社区 + Hugo -- gohugo.io + zh-CN + + + + + + Jenkins 已经被 Google Summer Of Code 2019 接受! + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + 作为 Jenkins GSoC 管理员团队的代表,我很高兴地宣布 Jenkins 在2019年的 Google Summer of Code上 已经被接受。 今年,我们邀请了学生和导师加入 Jenkins 社区,并一起努力增强 Jenkins 生态圈。 +这里提供一些数字,这是有史以来最大的一次 GSoC,今年共有206个组织参与。并且,希望对 Jenkins 而言也是最大的一年。 我们有25个项目想法,而且有超过30个准导师(不断增多!)。 这已经超过了2016年以及2018年的总和。 有很多的插件,特别兴趣小组以及子项目已经加入了今年的 GSoC.而且,我们已经收到了十几个学生的消息以及第一次贡献,耶! +下一步? GSoC 已经正式启动,请期待更多的学生在我们的Gitter 频道和邮件列表中联系项目。 在特别兴趣小组和子项目频道中已经有了很多沟通。 我们会努力帮助学生找到他们感兴趣的项目,在这个领域探索,并帮助他们在4月9日的截止日前准备好他们的项目提议。 然后,我们将会继续这个申请,选择项目并分配导师团队。 +所有关于 Jenkins GSoC 的信息都可以在子项目页面上找到。 +我是一个学生。如何申请? 在/projects/gsoc/students[学生的信息]页面中有完整的申请指导。 +我们鼓励感兴趣的学生尽早联系 Jenkins 社区并开始探索项目。所有的项目在对应的页面上都有聊天室与邮件列表。 我们也会为学生组织工作日的会议,在这些会议上你可以见到管理员和导师,并向他们提问。 另外,加入我们的Gitter 频道和邮件列表,以便收到项目中即将到来的事情。 +3月25日开放申请,但你现在就可以准备了!利用这段申请前的时间来讨论并改进你的项目提议。 我们也建议你着手熟悉 Jenkins 并开始探索你的提议的领域。项目的想法包括快速开始的指导,以及有助于初期研究时对新手友好的问题。 如果没有看到任何感兴趣的,你可以提出你自己的项目想法或者 查看由其他参与 GSoC 的组织提出的想法。 +我想要成为一名导师。会不会太晚了? 不晚!我们正在寻找更多的项目想法,以及 Jenkins 的贡献者或用户中对 Jenkins 富有热情并想要指导学生的人。 无须底层经验,导师可以和学生一起研究项目并给出技术指导。 我们尤其对 Java 技术栈方向感兴趣,以及一些新的技术和领域(例如:Kubernetes, IoT, Python, Go 或者其他的)。 +你可以提议一个新项目或者加入已有的。查看博客寻找导师以及导师的信息中的细节。 如果你想要提议一个新项目,那么请在3月11日之前完成,以便学生有时间探索并准备他们的提议。 +今年,导师并不必须要有 Jenkins 开发上的很强的专业知识。目标是指导学生参与到 Jenkins 社区。 如果需要特殊的专业知识,GSoC 组织管理员会帮助寻找顾问。 + + + + \ No newline at end of file diff --git a/tags/gsoc2019/page/1/index.html b/tags/gsoc2019/page/1/index.html new file mode 100644 index 00000000..3221eb54 --- /dev/null +++ b/tags/gsoc2019/page/1/index.html @@ -0,0 +1 @@ +https://jenkins-zh.github.io/tags/gsoc2019/ \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index d674b2d1..056d4a38 100644 --- a/tags/index.html +++ b/tags/index.html @@ -32,7 +32,7 @@ - + @@ -154,6 +154,38 @@
+ + + + + + + + + + + + + + + + + +

diff --git a/tags/index.xml b/tags/index.xml index 293eedae..025b1d18 100644 --- a/tags/index.xml +++ b/tags/index.xml @@ -6,11 +6,29 @@ Recent content in Tags on Jenkins 中文社区 Hugo -- gohugo.io zh-CN - Wed, 20 Feb 2019 00:00:00 +0000 + Wed, 13 Mar 2019 00:00:00 +0000 + + Cdf + https://jenkins-zh.github.io/tags/cdf/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/tags/cdf/ + + + + + Cicd + https://jenkins-zh.github.io/tags/cicd/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/tags/cicd/ + + + Cloud Native https://jenkins-zh.github.io/tags/cloud-native/ @@ -74,6 +92,15 @@ + + Events + https://jenkins-zh.github.io/tags/events/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/tags/events/ + + + Evergreen https://jenkins-zh.github.io/tags/evergreen/ @@ -83,6 +110,24 @@ + + Gsoc + https://jenkins-zh.github.io/tags/gsoc/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/tags/gsoc/ + + + + + Gsoc2019 + https://jenkins-zh.github.io/tags/gsoc2019/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/tags/gsoc2019/ + + + Installers https://jenkins-zh.github.io/tags/installers/ @@ -146,6 +191,15 @@ + + Opensource + https://jenkins-zh.github.io/tags/opensource/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/tags/opensource/ + + + Outreachy https://jenkins-zh.github.io/tags/outreachy/ diff --git a/tags/jenkins/index.html b/tags/jenkins/index.html index ece0ef95..f5c96a8b 100644 --- a/tags/jenkins/index.html +++ b/tags/jenkins/index.html @@ -158,6 +158,8 @@ + +
diff --git a/tags/jenkins/index.xml b/tags/jenkins/index.xml index 8456ac7b..e382c785 100644 --- a/tags/jenkins/index.xml +++ b/tags/jenkins/index.xml @@ -24,6 +24,18 @@ Electron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台 完整代码 pipeline { // 我们决定每一个阶段指定 agent,所以, // 流水线的 agent 设置为 none,这样不会占用 agent agent none // 指定整条流水线的环境变量 environment { APP_VERSION = &quot;&quot; APP_NAME = &quot;electron-webpack-quick-start&quot; } stages { stage(&quot;生成版本号&quot;){ agent {label &quot;linux&quot; } steps{ script{ APP_VERSION = generateVersion(&quot;1.0.0&quot;) echo &quot;version is ${APP_VERSION}&quot; }} } stage('并行构建') { // 快速失败,只要其中一个平台构建失败, // 整次构建算失败 failFast true // parallel 闭包内的阶段将并行执行 parallel { stage('Windows平台下构建') { agent {label &quot;windows &amp;&amp; nodejs&quot; } steps { echo &quot;${APP_VERSION}&quot; } } stage('Linux平台下构建') { agent {label &quot;linux &amp;&amp; nodejs&quot; } // 不同平台可能存在不同的环境变量 // environment 支持阶段级的环境变量 environment{ SUFFIX = &quot;tar. + + 为 Continuous Delivery Foundation 的成立感到兴奋 + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + 大概十一年前,我就开始为现在被称为 Jenkins 的项目做贡献,自己当时其实也并不知道在做什么。但是接下来发生的事情令人感觉难以置信,数以百计的贡献者加入,成千上万的新用户开始使用 Jenkins,每天都会运行数以百万条的流水线。这样的增长是充满挑战性的,用户的增长意味着问题的增长,问题的增长就意味着需要新的解决方式。 在大约两年半之前,我在2017年的 Jenkins World Contributor Summit 大会上面对一大群 Jenkins 的贡献者们,为我的所谓的 &lsquo;Jenkins软件基金会&rsquo; 做了宣传,那就是,不要羞于从 Python 社区汲取思想,在我的朋友 Chris Aniszczyk 和 Linux 基金会的帮助下,这个基金会变成了一个更加全面的 *持续交付基金会*(CDF),我的同事 Tracy Miranda 一直在领导这项工作,帮助推动 CDF 的成立。 +Kohsuke 为 jenkinsci-dev@ mailing list 撰写了一篇很好的概述文章,其中列举了如果 Jenkins 项目一旦建立后就应该加入 Continuous Delivery Foundation 的原因。如果你对 Jenkins 项目感兴趣,但是还没有阅读过这边文章的话,那我认为你应该花些时间来阅读 Kohsuke 的这份邮件。但是在 这篇文章 中,我 想分享我愿意帮助建立持续交付基金会(CDF)的原因。 +持续交付(CD)已经成为我职业生涯中不可或缺的一部分,甚至在 Jez Humble 将此概念清晰地表述之前,我就开始学习 CD 并且对它一直充满热情。我认为它对软件的开发实践至关重要,当有人说他们没有练习使用 CI 或 CD 时,我感觉这就像回到了原始社会。想象一下,如果有人说 &ldquo;呃,我们在这里有一个采用 Source Control 的项目,但领导们觉得这个东西不太靠谱&rdquo;,我想你肯定会惊掉下巴。&rdquo;在这个时代竟然还有开发团队都不使用源代码管理?&rdquo;。总体来说,我认为CD已经是现代软件开发的基础了。 +持续交付也 不是 说只依赖于 Jenkins 这样的单一工具,它也是依赖于其他的用于协同工作的许多工具。虽然我可能觉得 Jenkins 是所有工具中占最中心位置的工具,但也不是说 Jenkins 是这些工具中唯一优秀的一款工具。但是不幸的是,像 Jenkins 这样的许多开源社区往往对他们的世界有着一定的狭隘观点。他们只专注于他们的事情,虽然这是有道理的,但这及可能导致错失交叉合作产生新价值的机会。 + + MPL - 模块化的流水线库 https://jenkins-zh.github.io/wechat/articles/2019-01-08-mpl-modular-pipeline-library/ diff --git a/tags/opensource/index.html b/tags/opensource/index.html new file mode 100644 index 00000000..5b1b6edf --- /dev/null +++ b/tags/opensource/index.html @@ -0,0 +1,276 @@ + + + + + + + + + + + + Opensource | Jenkins 中文社区 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ + +
+ + + + +
+ +
+ + + +
+
+ + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + diff --git a/tags/opensource/index.xml b/tags/opensource/index.xml new file mode 100644 index 00000000..d29c0277 --- /dev/null +++ b/tags/opensource/index.xml @@ -0,0 +1,27 @@ + + + + Opensource on Jenkins 中文社区 + https://jenkins-zh.github.io/tags/opensource/ + Recent content in Opensource on Jenkins 中文社区 + Hugo -- gohugo.io + zh-CN + Wed, 13 Mar 2019 00:00:00 +0000 + + + + + + 为 Continuous Delivery Foundation 的成立感到兴奋 + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + 大概十一年前,我就开始为现在被称为 Jenkins 的项目做贡献,自己当时其实也并不知道在做什么。但是接下来发生的事情令人感觉难以置信,数以百计的贡献者加入,成千上万的新用户开始使用 Jenkins,每天都会运行数以百万条的流水线。这样的增长是充满挑战性的,用户的增长意味着问题的增长,问题的增长就意味着需要新的解决方式。 在大约两年半之前,我在2017年的 Jenkins World Contributor Summit 大会上面对一大群 Jenkins 的贡献者们,为我的所谓的 &lsquo;Jenkins软件基金会&rsquo; 做了宣传,那就是,不要羞于从 Python 社区汲取思想,在我的朋友 Chris Aniszczyk 和 Linux 基金会的帮助下,这个基金会变成了一个更加全面的 *持续交付基金会*(CDF),我的同事 Tracy Miranda 一直在领导这项工作,帮助推动 CDF 的成立。 +Kohsuke 为 jenkinsci-dev@ mailing list 撰写了一篇很好的概述文章,其中列举了如果 Jenkins 项目一旦建立后就应该加入 Continuous Delivery Foundation 的原因。如果你对 Jenkins 项目感兴趣,但是还没有阅读过这边文章的话,那我认为你应该花些时间来阅读 Kohsuke 的这份邮件。但是在 这篇文章 中,我 想分享我愿意帮助建立持续交付基金会(CDF)的原因。 +持续交付(CD)已经成为我职业生涯中不可或缺的一部分,甚至在 Jez Humble 将此概念清晰地表述之前,我就开始学习 CD 并且对它一直充满热情。我认为它对软件的开发实践至关重要,当有人说他们没有练习使用 CI 或 CD 时,我感觉这就像回到了原始社会。想象一下,如果有人说 &ldquo;呃,我们在这里有一个采用 Source Control 的项目,但领导们觉得这个东西不太靠谱&rdquo;,我想你肯定会惊掉下巴。&rdquo;在这个时代竟然还有开发团队都不使用源代码管理?&rdquo;。总体来说,我认为CD已经是现代软件开发的基础了。 +持续交付也 不是 说只依赖于 Jenkins 这样的单一工具,它也是依赖于其他的用于协同工作的许多工具。虽然我可能觉得 Jenkins 是所有工具中占最中心位置的工具,但也不是说 Jenkins 是这些工具中唯一优秀的一款工具。但是不幸的是,像 Jenkins 这样的许多开源社区往往对他们的世界有着一定的狭隘观点。他们只专注于他们的事情,虽然这是有道理的,但这及可能导致错失交叉合作产生新价值的机会。 + + + + \ No newline at end of file diff --git a/tags/opensource/page/1/index.html b/tags/opensource/page/1/index.html new file mode 100644 index 00000000..f30e8308 --- /dev/null +++ b/tags/opensource/page/1/index.html @@ -0,0 +1 @@ +https://jenkins-zh.github.io/tags/opensource/ \ No newline at end of file diff --git a/wechat/articles/2018-11-14-first-voice/index.html b/wechat/articles/2018-11-14-first-voice/index.html index 569acaa7..5849ac0f 100644 --- a/wechat/articles/2018-11-14-first-voice/index.html +++ b/wechat/articles/2018-11-14-first-voice/index.html @@ -182,7 +182,7 @@ - + diff --git a/wechat/articles/2019-01-08-mpl-modular-pipeline-library/index.html b/wechat/articles/2019-01-08-mpl-modular-pipeline-library/index.html index 34c6ab6d..d64978e5 100644 --- a/wechat/articles/2019-01-08-mpl-modular-pipeline-library/index.html +++ b/wechat/articles/2019-01-08-mpl-modular-pipeline-library/index.html @@ -186,7 +186,7 @@ - + @@ -530,6 +530,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link +
  • + + 为 Continuous Delivery Foundation 的成立感到兴奋 + +
  • + + + + diff --git a/wechat/articles/2019-01-16-webhook-firewalls/index.html b/wechat/articles/2019-01-16-webhook-firewalls/index.html index 84a49aa8..96a270c8 100644 --- a/wechat/articles/2019-01-16-webhook-firewalls/index.html +++ b/wechat/articles/2019-01-16-webhook-firewalls/index.html @@ -430,6 +430,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link +
  • + + 为 Continuous Delivery Foundation 的成立感到兴奋 + +
  • + + + +
  • MPL - 模块化的流水线库 diff --git a/wechat/articles/2019-01-30-k8s-jenkins-secet-agent/index.html b/wechat/articles/2019-01-30-k8s-jenkins-secet-agent/index.html index 510f7d25..5f233c28 100644 --- a/wechat/articles/2019-01-30-k8s-jenkins-secet-agent/index.html +++ b/wechat/articles/2019-01-30-k8s-jenkins-secet-agent/index.html @@ -213,7 +213,7 @@ - + diff --git a/wechat/articles/2019-02-13-outreachy-audit-log-plugin/index.html b/wechat/articles/2019-02-13-outreachy-audit-log-plugin/index.html index 2a41a054..7d9eaf03 100644 --- a/wechat/articles/2019-02-13-outreachy-audit-log-plugin/index.html +++ b/wechat/articles/2019-02-13-outreachy-audit-log-plugin/index.html @@ -343,6 +343,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link +
  • + + Jenkins 已经被 Google Summer Of Code 2019 接受! + +
  • + + + +
  • 回顾 2018: 革新的一年 diff --git a/wechat/articles/2019-02-27-jenkins-script-console-in-practice/index.html b/wechat/articles/2019-02-27-jenkins-script-console-in-practice/index.html index d918706b..a5fb5854 100644 --- a/wechat/articles/2019-02-27-jenkins-script-console-in-practice/index.html +++ b/wechat/articles/2019-02-27-jenkins-script-console-in-practice/index.html @@ -373,6 +373,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
  • +
  • + + 为 Continuous Delivery Foundation 的成立感到兴奋 + +
  • + + + +
  • MPL - 模块化的流水线库 diff --git a/wechat/articles/2019-03-13-electron-pipeline-demo/index.html b/wechat/articles/2019-03-13-electron-pipeline-demo/index.html index c6fb4103..170bd701 100644 --- a/wechat/articles/2019-03-13-electron-pipeline-demo/index.html +++ b/wechat/articles/2019-03-13-electron-pipeline-demo/index.html @@ -186,7 +186,7 @@ - + @@ -437,6 +437,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
  • +
  • + + 为 Continuous Delivery Foundation 的成立感到兴奋 + +
  • + + + +
  • MPL - 模块化的流水线库 diff --git a/wechat/articles/2019-03-13-gsoc2019-announcement/index.html b/wechat/articles/2019-03-13-gsoc2019-announcement/index.html new file mode 100644 index 00000000..39d4d370 --- /dev/null +++ b/wechat/articles/2019-03-13-gsoc2019-announcement/index.html @@ -0,0 +1,498 @@ + + + + + + + + + + + + Jenkins 已经被 Google Summer Of Code 2019 接受! | Jenkins 中文社区 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    + + +
    + + + + + + + + + +
    + + + + +
    +
    + +
    +
    +
    + + + + “Jenkins 已经被 Google Summer Of Code 2019 接受!” + was last updated: January 1, 0001 +
    + + 改善此页 + + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + diff --git a/wechat/articles/2019-03-13-ready-for-cdf/index.html b/wechat/articles/2019-03-13-ready-for-cdf/index.html new file mode 100644 index 00000000..dd52ea4e --- /dev/null +++ b/wechat/articles/2019-03-13-ready-for-cdf/index.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + 为 Continuous Delivery Foundation 的成立感到兴奋 | Jenkins 中文社区 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    + + +
    + + + + + + + + + +
    + + + + +
    +
    + +
    +
    +
    + + + + “为 Continuous Delivery Foundation 的成立感到兴奋” + was last updated: March 13, 2019 +
    + + 改善此页 + + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + diff --git a/wechat/images/gsoc/jenkins-gsoc-logo_small.png b/wechat/images/gsoc/jenkins-gsoc-logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2afe2a0b5d51920ce17563d1f8209a1834ecbd GIT binary patch literal 50095 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

    1OV(o;s!`sy`Dj=%Z>X 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

    Na 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 literal 0 HcmV?d00001 diff --git a/wechat/index.html b/wechat/index.html index 00337ea6..3e0c317a 100644 --- a/wechat/index.html +++ b/wechat/index.html @@ -158,6 +158,8 @@ + +

    @@ -373,33 +375,6 @@ - -
    - -
    - - -

    - Jenkins Configuration-as-Code: 看,我都不用手动配置 -

    - - - - -
    -
    - - -
    diff --git a/wechat/index.xml b/wechat/index.xml index 523207a5..96466e2b 100644 --- a/wechat/index.xml +++ b/wechat/index.xml @@ -24,6 +24,18 @@ Electron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台 完整代码 pipeline { // 我们决定每一个阶段指定 agent,所以, // 流水线的 agent 设置为 none,这样不会占用 agent agent none // 指定整条流水线的环境变量 environment { APP_VERSION = &quot;&quot; APP_NAME = &quot;electron-webpack-quick-start&quot; } stages { stage(&quot;生成版本号&quot;){ agent {label &quot;linux&quot; } steps{ script{ APP_VERSION = generateVersion(&quot;1.0.0&quot;) echo &quot;version is ${APP_VERSION}&quot; }} } stage('并行构建') { // 快速失败,只要其中一个平台构建失败, // 整次构建算失败 failFast true // parallel 闭包内的阶段将并行执行 parallel { stage('Windows平台下构建') { agent {label &quot;windows &amp;&amp; nodejs&quot; } steps { echo &quot;${APP_VERSION}&quot; } } stage('Linux平台下构建') { agent {label &quot;linux &amp;&amp; nodejs&quot; } // 不同平台可能存在不同的环境变量 // environment 支持阶段级的环境变量 environment{ SUFFIX = &quot;tar. + + 为 Continuous Delivery Foundation 的成立感到兴奋 + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + Wed, 13 Mar 2019 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-ready-for-cdf/ + 大概十一年前,我就开始为现在被称为 Jenkins 的项目做贡献,自己当时其实也并不知道在做什么。但是接下来发生的事情令人感觉难以置信,数以百计的贡献者加入,成千上万的新用户开始使用 Jenkins,每天都会运行数以百万条的流水线。这样的增长是充满挑战性的,用户的增长意味着问题的增长,问题的增长就意味着需要新的解决方式。 在大约两年半之前,我在2017年的 Jenkins World Contributor Summit 大会上面对一大群 Jenkins 的贡献者们,为我的所谓的 &lsquo;Jenkins软件基金会&rsquo; 做了宣传,那就是,不要羞于从 Python 社区汲取思想,在我的朋友 Chris Aniszczyk 和 Linux 基金会的帮助下,这个基金会变成了一个更加全面的 *持续交付基金会*(CDF),我的同事 Tracy Miranda 一直在领导这项工作,帮助推动 CDF 的成立。 +Kohsuke 为 jenkinsci-dev@ mailing list 撰写了一篇很好的概述文章,其中列举了如果 Jenkins 项目一旦建立后就应该加入 Continuous Delivery Foundation 的原因。如果你对 Jenkins 项目感兴趣,但是还没有阅读过这边文章的话,那我认为你应该花些时间来阅读 Kohsuke 的这份邮件。但是在 这篇文章 中,我 想分享我愿意帮助建立持续交付基金会(CDF)的原因。 +持续交付(CD)已经成为我职业生涯中不可或缺的一部分,甚至在 Jez Humble 将此概念清晰地表述之前,我就开始学习 CD 并且对它一直充满热情。我认为它对软件的开发实践至关重要,当有人说他们没有练习使用 CI 或 CD 时,我感觉这就像回到了原始社会。想象一下,如果有人说 &ldquo;呃,我们在这里有一个采用 Source Control 的项目,但领导们觉得这个东西不太靠谱&rdquo;,我想你肯定会惊掉下巴。&rdquo;在这个时代竟然还有开发团队都不使用源代码管理?&rdquo;。总体来说,我认为CD已经是现代软件开发的基础了。 +持续交付也 不是 说只依赖于 Jenkins 这样的单一工具,它也是依赖于其他的用于协同工作的许多工具。虽然我可能觉得 Jenkins 是所有工具中占最中心位置的工具,但也不是说 Jenkins 是这些工具中唯一优秀的一款工具。但是不幸的是,像 Jenkins 这样的许多开源社区往往对他们的世界有着一定的狭隘观点。他们只专注于他们的事情,虽然这是有道理的,但这及可能导致错失交叉合作产生新价值的机会。 + + MPL - 模块化的流水线库 https://jenkins-zh.github.io/wechat/articles/2019-01-08-mpl-modular-pipeline-library/ @@ -172,6 +184,24 @@ JCasC 能为 Jenkins 管理员做些什么? JCasC 允许我们在启动时或 所有的构建都在 master 节点上跑,在这个节点上运行所有的组件. (我给这个阶段起了个可爱的名字, Hello Jenkins) 创建一个 Jenkins EC2 代理,并且在这个代理上运行所有的构建,怎么说呢, 就是大而全,这个节点什么都能做。如果需要同时做多条任务,那就把这个大而全的节点克隆一份。 (这个阶段我起的名字是 Monster Agent.) 为每种服务创建不同的 Jenkins EC2 的节点 (这个阶段我起的名字叫做 Snowflake Agent.) 在容器中运行流水线的所有步骤。 打个比方,在 Jenkins 中使用 Docker Plugin 这个插件将代理挂载到容器中,或者使用 multi-stage Dockerfiles 把所有构建,测试打包的流程都封装起来。这两种方法都是很好的容器抽象化的开端,并且允许您轻松地将制品从一个容器复制到另一个容器。当然了,每一种方法都是需要访问 Docker engine 的。为了让我的 Jenkins 代理能够正常工作,现在我用以下几种方式来管理 docker host 在我的 Jenkins 主容器中运行一个Docker engine - Docker in Docker (DinD) 把主机上的 Docker socket 挂载到我的容器中来,让我的容器能够以 sidecar 的方式运行。 为 Jenkins 主服务器配置单个外部 EC2 Docker 主机,以用于在容器中启动构建 使用 EC2 插件和包含 Docker Engine 的 AMI 动态启动代理,然后运行多阶段 Dockerfile 中的所有步骤 以上这些阶段各有利弊,但都是为了让我们从管理 Jenkins 节点中解放出来。不过,最近我又进阶到了另外一个阶段:Jenkins on Kubernetes. + + Jenkins 已经被 Google Summer Of Code 2019 接受! + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://jenkins-zh.github.io/wechat/articles/2019-03-13-gsoc2019-announcement/ + 作为 Jenkins GSoC 管理员团队的代表,我很高兴地宣布 Jenkins 在2019年的 Google Summer of Code上 已经被接受。 今年,我们邀请了学生和导师加入 Jenkins 社区,并一起努力增强 Jenkins 生态圈。 +这里提供一些数字,这是有史以来最大的一次 GSoC,今年共有206个组织参与。并且,希望对 Jenkins 而言也是最大的一年。 我们有25个项目想法,而且有超过30个准导师(不断增多!)。 这已经超过了2016年以及2018年的总和。 有很多的插件,特别兴趣小组以及子项目已经加入了今年的 GSoC.而且,我们已经收到了十几个学生的消息以及第一次贡献,耶! +下一步? GSoC 已经正式启动,请期待更多的学生在我们的Gitter 频道和邮件列表中联系项目。 在特别兴趣小组和子项目频道中已经有了很多沟通。 我们会努力帮助学生找到他们感兴趣的项目,在这个领域探索,并帮助他们在4月9日的截止日前准备好他们的项目提议。 然后,我们将会继续这个申请,选择项目并分配导师团队。 +所有关于 Jenkins GSoC 的信息都可以在子项目页面上找到。 +我是一个学生。如何申请? 在/projects/gsoc/students[学生的信息]页面中有完整的申请指导。 +我们鼓励感兴趣的学生尽早联系 Jenkins 社区并开始探索项目。所有的项目在对应的页面上都有聊天室与邮件列表。 我们也会为学生组织工作日的会议,在这些会议上你可以见到管理员和导师,并向他们提问。 另外,加入我们的Gitter 频道和邮件列表,以便收到项目中即将到来的事情。 +3月25日开放申请,但你现在就可以准备了!利用这段申请前的时间来讨论并改进你的项目提议。 我们也建议你着手熟悉 Jenkins 并开始探索你的提议的领域。项目的想法包括快速开始的指导,以及有助于初期研究时对新手友好的问题。 如果没有看到任何感兴趣的,你可以提出你自己的项目想法或者 查看由其他参与 GSoC 的组织提出的想法。 +我想要成为一名导师。会不会太晚了? 不晚!我们正在寻找更多的项目想法,以及 Jenkins 的贡献者或用户中对 Jenkins 富有热情并想要指导学生的人。 无须底层经验,导师可以和学生一起研究项目并给出技术指导。 我们尤其对 Java 技术栈方向感兴趣,以及一些新的技术和领域(例如:Kubernetes, IoT, Python, Go 或者其他的)。 +你可以提议一个新项目或者加入已有的。查看博客寻找导师以及导师的信息中的细节。 如果你想要提议一个新项目,那么请在3月11日之前完成,以便学生有时间探索并准备他们的提议。 +今年,导师并不必须要有 Jenkins 开发上的很强的专业知识。目标是指导学生参与到 Jenkins 社区。 如果需要特殊的专业知识,GSoC 组织管理员会帮助寻找顾问。 + + Jenkins 微信订阅号 https://jenkins-zh.github.io/wechat/articles/2018-11-14-first-voice/ diff --git a/wechat/page/2/index.html b/wechat/page/2/index.html index 611c0cef..2664b9b4 100644 --- a/wechat/page/2/index.html +++ b/wechat/page/2/index.html @@ -161,15 +161,15 @@

    - Jenkins 中文语言包 + Jenkins Configuration-as-Code: 看,我都不用手动配置