Jenkins 中的模板工作流

pg1*_*g17 4 pipeline jenkins

每个 jenkins 管道都做几乎相同的事情——至少在一个拥有多个项目的小团队中。

构建(从同一个源代码仓库)--> 运行测试 --> 发布工件(到同一个工件仓库)

我们正在创建许多新项目,它们都有非常相似的生命周期。是否可以创建一个模板管道,我可以从中创建具体的管道并对作业进行必要的更改?

azu*_*zul 5

我使用的几种方法对我和我的团队都很有效。

第 1 部分)是在 jenkins 中确定哪些编排插件最适合您。对我来说效果很好的插件和方法是:

a) 使用http://ci.openstack.org/jenkins-job-builder/ 它使用更高级别的库抽象作业定义和流程。它允许您在 YAML 中定义作业,这相当简单,并且支持大多数常见用例(作业、模板、流程)。然后这些 yaml 文件可以被 jenkins-jobs-builder python cli 工具通过 ansible、puppet、chef 等编排工具使用。您可以使用 YAML 锚点来替换多个作业共有的块,或者从模板引擎 (erb,jinja2) 中对它们进行模板化

b) 使用工作流插件,https://github.com/jenkinsci/workflow-plugin 工作流插件允许您在 groovy 中拥有单个工作流,而不是一组链接在一起的作业。

“例如,要并行检查和构建多个存储库,每个存储库都在自己的从属设备上:

parallel repos.collectEntries {repo -> [/* thread label */repo, {
    node {
        dir('sources') { // switch to subdir
            git url: "https://github.com/user/${repo}"
            sh 'make all -Dtarget=../build'
        }
    }
}]}
Run Code Online (Sandbox Code Playgroud)

如果您从模板引擎(ERB、jinja2)构建这些工作流定义,并将它们与配置管理工具(再次 ansible、chef、puppet)集成。进行影响一项或所有工作的小而大的更改变得容易得多。例如,您可以模板化一些 jenkins box 编译、发布工件并将其部署到开发环境中,而另一些则简单地将工件部署到 QA 环境中。这都可以从同一个模板中实现,使用 jinja2/erb 中的 if/then 语句和宏。

Ex(抽象):

if ($environment == dev=) then compile, publish, deploy($environment)
elif ($environment== qa) then deploy($environment)
Run Code Online (Sandbox Code Playgroud)

第 2 部分)是确保所有作业和流的所有 jenkins 配置都保留在源代码管理中,并确保源代码管理中作业定义的更改将自动传播到 jenkins 服务器(再次 ansible,puppet ,厨师)。或者甚至有一个 jenkins 工作来监控自己的工作定义仓库并自动更新自己

当您实现 #1 和 #2 时,您应该处于一个可以自信地允许所有团队成员更改他们的工作/项目的位置,为您提供有关谁更改了什么以及何时更改的信息,并能够回滚更改出现问题时很容易从变更控制中删除。

它几乎是关于让 jenkins 从一系列本身在代码中定义的模板化作业中部署代码。