私は、Jenkinsジョブをトリガーしたユーザーをジョブ後のメールで表示したかったのです。これは、プラグインBuild User Vars Pluginおよびenv変数BUILD_USER
。しかし、ジョブがスケジューラーによってトリガーされた場合、この変数は初期化されません。
どうすればこれを達成できますか? EnvInject Pluginというプラグインがあり、それを使用できることを知っています...
しかし、私はこれをどのように使用して解決策を達成できるかを知りたいだけです...
これは、Jenkins Build User Vars Plugin
ビルドを開始したユーザーを含む一連の環境変数を公開します。 BUILD_USER_ID、EMAILなどの環境変数を提供します。
ログインしたユーザーがビルドを手動でトリガーすると、そのユーザーのユーザーIDはBUILD_USER_ID
環境変数。
ただし、ビルドがJenkinsタイマー/スケジューラーによって自動的にトリガーされる場合、この環境変数は置換/初期化されません。
これは、Conditional Build Step Plugin/Run Condition Pluginを使用してジョブに条件を注入することで解決できます。各ジョブに、タイマーまたはスケジューラーによってビルドが発生またはトリガーされたときにのみ変数BUILD_USER_IDを初期化する条件を追加できます、正規表現を使用して条件を設定します。
ビルドユーザー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}')
'Build User Vars Plugin'をインストールし、以下のように使用します。-[ https://plugins.jenkins.io/build-user-vars-plugin を参照
Jenkinsジョブの設定のSet jenkins user build variables
の下にあるBuild Environment
チェックボックスを必ずチェックしてください。
email-extプラグイン からのトークン$ BUILD_CAUSEはあなたが探しているものです。
?の直後にAttach build log電子メールコンテンツの構成のコンボボックス。
いくつかのトークンはプラグインによって追加されますが、これはデフォルトで使用可能になっているはずです。
編集:ビショップがコメントで指摘したように、 EnvInjectプラグイン を使用する場合、$ BUILD_CAUSEトークンは異なる動作をするように変更されます。
Slack/flockグループの1つにビルドイニシエーター情報をトリガーしたいので、次の方法でDeclarativeな方法で記述してビルドイニシエーターの電子メールと名前を取得しました。
私はここで印刷していますが、環境変数に保存したり、自分の都合に応じてファイルパスを指定して1つのファイルに書き込むことができます。
pipeline {
environment {
BRANCH_NAME = "${env.BRANCH_NAME}"
}
agent any
stages{
stage('Build-Initiator-Info'){
sh 'echo $(git show -s --pretty=%ae)'
sh 'echo $(git show -s --pretty=%an)'
}
}
}
これは、Jenkinsパイプラインジョブで[今すぐビルド]をクリックしたユーザー名を取得します。
@NonCPS
def getBuildUser() {
return currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()
}
似ているが、実際には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
}
この構成では、 here で説明されているクラスを使用できます。それらは、使用可能な値を持つマップを返します。
ムサフィールLpの答え について詳しく説明します。 Conditional Build Stepプラグイン はBuild Causeを直接サポートするようになりました- Run Condition Plugin が必要ですまた。
タイマーによってビルドが開始されたことを検出したい場合は、Run?値のBuild Cause、Build Causewith:TimerTrigger
これは、正規表現を使用するよりも少し単純で堅牢です。検出できる他のトリガーもあります。たとえば、ビルドがソース管理のコミットの結果であった場合、SCMTriggerを選択できます。