如何通过上游流水线重新触发带指定参数的下游流水线运行
按需重新触发下游流水线并传递ACTION参数的解决方案
一、GitLab CI 场景
1. 上游流水线配置手动触发作业
在上游项目的.gitlab-ci.yml中添加一个手动触发的作业,通过GitLab API调用下游流水线并传递ACTION参数:
trigger_downstream: stage: trigger script: - | curl --request POST \ --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ --form "variables[ACTION]=$ACTION" \ "https://你的GitLab域名/api/v4/projects/<下游项目ID>/trigger/pipeline" when: manual variables: ACTION: deploy # 默认值,手动触发时可修改为undeploy allow_failure: false
- 配置说明:
GITLAB_TOKEN需在项目变量中设置,要拥有触发下游流水线的权限;<下游项目ID>替换为实际的下游项目ID;手动触发该作业时,可直接修改ACTION变量值,选择执行部署或撤销部署。
2. 下游流水线接收参数执行对应逻辑
下游项目的.gitlab-ci.yml通过$ACTION变量控制作业执行:
deploy_job: stage: deploy script: - echo "执行部署操作" # 此处添加实际部署逻辑 only: variables: - $ACTION == "deploy" undeploy_job: stage: undeploy script: - echo "执行撤销部署操作" # 此处添加实际撤销部署逻辑 only: variables: - $ACTION == "undeploy"
二、Jenkins 场景
1. 上游流水线配置参数化手动触发
在上游Jenkinsfile中添加参数化构建选项,通过build步骤触发下游流水线:
pipeline { agent any parameters { choice(name: 'ACTION', choices: ['deploy', 'undeploy'], description: '选择操作类型') } stages { stage('构建产物') { steps { // 此处添加你的构建逻辑 } } stage('触发下游流水线') { steps { script { build job: '下游流水线名称', parameters: [string(name: 'ACTION', value: params.ACTION)], wait: false // 不需要等待下游完成可设为false } } when { expression { currentBuild.currentResult == 'SUCCESS' } } } } }
- 配置说明:上游流水线需开启参数化构建,选择
Choice类型参数ACTION;需要多次触发时,直接重新运行上游流水线,选择对应的操作类型即可。
2. 下游流水线接收参数分支执行
下游Jenkinsfile中根据ACTION参数执行对应逻辑:
pipeline { agent any parameters { string(name: 'ACTION', defaultValue: 'deploy', description: '操作类型') } stages { stage('执行操作') { steps { script { if (params.ACTION == 'deploy') { echo "执行部署流程" // 此处添加部署逻辑 } else if (params.ACTION == 'undeploy') { echo "执行撤销部署流程" // 此处添加撤销部署逻辑 } } } } } }
通用注意事项
- 确保上游流水线拥有触发下游的权限:GitLab需配置有效API令牌,Jenkins需配置对应权限的凭据
- 下游流水线必须提前配置参数接收逻辑,确保能识别
ACTION变量并执行对应阶段 - 手动触发时可自由切换
deploy/undeploy,实现按需多次执行部署或撤销操作
内容的提问来源于stack exchange,提问作者hey
相关产品推荐
相关产品推荐

