Jenkins Job Builder:项目级别变量

时间:2016-05-25 21:45:15

标签: jenkins jenkins-job-builder

在JJB中,您可以像这样定义项目级变量:

- defaults:
    name: global
    git_url: "git@....."

- project
    name: some-test
    jobs:
      - test-{name}

- job-template
    name: test-{name}
    scm:
      - git:
          url: "{git_url}"
          branches:
            - master

我的问题是,我必须在默认级别对git_url的值进行硬编码,还是可以使用某种JJB机制将其加载到作业加载/执行中?

我问的原因是包含这些JJB作业的yaml脚本可用于定义TEST,QA和PROD。只需指向包含git_url值和任何其他全局变量值的属性文件即可。我看了一眼:http://docs.openstack.org/infra/jenkins-job-builder/definition.html?highlight=default#defaults,我没有看到任何机制。

1 个答案:

答案 0 :(得分:4)

如果我理解你的问题,在单个yaml文件的上下文中还有另外两种方法

方法1:在项目级别设置git_url

- project
    name: some-test
    git_url: "git@dogs.net:woof/bark.git"
    jobs:
      - test-{name}:

- job-template
    name: test-{name}
    scm:
      - git:
          url: "{git_url}"
          branches:
            - master

此处git_url在项目级别设置。此方法允许您为git_url定义具有不同值的第二个项目,即

- project
    name: some-other-test
    git_url: "git@cats.net:meow/meow.git"
    jobs:
      - test-{name}:

方法2:在作业模板实例级别设置git_url

- project
    name: some-test
    jobs:
      - test-{name}:
        git_url: "git@....."

- job-template
    name: test-{name}
    scm:
      - git:
          url: "{git_url}"
          branches:
            - master

此处git_url设置在指定它的作业模板的实际实例上。如果您的job-template名称中只有{name},那么您可以在项目级jobs列表中创建多个实例,即

- project
    name: some-test
    git_url: "git@....."
    jobs:
      - test-{name}-{type}:
        type: 'cat'
      - test-{name}-{type}:
        type: 'dog'

- job-template
    name: test-{name}-{type}
    display-name: 'Test for {type} projects'
    scm:
      - git:
          url: "{git_url}"
          branches:
            - master

关于TEST与QA与PROD的思考

您还提到过,您希望使用某种外部属性文件来区分TEST,QA和PROD环境。要解决此问题,请考虑四个不同的文件,project.yamldefaults/TEST.yamldefaults/QA.yamldefaults/PROD.yaml,其内容将在下面列举。

<强> project.yaml

- project
    name: some-test
    jobs:
      - test-{name}:

<强> defaults/TEST.yaml

- defaults:
    name: global
    git_url: "git@dogs.net:woof/test.git"

<强> defaults/QA.yaml

- defaults:
    name: global
    git_url: "git@dogs.net:woof/qa.git"

<强> defaults/PROD.yaml

- defaults:
    name: global
    git_url: "git@dogs.net:woof/prod.git"

好的所以这些都不是很好的例子,因为你可能不会为每个环境提供不同的git存储库,但我不想通过偏离你原来的例子太过复杂化。

使用JJB,您可以在命令行中指定多个YAML文件(我不想使示例或其说明复杂化,但您也可以指定充满JJB yaml的目录)。要区分Jenkins作业的TEST,QA和PROD部署,您可以执行以下操作:

jenkins-jobs project.yaml:defaults/TEST.yaml

适用于您的测试环境。

jenkins-jobs project.yaml:defaults/QA.yaml

为你的qa环境。

jenkins-jobs project.yaml:defaults/PROD.yaml

为您的生产环境。

希望有所帮助。