为什么Jenkins在pipeline脚本中将登录用户返回为SYSTEM

mbzjlibv  于 2023-01-20  发布在  Jenkins
关注(0)|答案(1)|浏览(144)

我在Jenkins有这样的表达:
println User.current().toString()
在Jenkins脚本控制台中,它会返回当前登录的真实的用户值。当我在管道脚本中使用此函数时,它会返回值SYSTEM。知道为什么吗?为什么我不能在这里也获得登录的真实用户?

nqwrtyyt

nqwrtyyt1#

要回答您的最后一个问题:我想到了两种简单的方法来获取管道中真正登录(以及触发构建)的用户(名称)**:

*A)使用插件-Build user vars(我可以推荐它,因为它被广泛使用,从来没有让我失望过):

这是他们官方文档中的一个代码片段。当然,它也可以在声明性管道中的某个阶段使用...这个插件设置了几个变量,你可以使用BUILD_USER(包含全名),BUILD_USER_ID(包含用户ID)和更多(参见插件页面上的文档)。

node {
  wrap([$class: 'BuildUser']) {
    def user = env.BUILD_USER_ID
  }
}

和/或声明性流水线中的阶段的示例:

stage('User ID') {
   steps {
      echo "User ID: ${env.BUILD_USER_ID}"
   }
}

*B)使用Jenkins岩心法

def build = currentBuild.rawBuild
def cause = build.getCause(hudson.model.Cause.UserIdCause.class)
def name = cause.getUserName()
echo "User: " + name
  • 注意:两种方法(A和B)都应直接在管道和JSL(Jenkins共享库)中工作。*

从标题中也可以回答你的问题:使用你的确切方法是有问题的,并且不适用于管道脚本(更多细节请参见这里的旧讨论How to get Jenkins logged user,甚至是官方社区票证https://issues.jenkins.io/browse/JENKINS-14605)。

相关问题