【问题标题】:Add extra parameters at project or inherited job-template level在项目或继承的作业模板级别添加额外参数
【发布时间】:2019-04-04 16:35:56
【问题描述】:

我正在寻找一种方法来允许 jjb job-template 的某些实例添加其他参数,或者通过继承的子模板添加它们。

同样的事情确实适用于任何数组/列表/序列值键。我不想覆盖整个密钥,而是想附加到它。可能有一些“n”级深,需要 YAML 锚点和合并键之类的东西。

所以要么:

  • 实例化job-templateproject 可以添加自己的额外parameters:;或
  • 继承/扩展另一个job-templatejob-template 可以添加额外参数,而不会覆盖已经指定的参数。

我想要这个的工作版本:

- job-template: &base-template
    name: base-params
    parameters:
       - string:
           name: foo
           default: FOO
           description: Foofoo

- project:
    name: thing
    jobs:
       - more-params
         parameters:
           - !APPEND          # This is wrong
           - string:
               name: bar
               default: BAR
               description: Baaaa

或者这个:

- job-template: &base-template
    name: base-params
    parameters:
       - string:
           name: foo
           default: FOO
           description: Foofoo

- job-template:
    name: more-params
    << : *base-template
    parameters:
      - !APPEND             # This is wrong
      - string:
           name: bar
           default: BAR
           description: Baaaa

- project:
    name: thing
    jobs:
       - more-params

或者这个:

- job-template: &base-template
    name: base-params
    parameters: &base-template-parameters
       - string:
           name: foo
           default: FOO
           description: Foofoo

- job-template:
    name: more-params
    << : *base-template
    parameters:
      - << &base-template-parameters     # THIS IS WRONG
      - string:
           name: bar
           default: BAR
           description: Baaaa

- project:
    name: thing
    jobs:
       - more-params

我考虑用 YAML 继承创建一个子 job-template,然后在项目中使用它。但这看起来行不通,因为yaml doesn't have a way to extend/append sequences/lists。合并键不适用于列表and the yaml spec doesn't plan on accepting anything like them;事实上,merge 键正在逐渐被弃用。

JJB 本身似乎没有提供一种方式来表示“此作业模板扩展了此其他作业模板,您应该合并 parameters: 列表”。它依赖于 YAML 继承,在 JJB 本身而不是 YAML 阅读器中实现,但没有等效的(可查找/记录的)列表。

我怀疑!j2 Jinja2 标签可能有可能,但我完全不确定如何使用,或者这样做是否明智。

这当然是一种常见的需求? I had similar issues with Ansible some time ago.

到目前为止,我发现的唯一方法是在包含文件中使用 sn-ps,这非常丑陋,就像(未经测试)

# File base-template-params.yml.inc
- string:
    name: foo
    default: FOO
    description: Foofoo

# File templates.yml
- job-template: &base-template
    name: base-params
    parameters:
        !include base-template-params.yml.inc


- job-template:
    name: more-params
    << : *base-template
    parameters:
      !include base-template-params.yml.inc
      - string:
           name: bar
           default: BAR
           description: Baaaa

- project:
    name: thing
    jobs:
       - more-params

【问题讨论】:

    标签: jenkins yaml jenkins-job-builder


    【解决方案1】:

    很遗憾,您是对的,JJB 不支持此处提出的请求。当前 JJB 最接近的方法是在声明变量时使用“obj:”键 {obj:variable_name_must_use_underscores}

    - job-template:
        name: base-params
    
        ######################
        # Default parameters #
        ######################
    
        job_params:
    
        #####################
        # Job configuration #
        #####################
    
        parameters: '{obj:job_params}'
    
    - project:
        name: thing
        jobs:
          - base-params
        job_params:
          - string:
              name: foo
              default: FOO
              description: Foofoo
           - string:
               name: bar
               default: BAR
               description: Baaaa
    

    这样做是在作业模板中设置一个默认的作业参数,该参数将应用于作业模板的所有用户。它可选地提供了覆盖默认 job_params 的能力,但正如您从示例中看到的那样,不幸的是,如果用户想要附加新的参数,则需要重新定义默认的 job_params。

    当前的 JJB 2.x 不支持继承和扩展现有模板配置的方法,如果您覆盖,则需要覆盖整个部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多