首页 > 解决方案 > Jenkinsfile 开关变量错误应用

问题描述

我在 Jenkinsfile 上使用 SWITCH 时遇到问题。当 PR 完成后,管道使用 println 启动,我看到 CHANGE_TARGET 与 CASE 条件匹配是正确的,但是它适用于 master 并且所有变量都是使用 MASTER case 值设置的。

第一个 println 返回:

构建 ENV 是测试 | 公关标题:XXX

代码示例:

pipeline {
  agent any
  stages {

    stage('Setup Variables') {
      steps {
        script {
          switch(env.CHANGE_TARGET) {
            case 'test':
              API_Cluster = 'cluster-api'
              API_Service = 'api'
              API_DockerFile = 'api-test'
              ECR_ImageTag = 'XXX'
            case 'qa':
              API_Cluster = 'cluster-api'
              API_Service = 'api'
              API_DockerFile = 'api-qa'
              ECR_ImageTag = 'XXX'
            case 'master':
              API_Cluster = 'cluster-api'
              API_Service = 'api'
              API_DockerFile = 'api-prod'
              ECR_ImageTag = 'XXX'
            default:
              println "Branch name was not set!"
              break;
          }
        }
      }

    }

    stage('Build Details') {
      steps {
        println("The build ENV is " + CHANGE_TARGET + " | " + "PR Title: " + CHANGE_TITLE)
        println("Services:" + API_Service + " | " + WEB_Service)
      }
    }

    stage('Build API') {
      steps {
        sh """docker build --rm --tag api:${ECR_ImageTag} -f ${API_DockerFile} ."""
      }
    }

  }
}

标签: jenkinsjenkins-pipelinejenkins-groovy

解决方案


break在每个案例结束时,您都失踪了。当没有 时break,Groovy 继续运行剩余案例中的代码。

switch(env.CHANGE_TARGET) {
   case 'test':
      API_Cluster = 'cluster-api'
      API_Service = 'api'
      API_DockerFile = 'api-test'
      ECR_ImageTag = 'XXX'
      break

   case 'qa':
      API_Cluster = 'cluster-api'
      API_Service = 'api'
      API_DockerFile = 'api-qa'
      ECR_ImageTag = 'XXX'
      break

   case 'master':
      API_Cluster = 'cluster-api'
      API_Service = 'api'
      API_DockerFile = 'api-prod'
      ECR_ImageTag = 'XXX'
      break

   default:
      println "Branch name was not set!"
      break;
 }

推荐阅读