groovy Jenkins管道条件环境变量

kiz8lqtg  于 2022-11-01  发布在  Jenkins
关注(0)|答案(4)|浏览(252)

我在声明性管道的environmental指令部分有一组静态环境变量。这些值可用于管道中的每个阶段。我希望这些值根据任意条件进行更改。有没有办法做到这一点?

pipeline {
   agent any
   environment {
     if ${params.condition} {
     var1 = '123'
     var2 = abc
    } else {
     var1 = '456'
     var2 = def
     }
   }
   stages {
     stage('One') {
      steps {
        script {
        ...
        echo env.var1
        echo env.var2            
        ...
     }
    }
   }
  }
  stag('Two'){
   steps {
        script {
        ...
        echo env.var1
        echo env.var2
        ...
     }
   }
 }
monwx1rj

monwx1rj1#

我在other question中找到了一个nice answer
基本上是使用三元条件运算符

pipeline {
    agent any
    environment {
        var1 = "${params.condition == true ? "123" : "456"}"
        var2 = "${params.condition == true ? abc : def}"
    }
}
  • 注意:请记住,在你写问题的方式中(我做了我的答案),数字是字符串,字母是变量。*
8ehkhllq

8ehkhllq2#

我建议您创建一个阶段“环境”,并根据您想要的条件声明变量,如下所示:-

pipeline {
   agent any
   environment {
     // Declare variables which will remain same throughout the build
   }
   stages {
     stage('Environment') {
                agent  { node { label 'master' } }
                steps {
                    script {
                       //Write condition for the variables which need to change
                       if ${params.condition} {
                                 env.var1 = '123'
                                 env.var2 = abc
                                } else {
                                 env.var1 = '456'
                                 env.var2 = def
                                 }
                        sh "printenv"
                    }
                }
            }
         stage('One') {
          steps {
            script {
            ...
            echo env.var1
            echo env.var2            
            ...
         }
        }
       }
      stage('Two'){
       steps {
            script {
            ...
            echo env.var1
            echo env.var2
            ...
         }
       }
    }
    }
}
xn1cxnb4

xn1cxnb43#

假设我们想为下游作业使用可选参数(如果它是从上游作业调用的),以及默认参数(如果下游作业是自己调用的)。但出于某种原因,我们不想在下游使用默认值的“holder”参数。这可以通过groovy函数来实现:

上游Jenkinsfile -参数CREDENTIALS_ID传递给下游
pipeline {
    stage {
        steps {
            build job: "my_downsteam_job_name",
            parameters [string(name: 'CREDENTIALS_ID', value: 'other_credentials_id')]
        }
    }
}
下游Jenkinsfile -如果参数CREDENTIALS_ID未从上游传递,则函数返回默认值
def getCredentialsId() {
    if(params.CREDENTIALS_ID) {
        return params.CREDENTIALS_ID;
    } else {
        return "default_credentials_id";
    }
}
pipeline {
    environment{
        TEST_PASSWORD = credentials("${getCredentialsId()}")
    }
}
ezykj2lf

ezykj2lf4#

使用Map,您可以获得另一种级别的灵活性:

stage("set_env_vars") {
    steps {
        script {
            def MY_MAP1 = [A: "123", B: "456", C: "789"]
            def MY_MAP2 = [A: "abc", B: "def", C: "ghi"]

            env.var1 = MY_MAP1."${env.switching_var}"
            env.var2 = MY_MAP2."${env.switching_var}"

       }
    }
}

这样,就有了更多的选择。

相关问题