詹金斯的模板工作流程

时间:2014-09-24 04:20:06

标签: jenkins pipeline

每个jenkins管道都做同样的事情 - 至少在一个有多个项目的小团队中。

构建(来自相同的源代码库) - >运行测试 - >发布工件(到相同的工件仓库)

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

2 个答案:

答案 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交谈,但整体方法将是相同的:

  1. 为不同的工作创建的j2模板
  2. 循环遍历项目定义,并在jenkins中更新作业和视图
  3. 默认情况下使用通用定义,并且需要非常少的描述:

    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