wake-up-neo.net

Bekommen Sie den Namen der Zweigstelle in Jenkins Jenkinsfile

Ich habe eine Jenkins-Pipeline erstellt und zieht das Pipeline-Skript aus scm.
Ich habe den Branch-Spezifizierer auf 'all' gesetzt, damit er auf jeder Änderung an einem Zweig aufbaut. 

Wie kann ich aus der Jenkins-Datei auf den Zweignamen zugreifen, der diesen Build verursacht? 

Alles, was ich ausprobiert habe, ist null 

sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()

was immer master ist.

27
Alex Yurkowski

Wenn Sie eine Jenkins-Datei für Ihre Pipeline haben, prüfen Sie, ob Sie zur Ausführungszeit Ihren Zweignamen in Ihren Umgebungsvariablen sehen.

Sie können sie ausdrucken mit:

pipeline {
    agent any

    environment {
        DISABLE_AUTH = 'true'
        DB_ENGINE    = 'sqlite'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
            }
        }
    }
}

PR 91 zeigt jedoch, dass der Zweigname nur in bestimmten Pipeline-Konfigurationen festgelegt ist:

13
VonC

Verwenden Sie eine Multibank-Pipeline. Keine Pipeline

In meinem Skript ..

stage('Build') {
    node {
        echo 'Pulling...' + env.BRANCH_NAME
        checkout scm

    }
}

Erträge ...

Pulling...master
23
James

Ein Kollege bat mich, scm.branches[0].name zu verwenden, und es funktionierte. Ich habe es in meiner Jenkinsfile in eine Funktion verpackt:

def getGitBranchName() {
    return scm.branches[0].name
}
6
Attila123

Durch den Wechsel zu einer Multibranchen-Pipeline konnte ich auf den Filialnamen zugreifen. Eine reguläre Pipeline wurde nicht empfohlen.

5
Alex Yurkowski

Für mich funktionierte dies: (mit Jenkins 2.150, mit einfachem Pipeline-Typ - nicht mit mehreren Niederlassungen, meinem Branchenspezifizierer: 'Origin/Branches **')

echo 'Pulling... ' + env.GIT_BRANCH

Ausgabe:

Pulling... Origin/myBranch

dabei ist myBranch der Name des Funktionszweigs

0
alex

Das Abrufen des Namens von scm.branches reicht nicht aus, wenn Sie einen Build-Parameter als Verzweigungsspezifizierer verwendet haben, z. ${BRANCH}. Sie müssen diese Zeichenfolge in einen echten Namen erweitern:

scm.branches.first().getExpandedName(env.getEnvironment())

Beachten Sie, dass getEnvironment() ein expliziter Getter sein muss, ansonsten env sucht nach einer Umgebungsvariablen namens environment .

Vergessen Sie nicht, dass Sie diese Methoden genehmigen müssen, um sie über die Sandbox zugänglich zu machen.

0
0neel