12

我有 Jenkins Pipeline 作业,其中作业之间的唯一区别是一个参数,一个单一的“名称”值,我什至可以使用多分支作业名称(尽管它不是作为 BRANCH 名称的 JOB_NAME 传递的,遗憾的是没有envs 看起来很合适,无需解析)。如果我可以将这个设置在 Jenkinsfile 之外,那就太好了,因为那时我可以为所有不同的工作重用同一个 jenkinsfile。

4

3 回答 3

6

基本上,您需要创建一个jenkins 共享库示例名称,并在varsmyCoolLib下的一个文件中拥有完整的声明性管道,假设您调用该文件。myFancyPipeline.groovy

想写我的例子,但实际上我看到文档非常好,所以我会从那里复制。首先是 myFancyPipeline.groovy

def call(int buildNumber) {
  if (buildNumber % 2 == 0) {
    pipeline {
      agent any
      stages {
        stage('Even Stage') {
          steps {
            echo "The build number is even"
          }
        }
      }
    }
  } else {
    pipeline {
      agent any
      stages {
        stage('Odd Stage') {
          steps {
            echo "The build number is odd"
          }
        }
      }
    }
  }
}

然后是使用它的 Jenkinsfile(现在有 2 行)

@Library('myCoolLib') _
evenOrOdd(currentBuild.getNumber())

显然,这里的参数是 int 类型的,但它可以是任意数量的任意类型的参数。

我使用这种方法并拥有一个具有 3 个参数(2 个字符串和一个 int)的 g​​roovy 脚本,并且有 15-20 个 Jenkinsfiles 通过共享库使用该脚本,它非常完美。动机当然是任何编程中最基本的规则之一(不是引用,而是类似的东西):如果你在 2 个不同的地方有“相同的代码”,那就是不对的。

于 2018-02-11T15:49:53.930 回答
5

将此添加到您的 Jenkinsfile 中:

properties([
  parameters([
    string(name: 'myParam', defaultValue: '')
  ])
])

然后,一旦构建运行一次,您将在作业 UI 上看到“使用参数构建”按钮。

在那里你可以输入你想要的参数值。

在管道脚本中,您可以使用params.myParam

于 2018-02-09T14:50:23.377 回答
0

有一个选项此项目在您的管道作业配置中参数化。如果您愿意,可以写变量名和默认值。在管道中访问此变量env.variable_name

于 2018-02-09T16:07:39.213 回答