[3] Jenkins 系列:如何获取出发Jenkins Job的用户信息?
创始人
2024-05-05 23:29:56
0

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_IDuserEmail = 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/

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...