【问题标题】:Jenkins Job Builder: Project Level VariablesJenkins Job Builder:项目级变量
【发布时间】:2016-05-25 21:45:15
【问题描述】:

在 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 并没有看到任何机制。

【问题讨论】:

    标签: jenkins jenkins-job-builder


    【解决方案1】:

    如果我正确理解您的问题,在单个 yaml 文件的上下文中还有其他两种方法

    方法一:在项目级别设置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
    

    适合您的产品环境。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多