Zeigt den aktuellen Status von Jenkins an, der auf GitHub Repo basiert

182

Gibt es eine Möglichkeit, den Jenkins-Build-Status auf GitHub Readme.md meines Projekts anzuzeigen?

Ich verwende Jenkins, um kontinuierliche Integrations-Builds auszuführen. Nach jedem Commit wird sichergestellt, dass alles kompiliert sowie Unit- und Integrationstests ausgeführt werden, bevor schließlich Dokumentations- und Release-Bundles erstellt werden.

Es besteht immer noch die Gefahr, dass versehentlich etwas begangen wird, das den Build zerstört. Für Benutzer, die die GitHub-Projektseite besuchen, ist es gut zu wissen, dass sich der aktuelle Master in diesem Status befindet.

Jasper Blues
quelle
9
Warum wurde dies abgelehnt? Gibt es etwas Offensichtliches in der Jenkins-Bedienungsanleitung, das ich verpasst habe? Ich habe vorher googelt und konnte nichts finden.
Jasper Blues
1
Der Travis Build Server kann so etwas tun, aber ich verwende Jenkins unter Osx. Hier ist die Art von Dingen, nach denen ich suche: github.com/CocoaPods/CocoaPods
Jasper Blues
2
Der Link zu der ähnlichen Frage empfiehlt Travis, der derzeit iOS und OSX nicht unterstützt, sodass die Frage nicht beantwortet wird.
Jasper Blues
4
Dies ist kein Duplikat .. Travis! = Jenkins
Banjocat

Antworten:

166

Ok, hier ist, wie Sie Jenkins so einrichten können, dass GitHub-Build-Status festgelegt werden. Dies setzt voraus, dass Sie Jenkins bereits mit dem GitHub-Plugin haben, das so konfiguriert ist, dass es bei jedem Push Builds ausführt.

  1. Gehen Sie zu GitHub, melden Sie sich an, gehen Sie zu Einstellungen , Persönliche Zugriffstoken und klicken Sie auf Neues Token generieren .

    Screenshot der GitHub-Einstellungen

  2. Überprüfen Sie den Repo: Status (ich bin nicht sicher, ob dies notwendig ist, aber ich habe es getan und es hat bei mir funktioniert).

    Screenshot der GitHub-Token-Generierung

  3. Generieren Sie das Token, kopieren Sie es.

  4. Stellen Sie sicher, dass der GitHub-Benutzer, den Sie verwenden möchten, ein Repository-Mitarbeiter (für private Repos) oder Mitglied eines Teams mit Push- und Pull-Zugriff (für Organisations-Repos) auf die Repositorys ist, die Sie erstellen möchten.

  5. Gehen Sie zu Ihrem Jenkins-Server und melden Sie sich an.

  6. Jenkins verwaltenSystem konfigurieren
  7. Wählen Sie unter GitHub Web Hook die Option Lass Jenkins Hook-URLs automatisch verwalten und geben Sie dann Ihren GitHub- Benutzernamen und das OAuth-Token an, das Sie in Schritt 3 erhalten haben.

    Screenshot der globalen Einstellungen von Jenkins

  8. Stellen Sie sicher, dass es mit der Schaltfläche Test Credential funktioniert . Speichern Sie die Einstellungen.

  9. Suchen Sie den Jenkins-Job und fügen Sie den Build-Status für GitHub-Commit zu den Schritten nach dem Build hinzu

    Screenshot der Jenkins-Jobkonfiguration

Das ist es. Führen Sie nun einen Testaufbau durch und gehen Sie zum GitHub-Repository, um zu sehen, ob es funktioniert hat. Klicken Sie auf der Haupt-Repository-Seite auf Zweige , um den Build-Status anzuzeigen.

sceenshot der Hauptseite, auf der Sie auf "Zweige" klicken

Sie sollten grüne Häkchen sehen:

Screenshot von GitHub-Zweigen mit Build-Status

Marius Gedminas
quelle
GitHub hat seinen Autorisierungsworkflow jetzt aktualisiert. Benutzer geben nicht mehr an, was zugelassen werden soll. Stattdessen müssen Anwendungen anfordern, was sie während der Autorisierung benötigen, und der Benutzer muss die angeforderten Berechtigungen genehmigen.
Ian Vaughan
6
Dies scheint nicht mit Jenkins> 1.609 und Github Plugin v 1.13.3 zu funktionieren - Ich kann die Option "Jenkins automatisch Hook-URLs verwalten lassen" nicht finden
Ende
2
Ich stimme @pyeleven zu. Ich verwende Jenkins LTS 1.625.3 mit Github Plugin 1.16.0 und Github API Plugin 1.71. Diese Option wird nicht angezeigt. Eher sehe ich ein Dropdown-Menü für Anmeldeinformationen, aber es werden keine Anmeldeinformationen aufgelistet (obwohl ich Anmeldeinformationen eingerichtet habe). Diese Anmeldeinformationen werden angezeigt, wenn Sie zu Erweitert-> Zusätzliche Github-Aktionen verwalten -> Anmeldung und Kennwort in Github-Token konvertieren gehen.
Shehzan
4
Dies scheint veraltet zu sein; Die Post-Build-Aktion, die in dieser Antwort erwähnt wird, ist jetzt als veraltet markiert und es gibt eine zweite
Daenyth
1
Jetzt wurden die Schrittparameter nach dem Erstellen geändert. @ Alex hat die richtige Antwort.
Bibek Mantree
50

In der Zwischenzeit hat sich die Benutzeroberfläche von Jenkins und GitHub etwas geändert, und ich habe eine Weile gebraucht, um herauszufinden, wie Jenkins jetzt richtig konfiguriert werden kann. Die Erklärung hier basiert auf Jenkins Version 2.121.1.

Ich gehe auch davon aus, dass Sie Ihren Jenkins-Job bereits so konfiguriert haben, dass er durch einen Webhook oder durch Abfragen ausgelöst wird. Das sind die Schritte, die ich unternommen habe, um es zum Laufen zu bringen:

  1. Github konfigurieren: Erstellen Sie ein persönliches Zugriffstoken mit OAuth Scope repo:status
  2. Konfigurieren Sie Jenkins: Configure Systemund fügen Sie das OAuth-Geheimnis als GitHub-Server hinzu. Verwenden Sie es Secret Textals Authentifizierungsmethode, um das OAuth-Geheimnis dort abzulegen.
  3. Konfigurieren Sie Ihren Jenkins-Job: Set GitHub commit statusAls Post-Build-Aktion hinzufügen . Setzen Sie das Statusergebnis auf One of the default messages and statuses.
  4. Überprüfen Sie Ihr Ergebnis auf GitHub: Überprüfen Sie, ob Sie den Build-Status und die Build-Ausführungsdauer für Ihr GitHub-Commit erhalten.

Konfigurieren Sie Github

Erstellen Sie ein persönliches Zugriffstoken


Geben Sie hier die Bildbeschreibung ein


Geben Sie hier die Bildbeschreibung ein


Geben Sie hier die Bildbeschreibung ein


Konfigurieren Sie Jenkins

Geben Sie hier die Bildbeschreibung ein


Geben Sie hier die Bildbeschreibung ein


Geben Sie hier die Bildbeschreibung ein


Geben Sie hier die Bildbeschreibung ein


Geben Sie hier die Bildbeschreibung ein


Konfigurieren Sie Jenkins Job

Geben Sie hier die Bildbeschreibung ein


Geben Sie hier die Bildbeschreibung ein


Geben Sie hier die Bildbeschreibung ein


Ergebnis

Sie sehen nun den Status Ihrer Commits und Filialen:

Geben Sie hier die Bildbeschreibung ein

Alex
quelle
2
Wow hat endlich eine Lösung gefunden, vielen Dank! Dieser "geheime Text" hat mich verwirrt.
head01
Jenkins scheint den Status zu verbessern, aber mein privates Repo greift sie nicht auf. Irgendwelche Vorschläge?
Patrick Michaelsen
Update: Mein Problem bezog sich auf die Privatsphäre meines Repos. Ich muss ein Problem mit der Einrichtung meiner Anmeldeinformationen haben.
Patrick Michaelsen
Update: Letztendlich habe ich festgestellt, dass dies nur funktioniert, wenn es durch einen tatsächlichen Git-Push ausgelöst wurde. Wenn Sie den Build selbst ausführen, wird die Statusaktualisierung nicht korrekt ausgelöst.
Patrick Michaelsen
1
Das Manage HooksKästchen ist hervorgehoben, aber in den obigen Bildern nicht angekreuzt. Bedeutet das, dass es beim Speichern deaktiviert sein sollte?
Perplexabot
37

Was ich getan habe, ist ganz einfach:

  1. Installieren Sie das Hudson Post Task Plugin
  2. Erstellen Sie hier ein persönliches Zugriffstoken: https://github.com/settings/tokens
  3. Fügen Sie ein Post-Task-Plugin hinzu, das immer zum Erfolg führt

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"success\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has succeeded!\"
    }"
    
  4. Fügen Sie ein Post-Task-Plugin hinzu, das einen Fehler verursacht, wenn "Build als Fehler markiert".

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"failure\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has failed!\"
    }"
    
  5. Sie können zu Beginn der Tests auch einen ausstehenden Anruf hinzufügen

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"pending\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build is pending!\"
    }"
    

Screenshot der Konfiguration der Post-Build-Aufgabe

Natim
quelle
Sie können dies auch über die Pipeline tun - zum Beispiel können Sie es einfach shwithCredentials
durchrufen
Für Teamcity können Sie verwenden: Confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim
24

Dieses Plugin sollte funktionieren: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Sie sollten in der Lage sein, solche Abzeichen in Ihre README.mdDatei einzubetten :

Passieren bauen

Koraktor
quelle
6
Leider scheint GitHub damit begonnen zu haben, diese Bilder auf einem Bildhosting-Dienst zwischenzuspeichern, und sie werden jetzt falsch angezeigt.
Axel22
Jetzt funktioniert es gut, wenn Sie den Zugriff korrekt eingerichtet haben (anonymer Benutzer sollte den Build-Status sehen können)
Dmitry Meshkov
11

Mit der Commit Status API können Sie die " Repo Statuses API " anzeigen .

Und seit dem 26. April 2013 können Sie den Build-Status auf Ihrer GitHub-Repo-Zweigstellenseite sehen :

Build-Status für GitHub-Repo-Zweige

Das heißt, es ist eine andere Möglichkeit, durch Aufrufen der GitHub-Projektseite diese Status anzuzeigen, anstatt nur Jenkins zu haben.

Ab dem 30. April 2013 wurde der API-Endpunkt für Festschreibungsstatus erweitert, um Zweig- und Tag-Namen sowie Festschreibungs-SHAs zuzulassen .

VonC
quelle
Wo lege ich die zu treffenden URLs ab? Gibt es ein Plugin oder muss ich in einem Build-Schritt Curls verwenden?
Ian Vaughan
@ IanVaughan was meinst du mit "schlagen"? Um was zu sehen? Um einen Status zu sehen, wäre es ein curl( developer.github.com/v3/repos/statuses/… )
VonC
Tut mir leid, ja, ich wusste, dass Curl verwendet werden kann, und ich kannte die API-Schnittstelle. Es war eher der Ort, an dem der Curl platziert werden sollte, und wenn nicht eine höhere Abstraktion von Curl verfügbar war? Das heißt, ich könnte einen Curl-POST hinzufügen, bevor der Build angibt, dass das Commit / PR erstellt wird, und dann einen nach dem Build, aber dies alles scheint sehr niedrig zu sein, und ich hatte gehofft, dass es ein Plugin auf höherer Ebene gibt, das dieses Zeug für mich erledigt.
Ian Vaughan
Ich habe seitdem festgestellt, dass Janky, der für meinen Anwendungsfall ziemlich schwer ist, zu tun scheint, was ich will.
Ian Vaughan
7

Wenn Sie ein GithubPlugin auf Ihrem installiert haben Jenkins, können Sie dies folgendermaßen tun Post build actions:

Setze den Build Status auf Github

Rémy Virin
quelle
4
Dieser Antwort fehlen Details: Wie erstelle ich ein OAuth-Zugriffstoken auf GitHub, damit das GitHub-Plugin die APIs verwendet, die zum Festlegen des Build-Status erforderlich sind? Welche Berechtigungen sind für dieses Token erforderlich? Wo kann ich in der Jenkins-Konfiguration den Benutzernamen / das Token angeben?
Marius Gedminas
2
Das ist wirklich nicht hilfreich. Wie kommt man zu diesem Dialogfenster?
Oz123
5

Fügen Sie die folgende Zeile in Ihre README.md ein und ändern Sie beide URLs entsprechend Ihrem Jenkins-Projekt.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)
Kaushal
quelle
Wird die Grafik automatisch geladen? Es scheint, dass es nichts für mich ist ...
HX_unbanned
Ja, es wird nicht funktionieren. Sie müssen Ihre Seite aktualisieren.
Kaushal
3

In Bezug auf die Einrichtung des geschützten Zweigs von Jenkins und GitHub. Ich verwende Jenkins 2.6 und dies sind die Schritte, die ich ausgeführt habe, damit es funktioniert:

Auf der GitHub-Webseite Ihres Repositorys:

  1. Navigieren Sie zu Einstellungen> Zweige.
  2. Klicken Sie unter Zweige schützen auf das Menü Select a branch ertrinken und wählen Sie den Zweig aus, den Sie als geschützten Zweig festlegen möchten.
  3. Aktivieren Sie die Optionen nach Bedarf.

Auf dem Jenkins-Server: (Stellen Sie sicher, dass Sie das Git- und GitHub-Plugin installiert haben.)

  1. Navigieren Sie zu Jenkins verwalten> System konfigurieren.
  2. Setzen Sie unter GitHub die API-URL auf https://api.github.com . Dies ist jedoch der Standardwert.
  3. Wählen Sie Ihr generiertes Token für die Anmeldeinformationen aus. Wenn Sie noch kein Token generiert haben, klicken Sie auf Erweitert ... und dann auf Zusätzliche Aktionen. Sie können Ihr Login und Passwort in ein Token konvertieren und es als Anmeldeinformationen verwenden.

Stellen Sie außerdem sicher, dass das von Ihren Jenkins verwendete GitHub-Konto ein Mitarbeiter für das Repository ist. Ich habe es mit Schreibberechtigungsstufe eingestellt.

Hoffe das hilft.

d 'Ghostman
quelle
2

Ich folgte den Anweisungen von Alex und es funktionierte.

Für GitHub Enterprise müssen Sie jedoch die API-URL ändern, wenn Sie den Server zu Jenkins hinzufügen.

Wenn Ihr Unternehmen beispielsweise creditcard.com ist, lautet Ihre URL

https://github.creditcard.com/api/v3/

Adan Amarillas
quelle
1

Bearbeiten:

Ich verwende diesen Ansatz nicht mehr. Bitte verwenden Sie eine der anderen Antworten.

Update: Was ich letztendlich für unseren speziellen Fall getan habe: (Die obigen Antworten waren großartig - danke!)

Da sich unser Build-Server nicht im Internet befindet, haben wir ein Skript, um den Build-Status im gh-pages-Zweig in github zu veröffentlichen.

  • Beginn des Baus von Stempeln fehlgeschlagen
  • Ende des Builds Stempel Erfolg
  • Das Projekt wird nach dem Hauptprojekt ausgeführt, um Ergebnisse zu veröffentlichen -> Build-Status, API-Dokumente, Testberichte und Testabdeckung.

GitHub speichert Images zwischen, daher haben wir eine .htaccess-Datei erstellt, die ein kurzes Cache-Timeout für das Build-Status-Image anweist.

Legen Sie dies in das Verzeichnis mit dem Build-Status-Image:

ExpiresByType image/png "access plus 2 minutes"

Hier ist das Build-Skript. Das Ziel, das auf gh-pages veröffentlicht wird , ist '--publish.site.dry.run'.

Mit weniger als 400 Konfigurationszeilen haben wir:

  • Schecks kompilieren
  • Unit & Integrationstests
  • Testberichte
  • Code Coverage Reports
  • API-Dokumente
  • Veröffentlichung bei Github

. . und dieses Skript kann in oder außerhalb von Jenkins ausgeführt werden, so dass:

  • Entwickler können dieses Skript vor dem Festschreiben ausführen, um die Wahrscheinlichkeit eines fehlerhaften Builds zu verringern, der sich auf andere auswirkt.
  • Ein Fehler ist lokal leicht zu reproduzieren.

Die Ergebnisse:

Die Hauptseite des Projekts enthält den Build-Status, der nach jedem Build aktualisiert wird, sowie die neuesten API-Dokumente, Testergebnisse und Testabdeckung.

Jasper Blues
quelle
Tolles Feedback, genauer als meine Antwort. +1
VonC
1
Build-Skript-Link ist tot
Saikat
Haben Sie einen Live-Link zu Ihrem Skript?
Ian
Habe aufgehört, diesen Ansatz zu verwenden - ich denke, die anderen Antworten werden besser sein.
Jasper Blues