Pokaż aktualny stan wersji Jenkins na repozytorium GitHub

182

Czy istnieje sposób, aby pokazać status kompilacji Jenkins na GitHub Readme.md mojego projektu?

Używam Jenkinsa do uruchamiania ciągłych kompilacji integracyjnych. Po każdym zatwierdzeniu upewnia się, że wszystko się kompiluje, a także wykonuje testy jednostkowe i integracyjne, zanim w końcu opracuje dokumentację i wyda pakiety.

Nadal istnieje ryzyko nieumyślnego popełnienia czegoś, co psuje kompilację. Dobrze byłoby, gdyby użytkownicy odwiedzający stronę projektu GitHub wiedzieli, że bieżący wzorzec jest w tym stanie.

Jasper Blues
źródło
9
Dlaczego zostało to odrzucone? Czy w podręczniku użytkownika Jenkins jest coś oczywistego, za czym tęskniłem? Zrobiłem google wcześniej i nie mogłem nic znaleźć.
Jasper Blues
1
Serwer kompilacji Travis może zrobić coś takiego, ale używam Jenkinsa na Osx. Oto coś, czego szukam: github.com/CocoaPods/CocoaPods
Jasper Blues
2
Link do podobnego pytania zaleca Travis, który obecnie nie obsługuje iOS i OSX, więc nie odpowiada na pytanie.
Jasper Blues
4
To nie jest duplikat .. travis! =
Jenkins

Odpowiedzi:

167

Ok, oto jak możesz skonfigurować Jenkinsa, aby ustawić statusy kompilacji GitHub. Zakłada się, że masz już Jenkinsa z wtyczką GitHub skonfigurowaną do wykonywania kompilacji przy każdym wypychaniu.

  1. Przejdź do GitHub, zaloguj się, przejdź do Ustawienia , Osobiste tokeny dostępu , kliknij Wygeneruj nowy token .

    zrzut ekranu ustawień GitHub

  2. Sprawdź status repo: (nie jestem pewien, czy to konieczne, ale zrobiłem to i zadziałało dla mnie).

    zrzut ekranu generowania tokena GitHub

  3. Wygeneruj token, skopiuj go.

  4. Upewnij się, że użytkownik GitHub, którego będziesz używać, jest współpracownikiem repozytorium (w przypadku prywatnych repozytoriów) lub członkiem zespołu z dostępem typu push i pull (w przypadku repozytoriów organizacji) do repozytoriów, które chcesz zbudować.

  5. Przejdź do serwera Jenkins, zaloguj się.

  6. Zarządzaj JenkinsKonfiguruj system
  7. W obszarze GitHub Web Hook wybierz opcję Pozwól Jenkinsowi automatycznie zarządzać adresami URL haków , a następnie określ swoją nazwę użytkownika GitHub i token OAuth otrzymany w kroku 3.

    zrzut ekranu ustawień globalnych Jenkins

  8. Sprawdź, czy działa z przyciskiem Poświadczenie testu . Zapisz ustawienia.

  9. Znajdź zadanie Jenkinsa i dodaj Ustaw status kompilacji w GitHub zatwierdzenia do kroków po kompilacji

    zrzut ekranu konfiguracji zadania Jenkins

Otóż ​​to. Teraz wykonaj wersję testową i przejdź do repozytorium GitHub, aby sprawdzić, czy zadziałało. Kliknij Oddziały na stronie głównego repozytorium, aby zobaczyć statusy kompilacji.

sceenshot strony głównej, na której klikasz „oddziały”

Powinieneś zobaczyć zielone znaczniki wyboru:

zrzut ekranu oddziałów GitHub ze statusem kompilacji

Marius Gedminas
źródło
GitHub zaktualizował teraz przepływ pracy autoryzacji, użytkownicy nie określają już, na co zezwalać, a raczej aplikacje muszą żądać tego, czego wymagają podczas autoryzacji, a użytkownik zatwierdza wymagane uprawnienia.
Ian Vaughan
6
Wydaje się, że to nie działa z Jenkins> 1.609 i Github plugin v 1.13.3 - Nie mogę znaleźć opcji „Pozwól Jenkinsowi automatycznie zarządzać adresami URL
hooka
2
Zgadzam się z @pyeleven. Używam Jenkins LTS 1.625.3 z Github Plugin 1.16.0 i Github API Plugin 1.71. Ta opcja nie pojawia się. Widzę raczej listę rozwijaną dla poświadczeń, ale poświadczenia nie są wymienione (nawet jeśli mam skonfigurowane poświadczenia). Te poświadczenia pojawiają się, gdy przechodzisz do Advance-> Zarządzaj dodatkowymi akcjami Github -> Konwertuj login i hasło na token Github.
shehzan
4
To wydaje się być nieaktualne; akcja po kompilacji, o której wspomniana jest odpowiedź, jest teraz oznaczona jako przestarzała i jest druga
Daenyth
1
Teraz parametry kroku po kompilacji zostały zmienione. @Alex ma poprawną odpowiedź.
Bibek Mantree
51

W międzyczasie interfejs Jenkins i GitHub nieco się zmienił i zajęło mi trochę czasu, aby dowiedzieć się, jak poprawnie skonfigurować Jenkins. Wyjaśnienie tutaj oparte jest na wersji 2.121.1 Jenkinsa.

Zakładam również, że skonfigurowałeś już swoją pracę Jenkins Job przez hak internetowy lub ankietę. Oto kroki, które podjąłem, aby to działało:

  1. Skonfiguruj Github: Utwórz osobisty token dostępu z zakresem OAuth repo:status
  2. Skonfiguruj Jenkins: Configure Systemi dodaj Sekret OAuth jako Serwer GitHub - użyj go Secret Textjako metody uwierzytelnienia, aby umieścić tam Sekret OAuth.
  3. Skonfiguruj swoje zadanie Jenkins: Dodaj Set GitHub commit statusjako akcję po kompilacji . Ustaw Wynik stanu na One of the default messages and statuses.
  4. Sprawdź swój wynik w GitHub: sprawdź, czy masz status kompilacji i czas trwania kompilacji na zatwierdzeniu GitHub.

Skonfiguruj Github

Utwórz osobisty token dostępu


wprowadź opis zdjęcia tutaj


wprowadź opis zdjęcia tutaj


wprowadź opis zdjęcia tutaj


Skonfiguruj Jenkins

wprowadź opis zdjęcia tutaj


wprowadź opis zdjęcia tutaj


wprowadź opis zdjęcia tutaj


wprowadź opis zdjęcia tutaj


wprowadź opis zdjęcia tutaj


Skonfiguruj Jenkins Job

wprowadź opis zdjęcia tutaj


wprowadź opis zdjęcia tutaj


wprowadź opis zdjęcia tutaj


Wynik

Zobaczysz teraz status swoich zobowiązań i oddziałów:

wprowadź opis zdjęcia tutaj

Alex
źródło
2
Wow, w końcu znalazłem rozwiązanie, wielkie dzięki! Ten „tajny tekst” mnie zdezorientował.
head01
Jenkins wydaje się naciskać na statusy, ale moje prywatne repozytorium ich nie odbiera. Jakieś sugestie?
Patrick Michaelsen
Aktualizacja: mój problem związany był z prywatnością mojego repozytorium. Muszę mieć problem z konfiguracją poświadczeń.
Patrick Michaelsen
Aktualizacja: ostatecznie odkryłem, że to działa tylko wtedy, gdy zostało uruchomione przez faktyczne wypychanie git. Samo uruchomienie kompilacji nie wyzwala poprawnie aktualizacji statusu.
Patrick Michaelsen,
1
Manage HooksPole jest podświetlone, ale nie zaznaczone w powyższych zdjęć, to znaczy, powinno być odznaczone kiedy zapisać?
Perplexabot
37

To, co zrobiłem, jest dość proste:

  1. Zainstaluj wtyczkę Hudson Post Task
  2. Utwórz osobisty token dostępu tutaj: https://github.com/settings/tokens
  3. Dodaj wtyczkę Post Task, która zawsze przynosi sukces

    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. Dodaj wtyczkę Post Task, która spowoduje niepowodzenie, jeśli „oznaczono kompilację jako niepowodzenie”

    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. Możesz również dodać połączenie do oczekujących na początku testów

    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!\"
    }"
    

Zrzut ekranu konfiguracji zadania kompilacji postu

Natim
źródło
Możesz to również zrobić z Rurociągu - na przykład możesz po prostu zadzwonić, sha nawet skorzystać z magazynu poświadczeń JenkinsawithCredentials
Ivan Kolmychek
W przypadku Teamcity możesz użyć: confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim
24

Ta wtyczka powinna działać: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Powinieneś być w stanie osadzić takie odznaki w swoim README.mdpliku:

budowanie przejścia

Koraktor
źródło
6
Niestety wydaje się, że GitHub zaczął buforować te obrazy w niektórych usługach hostingu obrazów i są one teraz wyświetlane nieprawidłowo.
axel22
Teraz działa poprawnie, jeśli poprawnie skonfigurowałeś dostęp (anonimowy użytkownik powinien widzieć status kompilacji)
Dmitry Meshkov
11

Commit Stan API pozwala zobaczyć „ Repo statusy API ”.

Od 26 kwietnia 2013 r. Możesz teraz zobaczyć status kompilacji na stronie oddziału GitHub :

buduj status w oddziałach repozytorium GitHub

Oznacza to, że jest to inny sposób, odwiedzając stronę projektu GitHub, aby zobaczyć te statusy zamiast tylko Jenkinsa.

Od 30 kwietnia 2013 r. Punkt końcowy interfejsu API dla statusów zatwierdzania został rozszerzony, aby umożliwić oddział . Punkt nazwy i tagów, a także zatwierdzać SHA .

VonC
źródło
Gdzie umieścić adresy URL do trafienia? Czy istnieje wtyczka, czy muszę tworzyć loki na etapie tworzenia?
Ian Vaughan
@IanVaughan co masz na myśli mówiąc „trafić”? Co zobaczyć? Aby zobaczyć status, byłby to curl( developer.github.com/v3/repos/statuses/… )
VonC
Przepraszam, tak, wiedziałem, że można użyć curl, i znałem interfejs API, to było więcej miejsca, w którym można go lokować, a jeśli nie, dostępna była abstrakcja wyższego poziomu z curl? tzn. mógłbym dodać curl POST, zanim kompilacja zacznie stwierdzać, że buduje się zatwierdzenie / PR, a potem jeden po nim, ale wszystko to wydaje się bardzo niskie i miałem nadzieję, że wtyczka wyższego poziomu to dla mnie.
Ian Vaughan
Od tego czasu odkryłem, że Janky, który jest dość ciężki jak na mój przypadek użycia, wydaje się robić to, co chcę.
Ian Vaughan
7

Jeśli masz Githubzainstalowaną wtyczkę Jenkins, możesz to zrobić w Post build actionsnastępujący sposób:

ustaw status kompilacji na github

Rémy Virin
źródło
4
W tej odpowiedzi brakuje szczegółów: jak utworzyć token dostępu OAuth na GitHub, aby wtyczka GitHub mogła korzystać z interfejsów API niezbędnych do ustawienia statusu kompilacji? Jakie uprawnienia są potrzebne na tym tokenie? Gdzie w konfiguracji Jenkins mogę podać nazwę użytkownika / token?
Marius Gedminas
2
To naprawdę nie jest pomocne, jak przejść do tego okna dialogowego?
Oz123
5

Dodaj poniższy wiersz w pliku README.md i zmień oba adresy URL zgodnie z projektem Jenkins.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)
Kaushal
źródło
Czy grafika jest ładowana automatycznie? Wygląda na to, że to nie dla mnie ...
HX_unbanned
Tak, to nie zadziała. Musisz odświeżyć stronę.
Kaushal
3

W odniesieniu do utworzenia chronionego oddziału Jenkins i GitHub. Używam Jenkins 2.6, a oto kroki, które zrobiłem, aby to działało:

Na stronie GitHub repozytorium:

  1. Przejdź do Ustawienia> Oddziały.
  2. W obszarze Chroń gałęzie kliknij menu Wybierz gałąź utopione i wybierz gałąź, którą chcesz ustawić jako gałąź chroniona.
  3. W razie potrzeby włącz opcje.

Na serwerze Jenkins: (Upewnij się, że masz zainstalowaną wtyczkę Git i GitHub)

  1. Przejdź do Zarządzaj Jenkins> Konfiguruj system.
  2. W obszarze GitHub ustaw adres URL interfejsu API na https://api.github.com . Chociaż jest to wartość domyślna.
  3. Wybierz wygenerowany token dla poświadczeń. Jeśli jeszcze nie wygenerowałeś tokena, kliknij Zaawansowane ..., a następnie Działania dodatkowe, możesz przekonwertować login i hasło na token i użyć go jako poświadczenia.

Upewnij się również, że konto GitHub, z którego korzysta Twój Jenkins, jest współpracownikiem repozytorium. Ustawiłem go z poziomem uprawnień do zapisu.

Mam nadzieję że to pomoże.

d 'ghostman
źródło
2

Postępowałem zgodnie ze wskazówkami Alexa i zadziałało.

Ale w przypadku GitHub Enterprise musisz zmodyfikować adres URL interfejsu API podczas dodawania serwera do Jenkins.

Na przykład, jeśli Twoja firma to creditcard.com, adres URL to

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

Adan Amarillas
źródło
1

Edytować:

Nie używam już tego podejścia, skorzystaj z jednej z pozostałych odpowiedzi.

Aktualizacja: co ostatecznie skończyłem, w naszym konkretnym przypadku: (powyższe odpowiedzi były świetne - dzięki!)

Ponieważ nasz serwer kompilacji nie znajduje się w Internecie, mamy skrypt do opublikowania statusu kompilacji w gałęzi gh-pages w github.

  • Start znaczków kompilacji kończy się niepowodzeniem
  • Koniec kompilacji oznacza sukces
  • Projekt działa po głównym projekcie, aby opublikować wyniki -> status kompilacji, dokumenty API, raporty z testów i pokrycie testów.

GitHub buforuje obrazy, dlatego stworzyliśmy plik .htaccess, który instruuje krótki limit czasu buforowania dla obrazu stanu kompilacji.

Umieść to w katalogu z obrazem statusu kompilacji:

ExpiresByType image/png "access plus 2 minutes"

Oto skrypt kompilacji. Celem publikowanym na stronach gh jest „--publish.site.dry.run”

Przy mniej niż 400 liniach konfiguracji mamy:

  • Skompiluj kontrole
  • testy jednostkowe i integracyjne
  • Raporty z testów
  • Raporty pokrycia kodu
  • Dokumenty API
  • Publikowanie w Github

. . a ten skrypt można uruchomić w Jenkins lub poza nim, aby:

  • Deweloperzy mogą uruchomić ten skrypt przed zatwierdzeniem, zmniejszając ryzyko zepsutej kompilacji, która wpływa na innych.
  • Awarię można łatwo odtworzyć lokalnie.

Wyniki:

Strona główna projektu ma status kompilacji, aktualizowany po każdej kompilacji, wraz z najnowszymi dokumentami API, wynikami testów i zasięgiem testów.

Jasper Blues
źródło
Świetne opinie, bardziej precyzyjne niż moja odpowiedź. +1
VonC
1
Link do skryptu kompilacji nie działa
Saikat
Czy masz link na żywo do swojego skryptu?
Ian
Przestałem używać tego podejścia - myślę, że pozostałe odpowiedzi będą lepsze.
Jasper Blues