Jenkins Pipeline und Stash Pull Request Builder funktionieren nicht beim Erstellen / Aktualisieren von PR

7

Nachfolgend finden Sie die Anforderungen, die für die Verwendung der Jenkins-Pipeline erforderlich sind, und ich bin eine neue Biene in der Jenkins-Pipeline.

  • Nach Abschluss der Entwicklungsarbeiten und dem Übertragen seiner Änderungen an Bitbucket erstellt der Benutzer eine Pull-Anforderung.
  • Um eine Pull-Anfrage zu genehmigen, benötigen wir mindestens einen erfolgreichen Jenkins-Build. Dabei möchten wir nur das Build-Ergebnis des für die Pull-Anfrage eingecheckten Codes erhalten.
  • Wenn eine Pull-Anfrage erstellt / aktualisiert wird, werden Jenkins automatisch für eine echte kontinuierliche Integration ausgelöst.
  • Das Build-Ergebnis wird an Bitbucket zurückgemeldet.

Verwendeter Stash Pull Request Builder und Stash Notifier für den obigen Prozess, der für das normale Freestyle-Projekt funktioniert.

Wir müssen die ähnliche Funktionalität mithilfe der Jenkins-Pipeline migrieren. Daher haben wir den Jenkins-Job wie folgt erstellt.

Geben Sie hier die Bildbeschreibung ein

Das Pipeline-Skript zum Auschecken des PR-Zweigs und zum Auslösen des Builds lautet wie folgt

node {
    stage('Checkout') {         
        checkout(
        [
            $class: 'GitSCM',
            extensions: [               
                [$class: 'CleanCheckout'],              
            ],
            branches: [
                [name: '']
            ], 
            userRemoteConfigs: 
            [[
                credentialsId: 'id', 
                url: 'repourl.git'
                refspec: ('+refs/pull-requests/*/from:refs/remotes/origin/pr/*/from'), 
                branch: ('origin/pr/${pullRequestId}/from')
            ]]
        ])
    }

    stage('Build') {    
        sh 'make'
    }
    stage('notify') {
    step([$class: 'StashNotifier'])
        try {
            // Do stuff
            currentBuild.result = 'SUCCESS'     
        } catch(err) {
            currentBuild.result = 'FAILED'
        }
    step([$class: 'StashNotifier'])
   }

}

Obwohl ich die obige Konfiguration beim Erstellen / Aktualisieren der PR vorgenommen habe, wird der Build in Jenkins nicht automatisch ausgelöst. Ich denke, die Benachrichtigung von Stash an Jenkins ist nicht erfolgt, weil wir "origin/${pullRequestId}/from"im Freestyle-Projekt angeben . Aber ich habe diese Option nicht im Pipeline-Job anzugeben.

Versuchte einige Alternativen wie unten.

Anstelle von Stash Pull Request Builder habe ich nur mit "Poll SCM" -Projekt versucht und einen Cron-Job angegeben, der als ausgelöst werden soll "H/2 * * * *". Bei Commits wird der Job bei Jenkins ausgelöst. Dies bedeutet, dass bei jedem Commit der Jenkins-Job ausgelöst wird. Jenkins sollte den Job jedoch auslösen, wenn PR erstellt / aktualisiert wird.

Mir fehlt hier sicherlich etwas, das für Jenkins Pipeline grundlegend und neu sein könnte.

Irgendwelche Hinweise zum Erreichen des gewünschten Verhaltens?

user1876040
quelle
bearbeitet die Frage basierend auf den Ergebnissen
user1876040
Grundlegende Dinge zuerst: Haben Sie Bitbucket-IPs auf die Whitelist gesetzt? Können Sie auch Bitbucket-Webhooks überprüfen und uns mitteilen, ob sie wie erwartet funktionieren?
Munai Das Udasin
Hallo, @Munai Das Udasin, danke für die Antwort. Nachfolgend sind meine Beobachtungen aufgeführt: Während wir im internen Netzwerk arbeiten, ist Bitbucket IP eine der IPs auf der Whitelist. Das ist also kein Problem. Außerdem hat unsere Analyse zu Webhooks weniger Nachteile: a) Wenn PR aktualisiert wird, wird der Job nicht bei Jenkins ausgelöst. B) Der Job wird ausgelöst, wenn PR abgelehnt wird, da wir dies nicht gemäß Anwendungsfall wünschen.
user1876040

Antworten:

2

In groovigen Skripten müssen Sie Umgebungsvariablen anders referenzieren als in bash.

Wahrscheinlich verursacht diese Leitung Probleme:

branch: ('origin/pr/${pullRequestId}/from')

Versuchen Sie es mit:

branch: ('origin/pr/' + env.pullRequestId + '/from')
jgebal
quelle
2

Um die obige Antwort zu erweitern , verwenden Sie:

branch: "origin/pr/${pullRequestId}/from"

Weil in Groovy die String-Interpolation nicht für einfache Strings durchgeführt wird - dh Strings in einfachen Anführungszeichen. Weitere Informationen hierzu finden Sie unter http://groovy-lang.org/syntax.html#_string_interpolation .

Lars Immisch
quelle
Zu Ihrer Information, es gibt oben keine Antwort, StackExchange-Sites sind keine Foren und die Reihenfolge der Antwort ist nicht immer nach Zeit, wenn Sie auf eine andere Antwort verweisen, einen Link dazu erstellen oder es ist möglicherweise schwierig zu wissen, auf welche Antwort Sie sich später beziehen.
Tensibai
0

War das gleiche Problem, um das gewünschte Ergebnis zu erzielen, habe ich zwei Jobs erstellt: PR Trigger (Freestyle Project) und PR Builder (Pipeline).

Zum PR-Trigger habe ich das Git-Plugin, das Stash Pull Request Builder-Plugin (dieselbe Konfiguration hat für die Pipeline nicht funktioniert) und das parametrisierte Trigger-Plugin hinzugefügt (um die Pull-Anforderungs-ID an die PR Builder-Pipeline zu übergeben; Project to Build - PR Builder).

Geben Sie hier die Bildbeschreibung ein

Zu PR Builder habe ich das Parametrisierte Builds Plugin hinzugefügt.

Geben Sie hier die Bildbeschreibung ein

MariaMironets
quelle