wake-up-neo.com

Wie bekomme ich den BUILD_USER in Jenkins, wenn der Job vom Timer ausgelöst wird?

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 ...

9
Musaffir Lp

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  enter image description here

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.

11
Musaffir Lp

Ich verwende eine Kombination des Plugins 'Execute Shell' und 'Env Inject' wie folgt:

  1. Erstellen Sie einen Build-Schritt 'Shell ausführen', bei dem die Shell-Parameterersetzung verwendet wird, um den Standardwert zu schreiben und diesen Wert in eine Datei zu übernehmen. Beispiel in der Abbildung unten hervorgehoben.
  2. Verwenden Sie die Datei 'Env Inject', um diese Datei als zu setzende Eigenschaften zu lesen.

 Jenkins build steps to default variables

3
bishop

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}')
2
Kevin Brotcke

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.

2
Dominik Gebhart

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)'
        }
           }

}

1
ShreePrakash

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()
}
1
Andy

Installieren Sie 'Build User Vars Plugin' und verwenden Sie es wie folgt: - [Siehe https://plugins.jenkins.io/build-user-vars-plugin ]

 enter image description here

Aktivieren Sie das Kontrollkästchen Set jenkins user build variables unter Build Environment für die Konfiguration Ihres Jenkins-Jobs.

 enter image description here

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.

0
Mike Pylypyshyn

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

 enter image description here

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.

0
ptha