【问题标题】:Pass Variable on a Per-File Basis in Jenkins Configuration as Code Job DSL在 Jenkins 配置中基于每个文件将变量传递为代码作业 DSL
【发布时间】:2020-01-06 11:54:17
【问题描述】:

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'

这样的结构存在吗?

【问题讨论】:

    标签: jenkins-job-dsl jcasc


    【解决方案1】:

    这似乎有效:

    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'
    

    ...但是很遗憾,这种(猜测)语法不起作用。 (Jenkins 开始工作,但工作缺席。)

    【讨论】:

    • 好吧,我对此并不感到疯狂,但它可以完成工作,而且对于我的用例来说,这是我所知道的最佳解决方法,所以我将其标记为答案。
    【解决方案2】:

    这样做怎么样?

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

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

    【讨论】:

    • 谢谢。但是,您拥有的环境变量和值越多,这就会变得越来越尴尬。我当前的用例大约有四个作业,每个作业有五个变量,因此同步(和视觉解析)列表对我来说效果不佳。但是,它可能对某些用例有意义。
    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多