【问题标题】:Jenkins Job-Builder: How to correctly include job-templates from external file?Jenkins Job-Builder:如何正确包含来自外部文件的作业模板?
【发布时间】:2014-11-27 03:00:29
【问题描述】:

我正在调查使用Jenkins Job-Builder(来自 OpenStack)作为我们管理 jenkins 作业配置的方法。在这样做时,我试图找出正确的(最好的?)方法来使用 !include 自定义标签从外部文件中包含作业模板。

在当前用例中,我们基本上将有一个模板供大量工作使用。由于超出此处范围的原因,每个作业都需要存在于自己的文件中。

到目前为止,我已经完成了这项工作:

job-template.yml

name: 'pre-build-{proj}-{repo}'
project-type: freestyle
... etc ...

job-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: 行。我想让以下工作改为:

job-template.yml

- job-template:
    name: 'pre-build-{proj}-{repo}'
    project-type: freestyle
    ... etc ...

job-1.yml

!include job-template.yml

- project: 
    name: job-1
    proj: my-proj
    repo: my-repo
    jobs:
      - 'build-config-{proj}-{repo}'

不幸的是,后者导致- project: 行出现 yaml 解析错误:

yaml.scanner.ScannerError:此处不允许映射值 在“job-1.yml”中,第 3 行,第 10 列

有没有办法将整个模板定义放入模板文件中?如果我们需要从多个文件中提取多个模板,这将变得特别烦人。

【问题讨论】:

    标签: jenkins jenkins-job-builder


    【解决方案1】:

    Jenkins-jobs 接受一个path 参数,它可以是一个存放你的文件的目录(job-template.yamljob-1.yamljob-2.yaml。它将它们组装成一个 YAML 文档,所以你不需要使用!include. 所以你可以写:

    job-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 命令生成两个作业:

    pre-build-my-other-proj-my-other-repo:

    <command>echo building my-other-proj for my-other-repo</command>
    

    pre-build-my-proj-my-repo:

    <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
    

    【讨论】:

      猜你喜欢
      • 2022-11-12
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 2015-09-16
      • 1970-01-01
      • 2017-08-10
      相关资源
      最近更新 更多