在 Jenkinsfile 的环境块中调用 Groovy 方法
Call Groovy method inside Jenkinsfile's environment block
我有一个 Jenkinsfile
看起来像这样:
static def randomUser() {
final def POOL = ["a".."z"].flatten()
final Random rand = new Random(System.currentTimeMillis())
return (0..5).collect { POOL[rand.nextInt(POOL.size())] }.join("")
}
pipeline {
agent any
environment {
//CREATOR = sh(script: "randomUser()", returnStdout: true)
CREATOR = "fixed-for-now"
...
}
stages {
...
stage("Terraform Plan") {
when { not { branch "master" } }
steps {
sh "terraform plan -out=plan.out -var creator=${CREATOR} -var-file=env.tfvars "
}
}
...
stage("Terraform Destroy") {
when { not { branch "master" } }
steps {
sh "terraform destroy -auto-approve -var creator=${CREATOR} -var-file=env.tfvars "
}
}
...
}
我的问题是我无法在 environment
块内调用 randomUser
。我每次都需要将 CREATOR
变量作为随机字符串。我更愿意将 CREATOR
作为全局环境变量,因为它将在许多 stage
中使用。
有没有办法实现(或解决方法)?
您可以通过删除环境块并在管道块
之前定义全局变量CREATOR
来实现此目的
def CREATOR
pipeline {
agent any
stages {
stage('Initialize the variables') {
steps{
script{
CREATOR = randomUser()
}
}
}
...
鉴于您的具体用例,最好使用 CREATOR
变量作为参数而不是环境变量,并将其 defaultValue
分配为 return你的 randomUser
方法。
pipeline {
agent any
parameters {
string(name: 'CREATOR', defaultValue: sh(script: "randomUser()", returnStdout: true))
}
...
}
然后您可以像这样在您的管道中使用它:
stage("Terraform Plan") {
when { not { branch "master" } }
steps {
sh "terraform plan -out=plan.out -var creator=${params.CREATOR} -var-file=env.tfvars "
}
}
通过这种方式,您可以为 CREATOR
正确分配有用的 defaultValue
,但可以在必要时按管道覆盖它。
我有一个 Jenkinsfile
看起来像这样:
static def randomUser() {
final def POOL = ["a".."z"].flatten()
final Random rand = new Random(System.currentTimeMillis())
return (0..5).collect { POOL[rand.nextInt(POOL.size())] }.join("")
}
pipeline {
agent any
environment {
//CREATOR = sh(script: "randomUser()", returnStdout: true)
CREATOR = "fixed-for-now"
...
}
stages {
...
stage("Terraform Plan") {
when { not { branch "master" } }
steps {
sh "terraform plan -out=plan.out -var creator=${CREATOR} -var-file=env.tfvars "
}
}
...
stage("Terraform Destroy") {
when { not { branch "master" } }
steps {
sh "terraform destroy -auto-approve -var creator=${CREATOR} -var-file=env.tfvars "
}
}
...
}
我的问题是我无法在 environment
块内调用 randomUser
。我每次都需要将 CREATOR
变量作为随机字符串。我更愿意将 CREATOR
作为全局环境变量,因为它将在许多 stage
中使用。
有没有办法实现(或解决方法)?
您可以通过删除环境块并在管道块
之前定义全局变量CREATOR
来实现此目的
def CREATOR
pipeline {
agent any
stages {
stage('Initialize the variables') {
steps{
script{
CREATOR = randomUser()
}
}
}
...
鉴于您的具体用例,最好使用 CREATOR
变量作为参数而不是环境变量,并将其 defaultValue
分配为 return你的 randomUser
方法。
pipeline {
agent any
parameters {
string(name: 'CREATOR', defaultValue: sh(script: "randomUser()", returnStdout: true))
}
...
}
然后您可以像这样在您的管道中使用它:
stage("Terraform Plan") {
when { not { branch "master" } }
steps {
sh "terraform plan -out=plan.out -var creator=${params.CREATOR} -var-file=env.tfvars "
}
}
通过这种方式,您可以为 CREATOR
正确分配有用的 defaultValue
,但可以在必要时按管道覆盖它。