Mus*_* Lp 20 jenkins jenkins-plugins jenkins-pipeline
我想在发布职位电子邮件中显示触发Jenkins工作的用户.这可以通过使用插件Build User Vars Plugin和env变量来实现BUILD_USER.但是,当调度程序触发作业时,此变量不会被初始化.
我们怎样才能做到这一点?我知道我们有一个名为EnvInject插件的插件,可以使用...
但我只是想知道我们如何使用它并实现解决方案......
Mus*_* Lp 15
这在Jenkins中非常有可能Jenkins有一个名为-Build User Vars Plugin的插件,它公开了一组描述启动构建的用户的环境变量.它给出了env变量,如BUILD_USER_ID,EMAIL等.
当登录用户手动触发构建并为BUILD_USER_ID提供登录的用户名时,这将很有效
当Jenkins定时器/调度程序自动触发构建时,这个env变量怎么不会被替换/初始化
这可以通过使用条件构建步骤插件/运行条件插件向作业注入一个条件来解决,其中我们可以添加一个条件来初始化变量BUILD_USER_ID只有当构建是由Timer或调度程序引起或触发时,通过使用正则表达式设置条件..
Kev*_*cke 14
构建用户vars插件对我不起作用,因此我进行了快速而又简单的修改:
BUILD_CAUSE_JSON=$(curl --silent ${BUILD_URL}/api/json | tr "{}" "\n" | grep "Started by")
BUILD_USER_ID=$(echo $BUILD_CAUSE_JSON | tr "," "\n" | grep "userId" | awk -F\" '{print $4}')
BUILD_USER_NAME=$(echo $BUILD_CAUSE_JSON | tr "," "\n" | grep "userName" | awk -F\" '{print $4}')
Run Code Online (Sandbox Code Playgroud)
M.S*_*run 14
简单的解决方案(无插件)!
方法一:通过Shell
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}"
Run Code Online (Sandbox Code Playgroud)
方法 2:通过 Groovy
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}"
}
Run Code Online (Sandbox Code Playgroud)
方法 3:通过 Groovy
BUILD_TRIGGER_BY = "${currentBuild.getBuildCauses()[0].shortDescription} / ${currentBuild.getBuildCauses()[0].userId}"
echo "BUILD_TRIGGER_BY: ${BUILD_TRIGGER_BY}"
Run Code Online (Sandbox Code Playgroud)
输出:
Started by user Admin / user@example.com
Run Code Online (Sandbox Code Playgroud)
注意:输出将是用户 ID 和用户名
小智 7
无插件 ->
def cause = currentBuild.getBuildCauses('hudson.model.Cause$UserIdCause')
echo "userName: ${cause.userName}"
Run Code Online (Sandbox Code Playgroud)
小智 6
我发现类似但确实在 Jenkins 2.1.x 上工作,并且很容易让我理解。它无需任何插件即可工作。
if (currentBuild.getBuildCauses('hudson.model.Cause$UserIdCause')['userId']){
// Will be run only if someone user triggers build
// Because in other cases this contructions returns null
}
Run Code Online (Sandbox Code Playgroud)
您可以在此构造中使用此处描述的任何类。它们将返回具有可用值的映射。
安装“ Build User Vars插件”并按以下方式使用:-[请参阅https://plugins.jenkins.io/build-user-vars-plugin ]
确保Set jenkins user build variables选中Build Environment您的Jenkins作业的配置下面的复选框。
小智 5
这将获取在 Jenkins 管道作业中单击“立即构建”的用户名。
@NonCPS
def getBuildUser() {
return currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()
}
Run Code Online (Sandbox Code Playgroud)