jenkins - 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} ."""
}
}
}
}
解决方案
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;
}
推荐阅读
- node.js - npm install - ERESOLVE 无法解析依赖树
- html - 在 CSS 中为元素添加插入符号
- python - 如何从突出显示区域的图像中转录文本?
- python - 如何在执行 subprocess.Popen 时保留外壳上输出的原始颜色编码?
- oracle - 在 Oracle 中触发更新
- drupal - 阻止用户从 url 访问 JSON 文件:Drupal 7
- nginx - Nginx 重写规则仅适用于第一个请求
- jms - 设置 ActiveMQ Artemis 路由类型,Spring Boot JmsListener 作为客户端
- java - 我如何创建一个不使用超类的所有属性的子类?
- javascript - 在 ref.off() 之后触发 ref.onDiconnect()