我需要将构建请求者的用户名传递给实际正在进行工作的脚本。查看特定版本的控制台输出,第一行总是“由用户foo开始”,因此Jenkins明确了解谁触发了构建。所以应该可以将这些信息传递给工作.....问题是,如何?在詹金斯,如何建立知道谁要求他们?
回答
用户名不放在一个易于获取环境变量,但使用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>
[...]
user30997
请看看Jenkins Build User Vars plugin,它确实你需要什么:
它用于设置以下用户生成变量:
- BUILD_USER - 用户的全名开始建设,
- BUILD_USER_FIRST_NAME - 的用户名开始建设,
- BUILD_USER_LAST_NAME - 用户姓氏开始建设,
- BUILD_USER_ID - 的用户ID开始构建。
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']
在您的工作增添“执行系统Groovy脚本”:
def yourUserName = build.causes[0].userId
我试图用Jenkins Build User Vars plugin,并通知构建由某个用户开始HipChat房间,但BUILD_USER
变量不可用于HipChat插件,可能是因为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)
]))
}
谢谢。詹金斯使这种方式比它应该更难。我没有看到“执行系统Groovy脚本”作为“SCM运行之前擦拭buildstep”的选项之一。有没有想过如何在没有Groovy的情况下做到这一点或做同样的事情? – 2016-01-20 19:48:51
没关系,在这里找到了Groovy插件:https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin – 2016-01-20 19:56:55
我设法得到它(对詹金斯2.58):
currentBuild.getRawBuild().getCauses()[0].getUserId()
当然你需要设置权限詹金斯能够称这些方法。 它并不总是您要查找的第0个原因对象,例如如果您重放其他用户的版本(未测试此版本),则可能是另一个版本。
- 1. 詹金斯:建立在需求
- 2. UWP建立在詹金斯
- 3. 建立和詹金斯
- 4. 如何在詹金斯管道Deployit配置在詹金斯
- 5. 如何詹金斯管道
- 6. 选择分支建立在詹金斯
- 7. 在詹金斯管道
- 8. 如何在詹金斯的Groovy管道
- 9. 如何在管道中詹金斯
- 10. 在詹金斯建立分支起源的请求
- 11. 詹金斯的Git建立失败
- 12. 詹金斯触发建立分支
- 13. 参数化构建 - 詹金斯管道
- 14. 詹金斯建立管道插件与空$ {PIPELINE_VERSION}
- 15. 詹金斯管道建立步骤 - getBuildVariables()返回空映射
- 16. 如何詹金斯
- 17. 如何詹金斯
- 18. 詹金斯管道groovy.lang.MissingPropertyException
- 19. 限制詹金斯管道
- 20. 获取詹金斯管道
- 21. 与詹金斯管道
- 22. 詹金斯管道java.io.NotSerializableException:groovy.util.slurpersupport.NodeChildren
- 23. Perforce詹金斯多管道
- 24. 詹金斯CD管道Kubernetes
- 25. 如何在詹金斯建立一个工作流程?
- 26. 我怎样才能知道詹金斯构建状态
- 27. 在詹金斯
- 28. 如何使用Artifactory的Maven构建在詹金斯管道
- 29. 詹金斯将要关闭
- 30. 我们可以配置在詹金斯
它不适合我,詹金斯说'无法识别宏'BUILD_USER''偶插件安装 – 2017-01-20 10:12:49