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

Jenkins Pipeline如何获取部署审批/拒绝操作的用户名而非用户ID

问题场景
  • 基于CloudBees官方带超时逻辑的Pipeline输入审批方案搭建部署审批环节,可正常支持批准、拒绝操作
  • 执行拒绝操作时,通过err.getCauses()[0].getUser()仅能获取到操作用户的系统ID,无法读取对应的用户真实姓名
  • 需落地可获取操作用户完整姓名的实现方案
核心实现原理
  • 异常捕获得到的RejectionCause类对象中,getUser()方法返回的是Jenkins系统层面的用户唯一标识ID,该方法本身不存储用户姓名属性
  • 可通过Jenkins内置的用户查询API,根据拿到的用户ID关联查询对应账号的完整属性,从用户对象的fullName字段读取真实姓名
可直接复用的Pipeline实现示例
import hudson.model.User
import jenkins.model.Jenkins

pipeline {
  agent any
  stages {
    stage('部署审批') {
      options {
        timeout(time: 1, unit: 'HOURS') // 匹配官方方案的超时配置逻辑
      }
      steps {
        script {
          def approvalParam
          try {
            approvalParam = input(
              message: '请确认部署操作',
              ok: '批准部署',
              submitterParameter: 'submitterId',
              parameters: [
                choice(choices: ['预发环境', '生产环境'], description: '选择部署目标', name: 'targetEnv')
              ]
            )
            // 审批通过逻辑
            echo "审批通过,操作人ID:${approvalParam.submitterId},即将向${approvalParam.targetEnv}发布"
          } catch (err) {
            def cause = err.getCauses()[0]
            // 处理用户主动拒绝的场景
            if (cause instanceof org.jenkinsci.plugins.workflow.support.steps.input.RejectionCause) {
              def submitterId = cause.getUser()
              // 根据用户ID查询账号完整信息
              def submitterInfo = Jenkins.instance.getUser(submitterId)
              // 读取用户姓名,增加空值兜底
              def submitterName = submitterInfo?.getFullName() ?: "未知用户(ID:${submitterId})"
              echo "审批被拒绝,操作人ID:${submitterId},操作人姓名:${submitterName}"
              currentBuild.result = 'ABORTED'
              error "部署流程已被${submitterName}终止"
            }
            // 处理超时自动终止的场景
            if (cause instanceof org.jenkinsci.workflow.actions.ExecutionCause) {
              echo '审批超时,流程自动终止'
              currentBuild.result = 'TIMEOUT'
              error '未在限定时间内完成审批,部署流程终止'
            }
          }
        }
      }
    }
  }
}
落地注意事项
  • 权限配置:Pipeline关联的执行账号需要开放Overall/Read全局权限,否则无法调用用户查询API读取账号属性
  • 异常兜底:如果操作用户已被删除、或权限不足无法查询用户信息,需要保留默认值兜底逻辑,避免Pipeline抛出空指针异常
  • 外部同步场景:如果用户姓名是通过LDAP、AD等外部身份系统同步到Jenkins的,只要用户详情页的“Full Name”字段可正常展示,上述方法即可直接读取到同步后的姓名值
  • 匹配规则:读取到的用户ID需要和Jenkins用户管理列表中的唯一标识完全匹配,否则会返回空的用户对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 22:15:03