如何在指定用户触发的Build Pipeline成功后触发Automation Pipeline
解决Jenkins特定用户触发后续自动化流水线的需求
背景
已知Jenkins Build A成功触发后需执行Automation Pipeline,基础逻辑可通过「Build after other projects are built」实现,但需要限制仅用户A、B触发Build A时才启动Automation Pipeline,用户C触发时跳过。
实现步骤
1. 配置基础依赖触发
在Automation Pipeline的配置页,找到构建触发器模块:
- 勾选「Build after other projects are built」
- 填入依赖项目
Build A,按需勾选「Trigger only if build is stable」(确保仅Build A稳定成功时触发)
2. 添加用户过滤逻辑
Jenkins原生触发器不支持直接按用户过滤,需通过Groovy脚本实现权限校验:
针对Pipeline项目
在Jenkinsfile最开头加入以下判断,不符合条件则直接终止流水线:
// 获取触发Build A的用户ID def triggerUser = currentBuild.getBuildCauses()[0].userId // 定义允许触发的用户白名单 def allowedUsers = ['userA', 'userB'] if (!allowedUsers.contains(triggerUser)) { echo "触发用户${triggerUser}不在白名单内,Automation Pipeline终止" error "Unauthorized trigger" }
针对自由风格项目
- 先安装「Conditional BuildStep」插件
- 在Automation Pipeline的构建环节,添加「Conditional step (single)」
- 选择「Run condition」为「Groovy script」,输入校验脚本:
def triggerUser = build.getBuildCauses()[0].userId return ['userA', 'userB'].contains(triggerUser)
- 将所有自动化构建步骤嵌套在这个条件步骤内,只有脚本返回
true时才执行
关键注意点
- 脚本中的用户ID必须和Jenkins系统内的用户ID完全匹配(区分大小写)
- 如果Build A是被系统账号或其他流水线触发,需提前确认
getBuildCauses()返回的userId字段是否有效 - 可通过
echo语句在构建日志中记录触发用户信息,方便排查问题
内容的提问来源于stack exchange,提问作者Saurabh Kawli
相关产品推荐
相关产品推荐

