我正在调查使用Jenkins Job-Builder(来自OpenStack)作为管理jenkins作业配置的方法.在这样做的过程中,我试图找出使用!include
自定义标记从外部文件中包含作业模板的正确(最佳?)方式.
在当前的用例中,我们基本上会有一个模板将被很多工作使用.由于这里超出范围的原因,每个作业都需要存在于自己的文件中.
到目前为止,我已经得到了这个工作:
作业template.yml
name: 'pre-build-{proj}-{repo}' project-type: freestyle ... etc ...
作业1.yml
- job-template: !include job-template.yml - project: name: job-1 proj: my-proj repo: my-repo jobs: - 'build-config-{proj}-{repo}'
这似乎是错误的,因为模板定义会在两个文件中分开,并且需要-job-template:
在每个作业文件中进行不必要的重复行.我希望以下工作:
作业template.yml
- job-template: name: 'pre-build-{proj}-{repo}' project-type: freestyle ... etc ...
作业1.yml
!include job-template.yml - project: name: job-1 proj: my-proj repo: my-repo jobs: - 'build-config-{proj}-{repo}'
不幸的是,后者导致行上的yaml解析错误- project:
:
yaml.scanner.ScannerError:"job-1.yml",第3行,第10列中不允许使用映射值
有没有办法将整个模板定义放入模板文件中?如果我们需要从多个文件中提取多个模板,这将变得特别烦人.
詹金斯的作业需要path
,其可以是一个目录牵着你的文件(参数job-template.yaml
,job-1.yaml
以及job-2.yaml
将它们组装为一个YAML文件,所以你不需要使用.!include
所以,你可以写:
作业template.yaml
- job-template: name: 'pre-build-{proj}-{repo}' builders: - shell: 'echo building {proj} for {repo}'
job1.yaml
- project: name: job-1 proj: my-proj repo: my-repo jobs: - 'pre-build-{proj}-{repo}'
job2.yaml
- project: name: job-2 proj: my-other-proj repo: my-other-repo jobs: - 'pre-build-{proj}-{repo}'
这将使用以下shell命令生成两个作业:
前集结我 - 其他 - PROJ-MY-其他回购:
<command>echo building my-other-proj for my-other-repo</command>
前集结我-PROJ-我的回购:
<command>echo building my-proj for my-repo</command>
假设文件在目录中,config/
您可以使用以下命令生成它们:
jenkins-jobs test config/ -o /tmp/myjobs
或者使用name
参数来过滤将要实现的作业:
jenkins-jobs test config/ -o /tmp/myjobs '*my-proj*'
# Creates pre-build-my-proj-my-repo
# Skips pre-build-my-other-proj-my-other-repo