webentwicklung-frage-antwort-db.com.de

So lösen Sie einen Jenkins 2.0-Pipeline-Job aus einer GitHub-Pull-Anforderung aus

Der GitHubPullRequestBuilder scheint nicht mit Jenkins v2.0-Pipeline-Jobs kompatibel zu sein. 

Wie kann ein Pipeline-Job so konfiguriert werden, dass er von einem GitHub-Pull-Request-Ereignis ausgelöst wird?
.__ Die Dokumentation zu diesem Thema ist spärlich und ich kann keine Beispiele dafür finden. Oder ist es besser, einen Web-Hook in GitHub zu erstellen, um den Pipeline-Job für das PR-Ereignis auszulösen? 

22
user6253266

Die einfachste Möglichkeit, Pipeline mit GitHub-Pull-Anforderungen zu verwenden, besteht darin, das Skript unter dem Namen Jenkinsfile in Ihr Repository zu stellen und dann das GitHub Branch Source -Plugin zu installieren. Dokumentation

2
Jesse Glick

Ich hatte ein ähnliches Problem. Folgendes hat für mich funktioniert 

Vorbedingung

  • Jenkins ver. 2+ (Ich habe Jenkins 2.60 verwendet) 
  • Github (oder Githhub Unternehmenskonto) 
  • Dein Github und Jenkins müssen in der Lage sein, miteinander zu reden.

Auf Github

  1. erstellen Sie ein github Personal Access Token (PAT) mit den entsprechenden Rechten.
  2. Erstellen Sie für Ihr Repo einen Webhook mit
    • URL als YourJenkinsURL/github-webhook/
    • Wählen Sie "Ich möchte einzelne Ereignisse auswählen" und aktivieren Sie "Pull-Anfrage". 
  3. Fügen Sie dem Stammordner Ihres Repos ein Jenkinsfile hinzu. Zu Testzwecken können Sie den Inhalt als grundlegende Hallo-Welt wie nachstehend beschreiben
 Pipeline {
 Agent beliebig 
 Stufen {
 Stufe ('Test') {
 Schritte {
 echo 'Hello World ...'
 } 
 } 
 } 
 } 

Auf Jenkins

  1. Installieren Sie das Plugin GitHub Pull Request Builder. (Sie benötigen auch das „Github“ -Plugin, das normalerweise als Teil von Jenkins ver 2+ installiert werden sollte.)
  2. Jenkins - Credentials
    • Fügen Sie das github Personal Access Token (PAT) als "geheimer" Text hinzu.
    • Fügen Sie github Benutzername-Kennwort als "Benutzername-Kennwort" -Anmeldeinformationen hinzu. 
  3. Jenkins verwalten - System konfigurieren
    • Github - Github-Server: Dies ist Teil des Github-Plugins. Fügen Sie einen Github-Server hinzu. 'API URL' Es wird standardmäßig auf https://api.github.com gesetzt. Wenn Sie Enterprise-Github verwenden, ersetzen Sie es mit Enterprise-Github-URL, gefolgt von/api/v3. Wählen Sie als Berechtigungsnachweis die Option PAT aus. Testen Sie die Verbindung. "Hooks verwalten" wird markiert. 
    • GitHub Pull Request Builder: Verwenden Sie für "GitHub Server API URL" die im Abschnitt "Github Server" angegebene URL. Lassen Sie "Shared Secret" leer. Für Anmeldeinformationen verwenden Sie die Anmeldeinformationen "Benutzername-Kennwort". Testen Sie die Berechtigungsnachweise, um sicherzustellen, dass sie ordnungsgemäß funktionieren. In meinen Einstellungen wurde die Option "Webhooks automatisch verwalten" aktiviert. 
  4. Pipeline-Job
    • Erstellen Sie ein neues Element mit der Option "Pipeline". Hinweis: Dies ist der Vanilla Pipeline-Job, keine Multibranch-Pipeline.
    • Allgemeiner Abschnitt: Aktivieren Sie "Github-Projekt" - Projekt-URL: Geben Sie Ihre Github-Repo-URL ein 
    • Build-Auslöser: Aktivieren Sie "GitHub Pull Request Builder"
      • Wählen Sie für "GitHub API-Berechtigungsnachweise" die Option aus, die Sie für GitHub Pull Request Builder im Bildschirm "Jenkins verwalten - System konfigurieren" festgelegt haben 
      • Für die Admin-Liste: Geben Sie Ihren Benutzernamen ein 
      • Aktivieren Sie das Kontrollkästchen Github-Hooks für Build-Trigger verwenden 
    • Pipeline:
      1. Wählen Sie "Pipeline Script from SCM" aus. Beachten Sie, dass davon ausgegangen wird, dass der Stammordner Ihres Repos eine Jenkinsfile enthält. 
      2. SCM: Wählen Sie "Git" aus. 
      3. Repositories - Geben Sie das Repo-Detail ein. Verwenden Sie für Anmeldeinformationen die auf "Benutzername-Kennwort" basierenden Anmeldeinformationen. 
      4. Klicken Sie auf Erweitert und fügen Sie refspec als +refs/pull/*:refs/remotes/Origin/pr/* hinzu.
      5. Branch - sollte ${sha1} sein
      6. Skriptpfad: Standardmäßig Jenkinsfile, unverändert lassen. 
      7. Lightweight Checkout - Deaktivieren Sie dies ( https://github.com/jenkinsci/ghprb-plugin/issues/507 )

Das ist es. Sie sind alle eingestellt. Das Erstellen eines PR auf dem Master-Zweig Ihres Repos sollte jetzt Ihren Jenkins Pipeline-Job auslösen

Einige Beobachtungen

  • Durch das erneute Übermitteln der Webhook-Nutzdaten eines PR von github wird die Pipeline nicht ausgelöst. Das Öffnen eines neuen PR oder das erneute Öffnen eines geschlossenen PR auf github löst den Pipeline-Job aus
  • Wenn Sie in der Pipeline-Jobkonfiguration "Pipeline-Skript" auswählen und Ihr Pipeline-Skript dort einfügen, wird der Auftrag nicht ausgelöst !!!
29
Deepak Rao

Der Fluss in einer Nussschale kann so gehen:

  1. Sie erstellen Ihre Pipeline als Code und speichern sie in einer Datei mit dem Namen Jenkinsfile im Stammverzeichnis Ihres Projekts. Dieser Code sollte beschreiben, wie Ihr Projekt erstellt wird. Hier finden Sie Beispiele: https://jenkins.io/doc/pipeline/examples/

  2. Dann sollten Sie in Ihren Jenkins ein neues Element "Multibranch Pipeline Project" erstellen. Sie sollten dies einrichten, um Ihr Repo von Schritt 1 zu scannen. 

  3. Wenn Sie nun einen neuen PR-Zweig für Ihr Repo der Stufe 1 öffnen, wird der Zweig ausgecheckt und gemäß den mitgelieferten Jenkinsfile-Anweisungen aufgebaut. Sie können weitere Bedingungen festlegen, was wann erstellt wird und wann Sie möchten.

Anmerkungen:

  1. Beispieldokumentation "Multibranch Pipeline Project": https://jenkins.io/doc/book/pipeline-as-code/ (scrollen Sie zu Multibranch Pipeline-Projekten herunter)

  2. Denken Sie daran, dass es nicht funktioniert, wenn Sie das Plugin dazu bringen, eine PR zu erstellen, nachdem Sie die PR empfohlen haben. Es gibt eine Diskussion, die dies hier analysiert: https://github.com/jenkinsci/gitlab-plugin/issues/298 Es gibt Problemumgehungen (in dieser Diskussion auch beschrieben), deren Einrichtung jedoch recht unordentlich ist.

1
user3837712

Befolgen Sie die nachstehenden Schritte, um Jenkins-Job automatisch bei Pull-Anforderung auszulösen, die auf GitHub generiert wurde

  1. Erstellen Sie einen Web-Hook auf GitHub, d. H. Http: /// generic- webhook-trigger/invoke
  2. Inhaltstyp: application/json
  3. Wählen Sie Pull Request als Ereignis Jetzt ist der github-Konfigurationsteil fertig.

Jenkins Job Konfiguration

  1. Laden Sie den generischen Webhook-Trigger in Jenkins herunter

  2. Git Hub Konfiguration auf Jenkins

Git Hub-Konfiguration

7.Wählen Sie Generic Webhook Trigger on Jenkins 8 . Generic Webhook Trigger Configuration on Jenkins und folgen Sie Schritt 9

9.Nach dem Ausführen von Schritt 7 wird der Jenkins-Job bei PullRequest ausgelöst. 10.Schritt 8 ist erforderlich, um Informationen aus der Pull-Anfrage abzurufen. Payload 11 . Verzweigungskonfiguration im generischen Webhook-Trigger, um Verzweigungsdetails aus der Pull-Anfrage abzurufen.

Vielen Dank

0
Amarendra Kumar