【问题标题】:Jenkins Pipeline Conditional Environmental VariablesJenkins 管道条件环境变量
【发布时间】:2022-05-16 21:37:05
【问题描述】:

我在声明性管道的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
        ...
     }
   }
 }

【问题讨论】:

    标签: jenkins groovy


    【解决方案1】:

    寻找同样的东西我在other question中找到了nice answer

    基本上就是用ternary conditional operator

    pipeline {
        agent any
        environment {
            var1 = "${params.condition == true ? "123" : "456"}"
            var2 = "${params.condition == true ? abc : def}"
        }
    }
    

    注意:请记住,在你写问题的方式(我也做了我的回答)中,数字是字符串,字母是变量。

    【讨论】:

      【解决方案2】:

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

      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
                  ...
               }
             }
          }
          }
      }
      

      【讨论】:

      • 哦,对了,所以您实际上可以在一个阶段内设置环境变量,这些变量将在其他阶段可用。谢谢。
      • 请您支持这个问题。还有其他类似的问题,但没有正确答案。
      • 是的,所有阶段都可以使用这些变量
      • 在共享库中使用时出现异常:vars/basePipeline.groovy: 42: expecting '(', found '$' @ line 42, column 28. if ${env.ENABLE_CONSOLE} {
      【解决方案3】:

      假设我们想为下游作业使用可选参数,如果它是从上游作业调用的,如果下游作业是自己调用的,则使用默认参数。 但是出于某种原因,我们不希望在下游拥有具有默认值的“持有人”参数。 这可以通过 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()}")
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用地图获得另一个级别的灵活性:

        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}"
        
               }
            }
        }
        

        这样,更多的选择是可能的。

        【讨论】:

          猜你喜欢
          • 2017-08-09
          • 2018-10-02
          • 2021-12-14
          • 1970-01-01
          • 1970-01-01
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          • 2020-11-03
          相关资源
          最近更新 更多