我需要将构建请求者的用户名传递给实际正在进行工作的脚本。查看特定构建的控制台输出,第一行始终是“由用户foo启动”,因此Jenkins清楚地跟踪谁触发了构建。所以应该可以将这些信息传递给工作......问题是,如何?
答案 0 :(得分:14)
user30997
请查看Jenkins Build User Vars plugin,它可以满足您的需求:
用于设置以下用户构建变量:
答案 1 :(得分:13)
用户名不会放在易于获取的环境变量中,但您可以使用xml (or json or python) api获取 - 只要您开始构建,http://[jenkins-server]/job/[job-name]/[build-number]/api/xml
就会填充详细信息:
<freeStyleBuild>
<action>
<cause>
<shortDescription>Started by user foobar</shortDescription>
<userName>foobar</userName>
</cause>
</action>
<building>true</building>
[...]
答案 2 :(得分:4)
我尝试使用Jenkins Build User Vars plugin并通知HipChat会议室某个用户启动了构建,但HipChat插件无法使用BUILD_USER
变量,可能是因为HipChat操作发生在Build User Vars之前插件注入变量。
所以我安装了pre-scm-buildstep plugin并添加了:
]
// Inject environment variables using Groovy
import hudson.model.*
def build = Thread.currentThread().executable
def userCause = build.getCause(hudson.model.Cause$UserIdCause)
def userName = userCause?.userId ?: 'Jenkins'
def envVars = ['BUILD_USER': userName]
for (item in envVars) {
build.addAction(new ParametersAction([
new StringParameterValue(item.key, item.value)
]))
}
答案 3 :(得分:2)
在您的作业中添加“执行系统Groovy脚本”:
def yourUserName = build.causes[0].userId
答案 4 :(得分:1)
import os
import jenkinsapi.build
import jenkinsapi.jenkins
#Required Environment variables example:
#JENKINS_URL=http://jenkinsserver/
#JOB_NAME=TEST_GT
#BUILD_NUMBER=8
jenkins_inst = None
def get_jenkins_inst():
if jenkins_inst == None:
jenkins_url = os.environ['JENKINS_URL']
print("Connect to jenkins " + jenkins_url)
jenkins_inst = jenkinsapi.jenkins.Jenkins(jenkins_url)
return jenkins_inst
def get_jenkins_job():
jenkins_inst = get_jenkins_inst()
jenkins_job_name = os.environ['JOB_NAME']
print("Get jenkins job " + jenkins_job_name)
return jenkins_inst.get_job(jenkins_job_name)
def get_jenkins_user():
jenkins_job = get_jenkins_job()
jenkins_buildno = int(os.environ['BUILD_NUMBER'])
print("Get jenkins job build " + str(jenkins_buildno))
cur_build = jenkins_job.get_build(jenkins_buildno)
return cur_build.get_actions()['causes'][0]['userId']
答案 5 :(得分:0)
我设法得到它(在Jenkins 2.58上):
currentBuild.getRawBuild().getCauses()[0].getUserId()
当然,您需要在Jenkins中设置权限才能调用这些方法。 它并不总是您正在寻找的第0个原因对象,例如如果你重播另一个用户的版本(不测试这个),它可能是另一个。