在 Jenkins 配置中基于每个文件传递变量作为代码作业 DSL

Pass Variable on a Per-File Basis in Jenkins Configuration as Code Job DSL

https://github.com/jenkinsci/job-dsl-plugin/wiki/JCasC 提供了 Jenkins 配置即代码 (CasC) 语法中引用的单独 groovy 文件的以下示例。

jobs:
  - providedEnv:
      SUPERHERO: 'Midnighter'
  - file: ./jobdsl/job.groovy
//job.groovy
job('awesome-job') {
    description("favorite job of ${SUPERHERO}")
}

我正在寻找一种方法来定义一些非常相似的工作,这些工作只有一两个值不同。在上面的示例中,SUPERHERO 变量看起来是一个全局变量,但我需要一种方法来重用相同的 groovy 包含每个包含变量。

伪代码示例:

jobs:
 - file: ./jobdsl/job.groovy
   providedEnv:
      SUPERHERO: 'Superman'
 - file: ./jobdsl/job.groovy
   providedEnv:
      SUPERHERO: 'Batman'

这样的结构存在吗?

这似乎有效:

jobs:
  - providedEnv:
      SUPERHERO: 'Batman' 
  - file: ./jobdsl/job.groovy
  - providedEnv:
      SUPERHERO: 'Superman' 
  - file: ./jobdsl/job.groovy

但我不知道我是否在利用脆弱的、未记录的行为。

我希望看到环境变量与 file 引用的显式关联;像这样:

jobs:
 - file: ./jobdsl/job.groovy
   providedEnv:
      SUPERHERO: 'Batman'
 - file: ./jobdsl/job.groovy
   providedEnv:
      SUPERHERO: 'Superman'

...但是这个(猜测)语法不起作用。 (詹金斯开始了,但没有工作。)

这样做怎么样?

jobs:
  - providedEnv:
      JOB_NAMES: 'Batman,Superman'
  - file: ./jobdsl/jobs.groovy

然后您在 jobs.groovy 中有一个循环将 JOB_NAMES 拆分成一个列表。