Mostra lo stato corrente di Jenkins basato sul repository GitHub


182

C'è un modo per mostrare lo stato di compilazione di Jenkins sul GitHub Readme.md del mio progetto?

Uso Jenkins per eseguire build di integrazione continua. Dopo ogni commit assicura che tutto sia compilato, oltre a eseguire test unitari e di integrazione, prima di produrre finalmente documentazione e rilasciare bundle.

C'è ancora il rischio di commettere inavvertitamente qualcosa che rompe la build. Sarebbe utile per gli utenti che visitano la pagina del progetto GitHub sapere che l'attuale master è in quello stato.


9
Perché è stato votato in negativo? C'è qualcosa di ovvio nella guida per l'utente di Jenkins che ho perso? Prima ho fatto google e non sono riuscito a trovare nulla.
Jasper Blues,

1
Il server di build Travis può fare qualcosa del genere, ma sto usando Jenkins su Osx. Ecco il tipo di cosa che sto cercando
Jasper Blues


2
Il collegamento alla domanda simile consiglia Travis, che al momento non supporta iOS e OSX, quindi non risponde alla domanda.
Jasper Blues,

4
Questo non è un duplicato .. travis! =
Jenkins

Risposte:


167

Ok, ecco come puoi configurare Jenkins per impostare gli stati di build di GitHub. Questo presuppone che tu abbia già Jenkins con il plugin GitHub configurato per fare build su ogni push.

  1. Vai su GitHub, accedi, vai su Impostazioni , Token di accesso personale , fai clic su Genera nuovo token .

    screenshot delle impostazioni di GitHub

  2. Controlla repo: status (non sono sicuro che sia necessario, ma l'ho fatto e ha funzionato per me).

    screenshot della generazione di token GitHub

  3. Generare il token, copiarlo.

  4. Assicurarsi che l'utente GitHub che si intende utilizzare sia un collaboratore del repository (per repository privati) o sia un membro di un team con accesso push e pull (per repository dell'organizzazione) ai repository che si desidera creare.

  5. Vai al tuo server Jenkins, accedi.

  6. Gestisci JenkinsConfigura sistema
  7. In GitHub Web Hook seleziona Consenti a Jenkins di gestire automaticamente gli URL hook , quindi specifica il tuo nome utente GitHub e il token OAuth che hai ottenuto nel passaggio 3.

    screenshot delle impostazioni globali di Jenkins

  8. Verifica che funzioni con il pulsante Test credenziali . Salva le impostazioni.

  9. Trova il lavoro Jenkins e aggiungi Imposta stato build su GitHub commit ai passaggi post-build

    screenshot della configurazione del lavoro di Jenkins

Questo è tutto. Ora fai un build di test e vai al repository GitHub per vedere se ha funzionato. Fare clic su Branches nella pagina principale del repository per visualizzare gli stati di compilazione.

sceenshot della pagina principale in cui si fa clic su "rami"

Dovresti vedere segni di spunta verdi:

screenshot delle filiali GitHub con stato di compilazione


GitHub ha aggiornato il flusso di lavoro delle autorizzazioni ora, gli utenti non specificano più cosa consentire, ma le applicazioni devono richiedere ciò che richiedono durante l'autorizzazione e l'utente deve approvare le autorizzazioni richieste.
Ian Vaughan,

6
Questo non sembra funzionare con Jenkins> 1.609 e il plug-in Github v 1.13.3 - Non riesco a trovare l'opzione "Consenti a Jenkins di gestire automaticamente gli hook hook"
fine

2
Concordo con @pyeleven. Sto usando Jenkins LTS 1.625.3 con Github Plugin 1.16.0 e Github API Plugin 1.71. Questa opzione non viene visualizzata. Piuttosto vedo un menu a discesa per le credenziali, ma non sono elencate le credenziali (anche se ho le credenziali impostate). Queste credenziali appaiono quando vai su Avanzate-> Gestisci ulteriori azioni Github -> Converti login e password in token Github.
Shehzan,

4
Questo sembra essere obsoleto; l'azione post-build
citata da

1
Ora i parametri del passaggio post build sono stati modificati. @Alex ha la risposta corretta.
Bibek Mantree,

51

Nel frattempo l'interfaccia utente di Jenkins e GitHub è cambiata un po 'e mi ci è voluto un po' di tempo per capire come configurare Jenkins ora correttamente. La spiegazione qui è basata sulla versione 2.121.1 di Jenkins.

Suppongo anche che tu abbia già configurato il tuo lavoro Jenkins per essere attivato da un webhook o da polling. Questi sono i passaggi che ho preso per farlo funzionare:

  1. Configura Github: Crea token di accesso personale con OAuth Scope repo:status
  2. Configura Jenkins: Configure Systeme aggiungi il Segreto OAuth come server GitHub - usa Secret Textcome metodo di autenticazione per inserire il Segreto OAuth.
  3. Configura il tuo lavoro Jenkins: aggiungi Set GitHub commit statuscome azione post-build . Impostare il risultato dello stato su One of the default messages and statuses.
  4. Controlla il tuo risultato su GitHub: controlla se ottieni lo stato e la durata dell'esecuzione del build sul tuo commit GitHub.

Configura Github

Crea token di accesso personale


inserisci qui la descrizione dell'immagine


inserisci qui la descrizione dell'immagine


inserisci qui la descrizione dell'immagine


Configura Jenkins

inserisci qui la descrizione dell'immagine


inserisci qui la descrizione dell'immagine


inserisci qui la descrizione dell'immagine


inserisci qui la descrizione dell'immagine


inserisci qui la descrizione dell'immagine


Configura Jenkins Job

inserisci qui la descrizione dell'immagine


inserisci qui la descrizione dell'immagine


inserisci qui la descrizione dell'immagine


Risultato

Ora vedrai lo stato dei tuoi commit e filiali:

inserisci qui la descrizione dell'immagine


2
Wow finalmente trovato una soluzione, grazie mille! Quel "testo segreto" mi ha confuso.
head01

Jenkins sembra stia spingendo gli stati, ma il mio repository privato non li sta prendendo in considerazione. Eventuali suggerimenti?
Patrick Michaelsen,

Aggiornamento: il mio problema era legato alla privacy del mio repository. Devo avere un problema con la mia configurazione delle credenziali.
Patrick Michaelsen,

Aggiornamento: alla fine ho scoperto che funziona solo se è stato attivato da una vera git push. Eseguire da soli la build non attiva correttamente l'aggiornamento dello stato.
Patrick Michaelsen,

1
La Manage Hookscasella è evidenziata ma non selezionata nelle immagini sopra, significa che dovrebbe essere deselezionata quando salviamo?
Perplexabot,

37

Quello che ho fatto è abbastanza semplice:

  1. Installa il plug-in Hudson Post Task
  2. Crea un token di accesso personale qui: https://github.com/settings/tokens
  3. Aggiungi un plug-in Post Task che abbia sempre avuto successo

    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. Aggiungi un plug-in Post Task che metterà l'errore se "contrassegna build come errore"

    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. È inoltre possibile aggiungere una chiamata a in sospeso all'inizio dei test

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

Schermata della configurazione dell'attività Post build


Puoi anche farlo dalla pipeline - ad esempio, puoi semplicemente chiamarlo she persino sfruttare l'archiviazione delle credenziali Jenkins conwithCredentials
Ivan Kolmychek,


24

Questo plugin dovrebbe funzionare: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Dovresti essere in grado di incorporare badge come questo nel tuo README.mdfile:

costruire passando


6
Purtroppo, sembra che GitHub abbia iniziato a memorizzare nella cache queste immagini su alcuni servizi di hosting di immagini e ora vengono visualizzate in modo errato.
axel22,

Ora funziona correttamente se hai impostato correttamente l'accesso (l'utente anonimo dovrebbe essere in grado di vedere lo stato della build)
Dmitry Meshkov

11

L' API di stato Commit ti consente di visualizzare l' API " Repo Statuses ".

E dal 26 aprile 2013, ora puoi vedere lo stato della build nella pagina della tua filiale repository GitHub :

costruire lo stato sui rami dei repository GitHub

Ciò significa che è un altro modo, visitando la pagina del progetto GitHub, vedere quegli stati invece di avere solo Jenkins.

A partire dal 30 aprile 2013, l' endpoint API per gli stati di commit è stato esteso per consentire nomi di filiali e tag, nonché SHA di commit .


Dove devo mettere gli URL per colpire? Esiste un plug-in o devo arricciare l'utente in una fase di creazione?
Ian Vaughan,

@IanVaughan cosa intendi con "colpire"? Per vedere cosa? Per vedere uno stato, sarebbe un curl( developer.github.com/v3/repos/statuses/… )
VonC

Mi dispiace, sì, sapevo che il ricciolo poteva essere usato e conoscevo l'interfaccia API, era più di dove mettere il ricciolo e se non fosse disponibile un'astrazione di livello superiore dal ricciolo? cioè potrei aggiungere un POST di arricciatura prima che la build inizi a dichiarare che il commit / PR sta costruendo, e poi uno dopo, ma tutto questo sembra un livello molto basso e speravo che ci fosse un plug-in di livello superiore per fare queste cose per me.
Ian Vaughan,

Da allora ho scoperto che Janky, che è piuttosto pesante per il mio caso d'uso, sembra fare quello che voglio.
Ian Vaughan,


7

Se hai Githubinstallato un plugin sul tuo Jenkins, puoi farlo in Post build actionsquesto modo:

imposta lo stato della build su github



4
Questa risposta è priva di dettagli: come posso creare un token di accesso OAuth su GitHub per consentire al plug-in GitHub di utilizzare le API necessarie per impostare lo stato di compilazione? Quali autorizzazioni sono necessarie su questo token? Dove nella configurazione di Jenkins posso specificare il nome utente / token?
Marius Gedminas,

2
Questo non è davvero utile, come si arriva a questa finestra di dialogo?
Oz123,

5

Aggiungi sotto la riga nel tuo README.md e modifica entrambi gli URL in base al tuo progetto jenkins.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)

L'immagine viene caricata automaticamente? Sembra che non sia per me ...
HX_unbannato il

Sì, non funzionerà. Devi aggiornare la tua pagina.
Kaushal,

3

Per quanto riguarda la creazione del ramo protetto di Jenkins e GitHub. Sto usando Jenkins 2.6 e questi sono i passaggi che ho fatto per farlo funzionare:

Sulla pagina Web GitHub del repository:

  1. Passare a Impostazioni> Filiali.
  2. In Proteggi rami, fai clic sul menu a discesa Scegli un ramo e seleziona il ramo che desideri impostare come ramo protetto.
  3. Abilita le opzioni secondo necessità.

Sul server Jenkins: (assicurati di avere installato il plugin Git e GitHub)

  1. Passare a Gestisci Jenkins> Configura sistema.
  2. Sotto GitHub, imposta l'URL dell'API su https://api.github.com . Sebbene questo sia il valore predefinito.
  3. Seleziona il token generato per le credenziali. Se non hai ancora generato un token, fai clic su Avanzate ... quindi su Ulteriori azioni, puoi convertire il tuo login e password in token e usarlo come credenziale.

Inoltre, assicurati che l'account GitHub utilizzato da Jenkins sia un collaboratore per il repository. L'ho impostato con il livello di autorizzazione in scrittura.

Spero che questo ti aiuti.




1

Modificare:

Non sto più usando questo approccio, per favore usa una delle altre risposte.

Aggiornamento: quello che ho finito per fare, per il nostro caso specifico: (le risposte sopra sono state fantastiche - grazie!)

Poiché il nostro server di build non è su Internet, abbiamo uno script per pubblicare lo stato di build nel ramo gh-pages in github.

  • Inizio dei timbri di costruzione non riusciti
  • Successo di timbri di fine costruzione
  • Il progetto viene eseguito dopo il progetto principale per pubblicare i risultati -> stato build, documenti API, rapporti sui test e copertura dei test.

GitHub memorizza nella cache le immagini, quindi abbiamo creato il file .htaccess, che indica un breve timeout della cache per l'immagine di stato della build.

Inseriscilo nella directory con l'immagine di stato build:

ExpiresByType image/png "access plus 2 minutes"

Ecco lo script di compilazione. Il target che pubblica su gh-pages è '--publish.site.dry.run'

Con meno di 400 linee di configurazione, abbiamo:

  • Compilare i controlli
  • test di unità e integrazione
  • Rapporti di prova
  • Rapporti sulla copertura del codice
  • Documenti API
  • Pubblicazione su Github

. . e questo script può essere eseguito all'interno o all'esterno di Jenkins, in modo che:

  • Gli sviluppatori possono eseguire questo script prima di eseguire il commit, riducendo la possibilità di una build interrotta che influisce sugli altri.
  • Un errore è facile da riprodurre localmente.

I risultati:

La pagina principale del progetto ha lo stato della build, aggiornato dopo ogni build, insieme agli ultimi documenti API, ai risultati dei test e alla copertura dei test.


Ottimo feedback, più preciso della mia risposta. +1
VonC

1
Il link per lo script Build è morto
Saikat,

Hai un link live alla tua sceneggiatura?
Ian,

Ho smesso di usare questo approccio - penso che le altre risposte saranno migliori.
Jasper Blues,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.