Jenkins提供两种方式的Script,一种是基于声明式的,一种是基于脚本式的。
- Jenkins申明式的格式
- Jenkins脚本式的格式
Jenkins 官方推荐使用申明式的方式定义Jenkins的Pipeline。
有的时候我们需要在Pipeline给开发团队发消息或者邮件,告知当前Pipeline是谁触发的,这个时候在脚本里面应该如何获取当前触发人的信息呢?Jenkins提供了很多种方式,下面笔者简单罗列一下:
1.通过Buid User Var
此为Build user var 的官方地址: https://plugins.jenkins.io/build-user-vars-plugin/, 在Jenkins安装此插件,但是不需要重启Jenkins, 其可以获取下面的有关用户的信息:
脚本使用方式:
node {
def user=""
def userEmail=""
wrap([$class: 'BuildUser']) {
user = env.BUILD_USER_ID
userEmail = env.BUILD_USER_EMAIL
}
echo "The user name ${user }"
echo "The user email ${userEmail }"
}
2.通过Groovy 脚本
如果不想安装插件,也可以直接通过Groovy的脚本获取。
方法1
node('master') {
BUILD_TRIGGER_BY = sh ( script: "BUILD_BY=\$(curl -k --silent ${BUILD_URL}/api/xml | tr '<' '\n' | egrep '^userId>|^userName>' | sed 's/.*>//g' | sed -e '1s/\$/ \\/ /g'); if [[ -z \${BUILD_BY} ]]; then BUILD_BY=\$(curl -k --silent ${BUILD_URL}/api/xml | tr '<' '\n' | grep '^shortDescription>' | sed 's/.*user //g;s/.*by //g'); fi; echo \${BUILD_BY}", returnStdout: true ).trim()
echo "BUILD_TRIGGER_BY: ${BUILD_TRIGGER_BY}"
}
方法2
BUILD_TRIGGER_BY = "${currentBuild.getBuildCauses()[0].shortDescription} / ${currentBuild.getBuildCauses()[0].userId}"
echo "BUILD_TRIGGER_BY: ${BUILD_TRIGGER_BY}"
3.通过Shell脚本
此外也可以通过shell的curl命令调用Jenkins Rest的API获取用户信息。
BUILD_TRIGGER_BY=$(curl -k --silent ${BUILD_URL}/api/xml | tr '<' '\n' | egrep '^userId>|^userName>' | sed 's/.*>//g' | sed -e '1s/$/ \//g' | tr '\n' ' ')
echo "BUILD_TRIGGER_BY: ${BUILD_TRIGGER_BY}"
4.总结
道路千万条,笔者最喜欢的还是第一种方式,通过插件的方式。
参考文献
https://plugins.jenkins.io/build-user-vars-plugin/
https://stackoverflow.com/questions/36194316/how-to-get-the-build-user-in-jenkins-when-job-triggered-by-timer
https://www.jenkins.io/doc/book/pipeline/
https://www.jenkins.io/doc/book/pipeline/syntax/