Ich wollte den Benutzer anzeigen, der einen Job von Jenkins in der Post-Job-E-Mail ausgelöst hat. Dies ist möglich, indem Sie das Plugin Build User Vars Plugin und die env-Variable BUILD_USER
..__ verwenden. Diese Variable wird jedoch nicht initialisiert, wenn der Job von einem Scheduler ausgelöst wird.
Wie können wir das erreichen? Ich weiß, dass wir ein Plugin namens EnvInject Plugin haben, das verwendet werden kann ...
Aber ich möchte nur wissen, wie wir das nutzen und die Lösung erreichen können ...
Dies ist in Jenkins sehr möglich Es gibt ein Plugin mit dem Namen -Build User Vars Plugin für Jenkins, das eine Reihe von Umgebungsvariablen verfügbar macht, die den Benutzer beschreiben, der den Build gestartet hat ..
Dies funktioniert gut, wenn der Build manuell von einem angemeldeten Benutzer ausgelöst wird und dieser angemeldete Benutzername für BUILD_USER_ID angegeben wird
Wie auch immer diese env-Variable ersetzt/initialisiert wird, wenn der Build automatisch durch den Timer/Scheduler von Jenkins ausgelöst wird
Beigefügt ein Screenshot für Details
Sie können dieses Problem beheben, indem Sie eine Bedingung in den Job einfügen, indem Sie das bedingte Build-Schritt-Plugin/Bedingung-Plugin ausführen. In jedem Job können Sie eine Bedingung hinzufügen, um die Variable BUILD_USER_ID nur zu initialisieren, wenn der Build vom Timer oder vom Scheduler ausgelöst oder ausgelöst wird , indem Sie eine Bedingung mit dem regulären Ausdruck festlegen.
Ich verwende eine Kombination des Plugins 'Execute Shell' und 'Env Inject' wie folgt:
Das Build-User-Vars-Plugin hat für mich nicht funktioniert, also habe ich einen schnellen und schmutzigen Hack gemacht:
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}')
Das Token $ BUILD_CAUSE vom email-ext plugin ist das, wonach Sie suchen.
Sie können die vollständige Inhalts-Tokenreferenz anzeigen, wenn Sie auf die Schaltfläche ? gleich nach dem Attach build log Kombinationsfeld bei der E-Mail-Inhaltskonfiguration.
Einige Token werden von Plugins hinzugefügt, diese sollte jedoch standardmäßig verfügbar sein.
Bearbeiten: Wie Bischof in den Kommentaren darauf hinweist, wird das $ BUILD_CAUSE-Token bei Verwendung des EnvInject-Plugins so geändert, dass es sich anders verhält.
Ich wollte Build-Initiator-Info für eine meiner Slack/Flock-Gruppe auslösen, daher habe ich folgende Methode verwendet, um Build-Initiator-E-Mail und -Namen durch Deklarieren zu erhalten.
Ich drucke hier nur, Sie können in einer Umgebungsvariablen speichern oder in eine Datei schreiben und dabei den Dateipfad nach Ihren eigenen Wünschen angeben.
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)'
}
}
}
Dies ruft den Benutzernamen ab, der in einem Jenkins-Pipeline-Job auf "Jetzt erstellen" geklickt hat.
@NonCPS
def getBuildUser() {
return currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()
}
Installieren Sie 'Build User Vars Plugin' und verwenden Sie es wie folgt: - [Siehe https://plugins.jenkins.io/build-user-vars-plugin ]
Aktivieren Sie das Kontrollkästchen Set jenkins user build variables
unter Build Environment
für die Konfiguration Ihres Jenkins-Jobs.
Ich fand es ähnlich, arbeitete aber wirklich an Jenkins 2.1.x und für mein Verständnis einfach. Und es funktioniert ohne Plugins.
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
}
Sie können in dieser Konstruktion alle beschriebenen Klassen verwenden hier . Es werden Karten mit verwendbaren Werten zurückgegeben.
Um nur auf die Antwort von Musaffir Lp einzugehen . Das Conditional Build Step Plugin unterstützt jetzt direkt Build Cause - es benötigt auch das Run Condition Plugin .
Wenn Sie feststellen wollten, wann der Build mit einem Timer gestartet wurde, können Sie ein Run auswählen. Wert von Build Cause, mit Build Cause von: TimerTrigger
Dies ist etwas einfacher und robuster als die Verwendung eines regulären Ausdrucks. Es gibt auch andere Auslöser, die Sie erkennen können. Wenn beispielsweise der Build auf ein Commit von Source Control Management zurückzuführen ist, können Sie Folgendes auswählen: SCMTrigger.