Afficher l'état actuel de la compilation de Jenkins sur le dépôt GitHub

185

Existe-t-il un moyen d'afficher l'état de la compilation Jenkins sur GitHub Readme.md de mon projet?

J'utilise Jenkins pour exécuter des builds d'intégration continue. Après chaque validation, il s'assure que tout se compile, ainsi que des tests unitaires et d'intégration, avant de finalement produire la documentation et les lots de publication.

Il y a toujours un risque de commettre par inadvertance quelque chose qui rompt la construction. Il serait bon que les utilisateurs visitant la page du projet GitHub sachent que le maître actuel est dans cet état.

Jasper Blues
la source
9
Pourquoi a-t-il été voté à la baisse? Y a-t-il quelque chose d'évident dans le guide de l'utilisateur Jenkins que j'ai manqué? J'ai fait google avant et je n'ai rien trouvé.
Jasper Blues
1
Le serveur de build Travis peut faire quelque chose comme ça, mais j'utilise Jenkins sur Osx. Voici le genre de chose que je cherche
Jasper Blues
2
Le lien vers la question similaire recommande Travis, qui ne prend actuellement pas en charge iOS et OSX, donc il ne répond pas à la question.
Jasper Blues
4
Ce n'est pas un doublon .. travis! = Jenkins
Banjocat

Réponses:

168

Ok, voici comment configurer Jenkins pour définir les statuts de compilation GitHub. Cela suppose que vous avez déjà Jenkins avec le plugin GitHub configuré pour faire des compilations à chaque push.

  1. Allez sur GitHub, connectez-vous, allez dans Paramètres , Jetons d'accès personnels , cliquez sur Générer un nouveau jeton .

    capture d'écran des paramètres GitHub

  2. Vérifiez repo: status (je ne suis pas sûr que ce soit nécessaire, mais je l'ai fait, et cela a fonctionné pour moi).

    capture d'écran de la génération de jetons GitHub

  3. Générez le jeton, copiez-le.

  4. Assurez-vous que l'utilisateur GitHub que vous allez utiliser est un collaborateur de référentiel (pour les dépôts privés) ou est membre d'une équipe avec un accès push and pull (pour les dépôts d'organisation) aux référentiels que vous souhaitez créer.

  5. Accédez à votre serveur Jenkins, connectez-vous.

  6. Gérer JenkinsConfigurer le système
  7. Sous GitHub Web Hook, sélectionnez Laisser Jenkins gérer automatiquement les URL de hook , puis spécifiez votre nom d'utilisateur GitHub et le jeton OAuth que vous avez obtenu à l'étape 3.

    capture d'écran des paramètres globaux de Jenkins

  8. Vérifiez qu'il fonctionne avec le bouton Tester les informations d'identification . Enregistrez les paramètres.

  9. Recherchez le travail Jenkins et ajoutez le statut de compilation défini sur la validation GitHub aux étapes de post-construction

    capture d'écran de la configuration du travail Jenkins

C'est ça. Maintenant, faites un test de compilation et accédez au référentiel GitHub pour voir si cela a fonctionné. Cliquez sur Branches dans la page principale du référentiel pour voir les statuts de construction.

vue de la page principale où vous cliquez sur 'branches'

Vous devriez voir des coches vertes:

capture d'écran des branches GitHub avec l'état de compilation

Marius Gedminas
la source
GitHub a mis à jour son flux de travail d'autorisation maintenant, les utilisateurs ne spécifient plus ce qu'ils doivent autoriser, mais les applications doivent demander ce dont elles ont besoin lors de l'autorisation et l'utilisateur approuve les autorisations demandées.
Ian Vaughan
6
Cela ne semble pas travailler avec Jenkins> 1,609 et Github plug - in v 1.13.3 - Je ne peux pas trouver l'option « Let Jenkins auto-gérer les URL de crochet »
Endre
2
Je suis d'accord avec @pyeleven. J'utilise Jenkins LTS 1.625.3 avec Github Plugin 1.16.0 et Github API Plugin 1.71. Cette option n'apparaît pas. Je vois plutôt une liste déroulante pour les informations d'identification, mais aucune information d'identification n'est répertoriée (même si j'ai des informations d'identification configurées). Ces informations d'identification apparaissent lorsque vous accédez à Advance-> Manage Additional Github Actions -> Convert Login and Password to Github token.
shehzan
4
Cela semble être dépassé; l'action post-build mentionnée par cette réponse est maintenant marquée comme obsolète et il y en a une deuxième
Daenyth
1
Les paramètres de l'étape de post-construction ont maintenant été modifiés. @Alex a la bonne réponse.
Bibek Mantree
57

En attendant, l'interface utilisateur de Jenkins et GitHub a un peu changé et il m'a fallu un certain temps pour comprendre comment configurer Jenkins maintenant correctement. L'explication ici est basée sur la version 2.121.1 de Jenkins.

Je suppose également que vous avez déjà configuré votre Job Jenkins pour qu'il soit déclenché par un webhook ou par sondage. Voici les mesures que j'ai prises pour le faire fonctionner:

  1. Configurer Github: créer un jeton d'accès personnel avec la portée OAuth repo:status
  2. Configurez Jenkins: Configure Systemet ajoutez le secret OAuth en tant que serveur GitHub - utilisez-le Secret Textcomme méthode d'authentification pour y placer le secret OAuth.
  3. Configurez votre Job Jenkins: ajoutez Set GitHub commit statuscomme action post-build . Définissez le résultat du statut sur One of the default messages and statuses.
  4. Vérifiez votre résultat sur GitHub: vérifiez si vous obtenez l'état de compilation et la durée d'exécution de la compilation sur votre commit GitHub.

Configurer Github

Créer un jeton d'accès personnel


entrez la description de l'image ici


entrez la description de l'image ici


entrez la description de l'image ici


Configurer Jenkins

entrez la description de l'image ici


entrez la description de l'image ici


entrez la description de l'image ici


entrez la description de l'image ici


entrez la description de l'image ici


Configurer le travail Jenkins

entrez la description de l'image ici


entrez la description de l'image ici


entrez la description de l'image ici


Résultat

Vous verrez maintenant le statut de vos commits et branches:

entrez la description de l'image ici

Alex
la source
2
Wow a enfin trouvé une solution, merci beaucoup! Ce "texte secret" m'a rendu confus.
head01
1
Jenkins semble pousser les statuts, mais mon dépôt privé ne les prend pas en compte. Aucune suggestion?
Patrick Michaelsen
1
Mise à jour: mon problème était lié à la confidentialité de mon dépôt. Je dois avoir un problème avec la configuration de mes informations d'identification.
Patrick Michaelsen
1
Mise à jour: finalement, j'ai découvert que cela ne fonctionnait que si cela était déclenché par une poussée git réelle. L'exécution de la compilation vous-même ne déclenche pas correctement la mise à jour de l'état.
Patrick Michaelsen
1
La Manage Hookscase est mise en surbrillance mais non cochée dans les images ci-dessus, cela signifie-t-il qu'elle doit être décochée lors de l'enregistrement?
Perplexabot
37

Ce que j'ai fait est assez simple:

  1. Installez le plug-in Hudson Post Task
  2. Créez un jeton d'accès personnel ici: https://github.com/settings/tokens
  3. Ajouter un plug-in Post Task qui réussit toujours

    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. Ajoutez un plug-in de post-tâche qui mettra en échec si "la construction est marquée comme un échec"

    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. Vous pouvez également ajouter un appel à en attente au début des tests

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

Capture d'écran de la configuration de la tâche post build

Natim
la source
Vous pouvez également le faire à partir du pipeline - par exemple, vous pouvez simplement l'appeler shet même tirer parti du stockage des informations d'identification Jenkins avecwithCredentials
Ivan Kolmychek
Pour Teamcity, vous pouvez utiliser: confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim
24

Ce plugin devrait fonctionner: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Vous devriez pouvoir intégrer des badges comme celui-ci dans votre README.mdfichier:

construire en passant

Koraktor
la source
6
Malheureusement, il semble que GitHub a commencé à mettre en cache ces images sur un service d'hébergement d'images, et elles ne s'affichent pas correctement maintenant.
axel22
Maintenant, cela fonctionne très bien si vous avez correctement configuré l'accès (l'utilisateur anonyme devrait pouvoir voir l'état de la construction)
Dmitry Meshkov
11

L' API Commit Status vous permet de voir «l' API Repo Statuses ».

Et depuis le 26 avril 2013, vous pouvez maintenant voir l' état de la compilation sur votre page de branche de dépôt GitHub :

état de compilation sur les branches de dépôt GitHub

Cela signifie que c'est une autre façon, en visitant la page du projet GitHub, de voir ces statuts au lieu de n'avoir que Jenkins.

Depuis le 30 avril 2013, le point de terminaison de l' API pour les statuts de validation a été étendu pour autoriser les noms de branche et de balise, ainsi que les SHA de validation .

VonC
la source
Où dois-je placer les URL à atteindre? Existe-t-il un plugin ou dois-je utiliser des boucles dans une étape de construction?
Ian Vaughan
@IanVaughan que voulez-vous dire «frapper»? Pour voir ce qui? Pour voir un statut, ce serait un curl( developer.github.com/v3/repos/statuses/… )
VonC
Désolé, oui, je savais que curl pouvait être utilisé, et je connaissais l'interface API, c'était plutôt où placer la boucle, et sinon une abstraction de niveau supérieur de curl était disponible? c'est-à-dire que je pourrais ajouter un POST curl avant que la construction ne commence à indiquer que le commit / PR est en cours de construction, puis un après, mais tout cela semble de très bas niveau, et j'espérais qu'il y avait un plugin de niveau supérieur pour faire ce genre de choses pour moi.
Ian Vaughan
Depuis, j'ai trouvé que Janky, qui est assez lourd pour mon cas d'utilisation, semble faire ce que je veux.
Ian Vaughan
7

Si vous avez Githubinstallé un plugin sur votre Jenkins, vous pouvez le faire de la manière Post build actionssuivante:

définir le statut de compilation sur github

Rémy Virin
la source
13
Cela semble échouer silencieusement.
chrylis -cautouslyoptimistic-
4
Cette réponse manque de détails: comment créer un jeton d'accès OAuth sur GitHub pour permettre au plugin GitHub d'utiliser les API nécessaires pour définir l'état de compilation? Quelles autorisations sont nécessaires sur ce jeton? Où dans la configuration Jenkins puis-je spécifier le nom d'utilisateur / jeton?
Marius Gedminas
2
Ce n'est vraiment pas utile, comment accéder à cette fenêtre de dialogue?
Oz123 le
5

Ajoutez la ligne ci-dessous dans votre README.md et modifiez les deux URL en fonction de votre projet jenkins.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)
Kaushal
la source
Le graphique est-il chargé automatiquement? Il semble que ce ne soit pas pour moi ...
HX_unbanned le
Oui, cela ne fonctionnera pas. Vous devez actualiser votre page.
Kaushal
3

En ce qui concerne la mise en place de la branche protégée de Jenkins et GitHub. J'utilise Jenkins 2.6, et voici les étapes que j'ai suivies pour le faire fonctionner:

Sur la page Web GitHub de votre référentiel:

  1. Accédez à Paramètres> Branches.
  2. Sous Protéger les branches, cliquez sur le menu déroulant Choisir une branche et sélectionnez la branche que vous souhaitez définir comme branche protégée.
  3. Activez les options selon vos besoins.

Sur le serveur Jenkins: (assurez-vous que le plugin Git et GitHub est installé)

  1. Accédez à Gérer Jenkins> Configurer le système.
  2. Sous GitHub, définissez l'URL de l'API sur https://api.github.com . Bien que ce soit la valeur par défaut.
  3. Sélectionnez votre jeton généré pour les informations d'identification. Si vous n'avez pas encore généré de jeton, cliquez sur Avancé ... puis sur Actions supplémentaires, vous pouvez convertir votre identifiant et votre mot de passe en jeton et l'utiliser comme identifiant.

Assurez-vous également que le compte GitHub que votre Jenkins utilise est un collaborateur pour le référentiel. Je l'ai défini avec le niveau d'autorisation d'écriture.

J'espère que cela t'aides.

d 'homme fantôme
la source
2

J'ai suivi les instructions d' Alex et cela a fonctionné.

Mais, pour GitHub Enterprise, vous devez modifier l'URL de l'API lors de l'ajout du serveur à Jenkins.

Par exemple, si votre entreprise est creditcard.com, votre URL serait

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

Adan Amarillas
la source
1

Éditer:

Je n'utilise plus cette approche, veuillez utiliser l'une des autres réponses.

Mise à jour: ce que j'ai fini par faire, pour notre cas spécifique: (les réponses ci-dessus étaient super - merci!)

Comme notre serveur de build n'est pas sur Internet, nous avons un script pour publier le statut de build dans la branche gh-pages de github.

  • Échec du début des tampons de construction
  • Succès des tampons de fin de construction
  • Le projet s'exécute après le projet principal pour publier les résultats -> état de la construction, documents API, rapports de test et couverture des tests.

GitHub met en cache les images, nous avons donc créé un fichier .htaccess, qui indique un court délai d'expiration du cache pour l'image d'état de construction.

Mettez ceci dans le répertoire avec l'image d'état de construction:

ExpiresByType image/png "access plus 2 minutes"

Voici le script de construction. La cible qui publie sur gh-pages est «--publish.site.dry.run»

Avec moins de 400 lignes de configuration, nous avons:

  • Compiler les chèques
  • tests unitaires et d'intégration
  • Rapports d'essai
  • Rapports de couverture de code
  • Documents sur l'API
  • Publication sur Github

. . et ce script peut être exécuté dans ou en dehors de Jenkins, de sorte que:

  • Les développeurs peuvent exécuter ce script avant de valider, ce qui réduit le risque qu'une version interrompue ait un impact sur les autres.
  • Un échec est facile à reproduire localement.

Les resultats:

La page principale du projet présente l'état de la construction, mis à jour après chaque version, ainsi que les derniers documents sur l'API, les résultats des tests et la couverture des tests.

Jasper Blues
la source
Excellent retour, plus précis que ma réponse. +1
VonC
1
Le lien du script de construction est mort
Saikat
Avez-vous un lien en direct vers votre script?
Ian
J'ai arrêté d'utiliser cette approche - je pense que les autres réponses seront meilleures.
Jasper Blues