2016-04-25 13 views
16

Es sieht so aus, als ob der GitHubPullRequestBuilder nicht mit Jenkins v2.0 Pipeline-Jobs kompatibel ist.So lösen Sie einen Jenkins 2.0-Pipeline-Job über eine Pull-Anforderung von GitHub aus

Wie konfigurieren Sie einen Pipelinejob, der von einem Pull-Anforderungsereignis mit GitHub 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 auf dem PR-Event auszulösen?

Antwort

1

Die einfachste Art und Weise Pipeline mit GitHub Pull-Anforderungen zu verwenden, ist das Skript in Ihr Repository unter dem Namen Jenkinsfile zu setzen und dann installieren Sie die GitHub Zweig Quelle Plugin. Documentation

+0

funktioniert das nur für PRs von Mitgliedern der Organisation oder auch für PRs von externen Mitwirkenden? – elopio

+0

@elopio, das Plugin hat Optionen zum aktivieren/deaktivieren der Erstellung von PRs aus dem gleichen Repository sowie von externen Repositories. Es ist nicht genau das, wonach du verlangst, aber wahrscheinlich nahe genug. –

+1

Es gibt dieses offizielle [jenkinsci/workflow-demo] (https://hub.docker.com/r/jenkinsci/workflow-demo/) Docker-Bild zum Herumspielen mit PRs-Tests und 'Jenkinsfile'. Ich habe mich gefragt, ob es möglich ist, diese netten roten und grünen Checks auf den PRs zu haben und es ist absolut möglich ([Beispiel hier] (https://github.com/jenkinsci/docker-workflow-plugin/pull/57)):) Und hier ist ein [nützlicher Beitrag über Multi-Branch-Workflows] (https://jenkins.io/blog/2015/12/03/pipeline-as-code-with-multibranch-workflows-in-jenkins/) – GabLeRoux

2

Die Strömung auf den Punkt gebracht, wie dies gehen kann:

  1. Sie Ihre Pipeline als Code erstellen und sie in einer Datei speichern genannt Jenkinsfile an der Wurzel dir Ihres Projekts. Dieser Code sollte beschreiben, wie Ihr Projekt aufgebaut wird. Hier finden Sie Beispiele: https://jenkins.io/doc/pipeline/examples/

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

  3. Jetzt, wann immer Sie eine neue PR-Filiale auf Ihrem Schritt 1 Repo öffnen, wird der Zweig ausgecheckt und wird entsprechend der Jenkinsfile gebaut Anweisungen enthalten. Sie können weitere Bedingungen für die Erstellung und den Zeitpunkt festlegen.

Hinweise:

  1. "mehrfach verzweigten Pipeline-Projekt" Beispiel Dokumentation: https://jenkins.io/doc/book/pipeline-as-code/ (nach unten scrollen zu mehrfach verzweigten Pipeline-Projekten)

  2. Beachten Sie, dass das Plugin immer eine bauen PR nach dem Lob auf der PR funktioniert nicht. Es gibt eine Diskussion, die das hier analysiert: https://github.com/jenkinsci/gitlab-plugin/issues/298 Es gibt Workarounds (auch in dieser Diskussion beschrieben), aber sie sind ziemlich chaotisch einzurichten.

12

Ich hatte ähnliches Problem. Hier ist, was für mich gearbeitet

Pre-req

  • Jenkins ver. 2+ (I wurde mit Jenkins 2,60)
  • Github (oder Githhub Unternehmen) Konto
  • Ihre Github und Jenkins muss miteinander reden können.

Auf Github

  1. erstellen Github Personal Access Token (PAT) mit entsprechenden Rechte.
  2. Für Ihre Repo, eine Webhook mit
    • URL als YourJenkinsURL/github-webhook/
    • Wähle 'Lassen Sie mich einzelne Ereignisse wählen Sie' erstellen und prüfen 'Pull-Request'
  3. hinzufügen Jenkinsfile an die Wurzel Ordner Ihres Repo. Für Testzwecke können Sie als Grund Hallo Welt Inhalt setzen wie unten
 
    pipeline { 
     agent any 
     stages { 
      stage('Test') { 
       steps { 
        echo 'Hello World ...' 
       } 
      } 
     } 
    } 

Auf Jenkins

  1. installieren GitHub-Pull-Request Builder Plugin. (Sie auch Plugin benötigen „Github“, aber das sollte in der Regel als Teil von Jenkins installiert werden ver 2+)
  2. Jenkins - Credentials
    • hinzufügen Github Personal Access Token (PAT) als ‚Geheimtext‘ Credential.
    • Fügen Sie github Benutzername-Passwort als 'Benutzername-Passwort' Anmeldeinformationen hinzu.
  3. verwalten Jenkins - System konfiguriert
    • Github - Github-Server: Dieser Teil der Github-Plugin ist. Fügen Sie einen GitHub-Server hinzu. 'API URL' Die Standardeinstellung lautet . Wenn Sie Enterprise-Github verwenden, ersetzen Sie diese durch Enterprise-Github-URL gefolgt von/API/V3. Wählen Sie für die Berechtigung die Option PAT aus. Testen Sie die Verbindung. 'Haken verwalten' ist markiert.
    • GitHub Pull Request Builder: für 'GitHub Server API URL' verwenden Sie dieselbe URL wie im Abschnitt Github Server angegeben. Lassen Sie "Shared Secret" leer. Für Anmeldeinformationen verwenden Sie die Anmeldedaten "Benutzername-Passwort". Überprüfen Sie die Anmeldeinformationen, um sicherzustellen, dass sie funktionieren. In meinen Einstellungen wurde die Option "Webhooks automatisch verwalten" aktiviert.
  4. Pipeline Job
    • Erstellen Sie eine neue Option Element ‚Pipeline‘ verwenden. Hinweis: Dies ist der Vanilla-Pipeline-Job, nicht die Multibranch-Pipeline.
    • Allgemeines Abschnitt: Prüfen 'Github Projekt' - URL Projekt: Geben Sie Ihre Github url Repo
    • Build-Trigger: Prüfen 'GitHub Anfrage Builder ziehen'
      • Für wählen Sie die Option 'GitHub API Credentials' Sie GitHub gesetzt 'Manage Jenkins - System konfigurieren' Anfrage Builder ziehen Bildschirm
      • für Admin-Liste: fügen Sie Ihren Benutzernamen
      • prüfen Verwenden github Haken für Build-Triggern
    • Pipeline:
      1. Wählen Sie "Pipeline Script von SCM". Beachten Sie, dass davon ausgegangen wird, dass der Stammordner Ihres Repos ein 'Jenkinsfile' enthält.
      2. SCM: Wählen Sie 'Git'
      3. Repositories - Geben Sie Repo-Details ein.Für Anmeldeinformationen verwenden Sie "Benutzername-Passwort" basierte Anmeldeinformationen.
      4. Klicken Sie auf Erweitert und Refspec als +refs/pull/*:refs/remotes/origin/pr/*
      5. Zweig hinzufügen - sollte ${sha1}
      6. Script-Pfad sein: Verzug geraten zu Jenkinsfile, lassen wie es ist.
      7. Leichte Kasse - Deaktivieren Sie dieses Kontroll (https://github.com/jenkinsci/ghprb-plugin/issues/507)

Das ist es. Sie sind fertig. Erstellen einen PR auf Master-Zweig des repo jetzt Ihrem Jenkins Pipeline Job

Einige Beobachtungen

  • übermitteln die Webhook Nutzlast eines PR von Github nicht die Pipeline auslösen nicht ausgelöst werden soll, sondern eine neue PR öffnen oder sogar neu - Öffnen einer geschlossenen PR auf Github, löst den Pipeline-Job aus
  • In Pipeline-Jobkonfiguration, wenn Sie "Pipelineskript" auswählen und Ihr Pipelineskript dort einfügen, wird der Job nicht ausgelöst !!!
+0

Können wir nicht dasselbe mit Multi-Branch-Pipeline tun? Weil der Zweig, mit dem ich spielen möchte, nicht der Hauptzweig ist. @Deepak Rao –

+0

'Build Trigger: Check 'GitHub Pull Request Builder'diese Option ist nicht für mich da. Das Plugin wird installiert, da diese Option in anderen Projekten vorhanden ist, die keine jenkins-Datei verwenden. Irgendwelche Gedanken? – edthethird

Verwandte Themen