如何在Jenkins流水线中获取GitHub Branch Source插件commit webhook推送者信息
Jenkins GitHub Branch Source 插件获取推送触发者GitHub账号方案
你在默认环境变量里查不到对应信息是正常的,该插件不会默认把webhook里的推送者信息注入顶层环境变量,可通过以下两种稳定方式获取,不需要额外配置webhook或调用外部API:
方案1:从构建触发原因(Cause)直接读取(推荐,无需额外权限)
插件收到GitHub的push webhook触发构建时,会自动把推送者信息写入构建的Cause对象,不需要脚本安全审批,兼容性最好。
直接在Pipeline的script块中通过currentBuild内置对象读取即可,示例代码:pipeline { agent any stages { stage('获取触发者身份') { steps { script { // 匹配GitHub Branch Source插件的Push触发原因类 def pushCauseList = currentBuild.getBuildCauses('org.jenkinsci.plugins.github_branch_source.GitHubPushCause') if (pushCauseList) { def triggerUser = pushCauseList[0].pusherName echo "本次构建触发者GitHub账号:${triggerUser}" // 可自行注入为环境变量供后续阶段使用 env.BUILD_TRIGGER_GH_USER = triggerUser } } } } } }该方式取到的就是webhook payload里
pusher.name字段的值,和你在GitHub webhook投递记录里看到的执行推送操作的账号完全一致,不会和commit里自定义的作者信息混淆。方案2:读取插件缓存的原始webhook payload(适配特殊版本场景)
如果你的插件版本较旧,Cause对象里没有pusherName字段,可以直接读取插件缓存的完整原始webhook载荷,该载荷是插件收到webhook时原样存储的,信息最全。
示例代码:script { def payloadAction = currentBuild.rawBuild.getAction(org.jenkinsci.plugins.github_branch_source.GitHubWebhookPayloadAction.class) if (payloadAction) { def rawPayload = payloadAction.payload def triggerUser = rawPayload.pusher.name echo "从原始webhook载荷取到的触发者账号:${triggerUser}" env.BUILD_TRIGGER_GH_USER = triggerUser } }注意:该方式调用了
rawBuild相关API,第一次运行时会触发脚本安全拦截,到Jenkins管理后台「脚本安全」页面批准对应方法的调用权限即可正常使用。
常见误区提醒
- 不要通过
git log取commit的author/committer信息:该信息是用户本地git配置的,可以任意修改,和实际在GitHub上执行push操作的账号没有强绑定关系,身份校验场景下不可信 - 不需要额外开发webhook接收服务:插件已经完整接收并存储了webhook的所有内容,重复接收只会增加维护成本
- 不要在多分支流水线的扫描事件里取该字段:该字段仅在代码push触发的单次构建任务里存在,分支扫描、定时触发的构建不会携带推送者信息
内容的提问来源于stack exchange,提问作者Johan Karlberg
相关产品推荐
相关产品推荐

