每个jenkins管道都做同样的事情 - 至少在一个有多个项目的小团队中。
构建(来自相同的源代码库) - >运行测试 - >发布工件(到相同的工件仓库)
我们正在创建许多新项目,它们都具有非常相似的生命周期。是否有可能创建一个模板管道,我可以从中创建具体的pipleines并对作业进行必要的更改?
答案 0 :(得分:4)
我使用的一些方法对我和我的团队都有用。
第1部分)是确定哪些编排插件最适合jenkins。 适用于我的插件和方法是:
a)使用 http://ci.openstack.org/jenkins-job-builder/ 它使用更高级别的库抽象作业定义和流程。它允许您在YAML中定义相当简单的作业,它支持大多数常见用例(作业,模板,流程)。 然后,jenkins-jobs-builder python cli工具可以通过诸如ansible,puppet,chef之类的编排工具来使用这些yaml文件。 您可以使用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'
}
}
}]}
“
如果您从模板引擎(ERB,jinja2)构建这些工作流定义,并将它们与配置管理工具(同样是ansible,chef,puppet)集成。 进行影响一个或所有作业的小而大的更改变得容易得多。 例如,您可以模板化一些jenkins框将编译,发布和部署工件发布到开发环境中,而其他人则只需将工件部署到QA环境中。 这可以通过jinja2 / erb中的if / then语句和宏从同一个模板实现。
Ex(抽象):
if ($environment == dev=) then compile, publish, deploy($environment)
elif ($environment== qa) then deploy($environment)
part2)是为了确保所有作业和流的所有jenkins配置都保存在源代码管理中,并确保源代码管理中的作业定义更改将自动传播到jenkins服务器(再次) ansible,puppet,chef)。 甚至还有一个jenkins工作,监控自己的工作定义回购并自动更新
当你达到#1和#2时,你应该处于一个可以让你有信心让所有团队成员对他们的工作/项目进行更改的位置,为你提供谁改变了什么,何时改变的信息,并且能够当出现问题时,可以通过变更控制轻松回滚更改。
它几乎是让jenkins从一系列模板化的作业中部署代码,这些作业本身就是在代码中定义的。
答案 1 :(得分:0)
我们一直遵循的另一种方法是通过Ansible模板管理作业。我们在jenkins_job模块可用之前开始使用,并使用url模块与jenkins交谈,但整体方法将是相同的:
默认情况下使用通用定义,并且需要非常少的描述:
default_project:
jobs:
Build:
template: build.xml.j2
Release: ...
projects:
DefaultProject1:
properties:
repository: git://../..
CustomProject2:
properties:
a: b
c: d
jobs:
Custom-Build:
template: custom.j2