在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,我没有看到任何机制。
答案 0 :(得分:4)
如果我理解你的问题,在单个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}:
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环境。要解决此问题,请考虑四个不同的文件,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作业的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
为您的生产环境。
希望有所帮助。