[3] Jenkins 系列:如何获取出发Jenkins Job的用户信息?
Posted 大象无形,大音希声
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[3] Jenkins 系列:如何获取出发Jenkins Job的用户信息?相关的知识,希望对你有一定的参考价值。
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/
以上是关于[3] Jenkins 系列:如何获取出发Jenkins Job的用户信息?的主要内容,如果未能解决你的问题,请参考以下文章
[3] Jenkins 系列:如何获取出发Jenkins Job的用户信息?
Jenkins入门系列之——02第二章 Jenkins安装与配置