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.
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?
Antworten:
In groovigen Skripten müssen Sie Umgebungsvariablen anders referenzieren als in bash.
Wahrscheinlich verursacht diese Leitung Probleme:
Versuchen Sie es mit:
quelle
Um die obige Antwort zu erweitern , verwenden Sie:
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 .
quelle
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).
Zu PR Builder habe ich das Parametrisierte Builds Plugin hinzugefügt.
quelle