Jenkinsfile 根据环境变量定义变量

Jenkinsfile define variable based on environment variable

如果我的环境变量之一等于字符串,我想将布尔变量设置为 true。如果此 RUN_TESTS var 为真,我只想 运行 我的测试阶段。

pipeline{
  environment {
     RUN_TESTS = expression { "${env.JOB_BASE_NAME}" == 'Test Pipeline' }
  }
 stages{
     stage('test'){
       when {
         expression { RUN_TESTS }
       }
       steps{
          // run my tests.......
     }
    
  }
}

虽然上面的方法不起作用。

如何根据环境变量的值设置一个布尔变量,然后我可以使用它有条件地运行一个管道阶段?

在这种情况下,您似乎不必设置环境变量。您可以直接在您的舞台上评估表达式:

pipeline{
 stages{
     stage('test'){
       when {
         expression { "${env.JOB_BASE_NAME}" == 'Test Pipeline' }
       }
       steps{
          // run my tests.......
     }
    
  }
}

另一方面,如果您仍然需要设置环境变量,则有几种方法可以做到。詹金斯说:

Environment variable values must either be single quoted, double quoted, or function calls.
  1. 用双引号括起来:
    environment {
        RUN_TESTS = "${env.JOB_BASE_NAME == 'Test Pipeline'}"
    }
  1. 在函数调用中包装这个表达式,像这样:
def run_tests() {
    return "${env.JOB_BASE_NAME}" == 'Test Pipeline' 
}

pipeline{
 environment {
    RUN_TESTS = run_tests()
 }
 stages{
     stage('test'){
       when {
         expression { RUN_TESTS }
       }
       steps{
          // run my tests.......
     }

  }
}

但总的来说我会选择第一种方法