我需要將構建請求者的用戶名傳遞給實際正在進行工作的腳本。查看特定版本的控制檯輸出,第一行總是「由用戶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. 在詹金斯管道
- 9. 如何在管道中詹金斯
- 10. 如何在詹金斯的Groovy管道
- 11. 在詹金斯建立分支起源的請求
- 12. DSL週期性使建立詹金斯
- 13. 詹金斯Maven項目未能建立
- 14. 詹金斯的Git建立失敗
- 15. 詹金斯觸發建立分支
- 16. 參數化構建 - 詹金斯管道
- 17. 詹金斯管道建立步驟 - getBuildVariables()返回空映射
- 18. 詹金斯建立管道插件與空$ {PIPELINE_VERSION}
- 19. 如何詹金斯
- 20. 如何詹金斯
- 21. 詹金斯需要知道你的Maven安裝
- 22. 與詹金斯管道
- 23. 限制詹金斯管道
- 24. 詹金斯管道java.io.NotSerializableException:groovy.util.slurpersupport.NodeChildren
- 25. Perforce詹金斯多管道
- 26. 詹金斯CD管道Kubernetes
- 27. 詹金斯管道groovy.lang.MissingPropertyException
- 28. 獲取詹金斯管道
- 29. 如何在詹金斯建立一個工作流程?
- 30. 如何在詹金斯
它不適合我,詹金斯說'無法識別宏'BUILD_USER''偶插件安裝 – 2017-01-20 10:12:49