从Jenkins Workflow(Pipeline)插件获取用户名

Dan*_*dez 22 groovy jenkins cloudbees jenkins-pipeline

我在Jenkins by Clouldbees中使用了Pipeline插件(之前的名称是Workflow插件),我试图在Groovy脚本中获取用户名但我无法实现它.

stage 'checkout svn'

node('master') {
      // Get the user name logged in Jenkins
}
Run Code Online (Sandbox Code Playgroud)

Jes*_*ick 42

您是否尝试安装Build User Vars插件?如果是这样,你应该能够运行

node {
  wrap([$class: 'BuildUser']) {
    def user = env.BUILD_USER_ID
  }
}
Run Code Online (Sandbox Code Playgroud)

或类似的.

  • 谢谢:)工作得很好我不知道该插件,检查发现说明我发现这是最后一次更新,支持工作流程插件!大 (3认同)
  • 我正在尝试使用管道工作.维基描述应该有一个'设置jenkins用户构建变量'复选标记,但这似乎只在`Freestyle project`s中可用.还有什么我想念的吗? (2认同)
  • 请注意,该插件被列为:`user build vars plugin` (2认同)

You*_*ank 14

使其适用于Jenkins管道:

安装用户构建变量插件

然后运行以下命令:

pipeline {
  agent any

  stages {
    stage('build user') {
      steps {
        wrap([$class: 'BuildUser']) {
          sh 'echo "${BUILD_USER}"'
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Daa*_*ker 11

没有插件就可以做到这一点(假设JOB_BASE_NAME并且BUILD_ID在环境中):

def job = Jenkins.getInstance().getItemByFullName(env.JOB_BASE_NAME, Job.class)
def build = job.getBuildByNumber(env.BUILD_ID as int)
def userId = build.getCause(Cause.UserIdCause).getUserId()
Run Code Online (Sandbox Code Playgroud)

还有一个getUserName,它返回用户的全名.


小智 11

这是一个略短的版本,不需要使用环境变量:

@NonCPS
def getBuildUser() {
    return currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()
}
Run Code Online (Sandbox Code Playgroud)

使用rawBuild要求它在一个@NonCPS块中.


Ana*_*ips 6

def jobUserId, jobUserName
//then somewhere
wrap([$class: 'BuildUser']) {
    jobUserId = "${BUILD_USER_ID}"
    jobUserName = "${BUILD_USER}"
}
//then
println("Started By: ${jobUserName}")
Run Code Online (Sandbox Code Playgroud)

我们正在使用这个插件:构建用户变量插件。更多的变量可用。


小智 6

在没有 Build User 插件的情况下,这对我有用:

// get first entry of JSONArray
def buildCause = currentBuild.getBuildCauses()[0]
def buildPrincipal = [type:"unknown", name:""]

if (buildCause._class ==~ /.+BranchEventCause/) {
  def branchCause = currentBuild.getRawBuild().getCause(jenkins.branch.BranchEventCause)
  buildPrincipal = [type:"branch",name:buildCause.shortDescription]

} else
if (buildCause._class ==~ /.+TimerTriggerCause/) {
  def timerCause = currentBuild.getRawBuild().getCause(hudson.triggers.TimerTrigger.TimerTriggerCause)
  buildPrincipal = [type:"timer", name:"Timer event"]

} else
if (buildCause._class ==~ /.+UserIdCause/) {
  def buildUserCause = currentBuild.getRawBuild().getCause(hudson.model.Cause.UserIdCause)
  buildPrincipal = [type:"user", name:buildCause.userId]

} else
// ... other causes
Run Code Online (Sandbox Code Playgroud)