Jenkins Job Builder:项目级变量
Jenkins Job Builder: Project Level Variables
在 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 机制将其引入作业 load/execution?
我问的原因是包含这些JJB作业的yaml脚本可以用来定义TEST、QA和PROD。最好只指向一个包含 git_url 值和任何其他全局变量值的属性文件。我看了一下:http://docs.openstack.org/infra/jenkins-job-builder/definition.html?highlight=default#defaults 没有看到任何机制。
如果我对你的问题的理解正确,在单个 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.yaml
、defaults/TEST.yaml
、defaults/QA.yaml
、defaults/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 作业的测试、质量保证和生产部署,您可以执行以下操作:
jenkins-jobs project.yaml:defaults/TEST.yaml
对于您的测试环境。
jenkins-jobs project.yaml:defaults/QA.yaml
对于您的质量检查环境。
jenkins-jobs project.yaml:defaults/PROD.yaml
对于您的生产环境。
希望对您有所帮助。
在 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 机制将其引入作业 load/execution?
我问的原因是包含这些JJB作业的yaml脚本可以用来定义TEST、QA和PROD。最好只指向一个包含 git_url 值和任何其他全局变量值的属性文件。我看了一下:http://docs.openstack.org/infra/jenkins-job-builder/definition.html?highlight=default#defaults 没有看到任何机制。
如果我对你的问题的理解正确,在单个 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.yaml
、defaults/TEST.yaml
、defaults/QA.yaml
、defaults/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 作业的测试、质量保证和生产部署,您可以执行以下操作:
jenkins-jobs project.yaml:defaults/TEST.yaml
对于您的测试环境。
jenkins-jobs project.yaml:defaults/QA.yaml
对于您的质量检查环境。
jenkins-jobs project.yaml:defaults/PROD.yaml
对于您的生产环境。
希望对您有所帮助。