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

最佳答案

基本上你需要创建一个 jenkins shared library 示例名称 myCoolLib 并在 vars 下的一个文件中有一个完整的声明性管道,假设你调用文件 0x2518112431343 。

想写我的例子,但实际上我看到 the docs are quite nice ,所以我会从那里复制。首先是 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 个字符串和一个整数)的 groovy 脚本,并且有 15-20 个 Jenkinsfiles 通过共享库使用该脚本,这是完美的。动机当然是任何编程中最基本的规则之一(不是引用,而是类似):如果您在 2 个不同的地方有“相同的代码”,那就是不对的。

关于jenkins - 如何参数化 Jenkinsfile 作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48558904/

10-13 01:23