You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins中获取人工重建定时触发任务的BUILD_USER?

解决Jenkins人工重建定时任务时Slack通知显示操作用户而非定时器的问题

问题场景

使用parameterized-scheduler插件调度Jenkins定时任务,已配置Slack通知:

  • 定时触发时,Slack频道收到:
    (/ci/master-15): Started by timer with parameters: {URL=https://shop.com, USERNAME=yyy, PASSWORD=xxs, SLACK-NOTIFY-CHANNEL=#JENKINS-REPORTS}
    
  • 任务完成时收到:
    (/ci/master-15): The job is now complete. Here are the execution summary
    

当前用于发送通知的Groovy代码:

BUILD_TRIGGERED_BY = currentBuild.getBuildCauses().shortDescription[0]
SEND_SLACK_NOTIF(BUILD_TRIGGERED_BY)

遇到的问题:定时任务失败后人工重建时,Jenkins流水线状态已显示Started by user andrea-hyong@gmail.com,但Slack通知仍显示定时器触发的内容,需要让通知优先显示操作用户名。

解决方案

修改Groovy代码,优先识别用户触发的构建原因,逻辑如下:

  1. 遍历所有构建原因,优先匹配用户触发的类型
  2. 若存在用户触发记录,直接使用操作用户信息生成通知内容
  3. 若没有用户触发记录,再使用定时器的触发描述

完整代码示例(遍历版)

// 获取所有构建原因集合
def buildCauses = currentBuild.getBuildCauses()
def triggerDescription = "Started by unknown trigger"

// 遍历原因,优先锁定用户触发的记录
for (cause in buildCauses) {
    // 匹配用户触发的原因类
    if (cause._class == "hudson.model.Cause$UserIdCause") {
        triggerDescription = "Started by user ${cause.userId}"
        break
    } 
    // 匹配定时器触发的原因类,作为备选
    else if (cause._class == "hudson.triggers.TimerTrigger$TimerTriggerCause") {
        triggerDescription = cause.shortDescription
    }
}

// 发送Slack通知
SEND_SLACK_NOTIF(triggerDescription)

简化版代码(find方法)

// 查找是否存在用户触发的构建原因
def userCause = currentBuild.getBuildCauses().find { it._class == "hudson.model.Cause\$UserIdCause" }

// 优先使用用户触发信息,否则沿用原逻辑取第一个原因
def triggerDescription = userCause ? "Started by user ${userCause.userId}" : currentBuild.getBuildCauses().shortDescription[0]

SEND_SLACK_NOTIF(triggerDescription)

说明

  • hudson.model.Cause$UserIdCause是Jenkins中标记用户触发构建的内置原因类,可直接从中获取操作用户的userId(通常为邮箱或用户名)
  • 人工重建任务时,用户触发的原因会被加入构建原因列表,通过优先匹配该类型,就能让Slack通知显示正确的操作用户信息
  • 定时触发的场景不受影响,仍会显示原有的定时器触发描述

内容的提问来源于stack exchange,提问作者mark_Ruff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:30:17