Existe-t-il un moyen d'afficher l'état de la construction Jenkins sur le fichier 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 est compilé et qu'il exécute des tests unitaires et d'intégration avant de finalement produire la documentation et la publication des ensembles.
Il y a toujours un risque de commettre par inadvertance quelque chose qui casse la construction. Il serait bon que les utilisateurs visitant la page du projet GitHub sachent que le maître actuel est dans cet état.
Ok, voici comment vous pouvez configurer Jenkins pour définir les statuts de construction de GitHub. Cela suppose que vous avez déjà Jenkins avec le plugin GitHub configuré pour créer des builds pour chaque Push.
Allez sur GitHub, connectez-vous, allez à Paramètres, Jetons d'accès personnel, cliquez sur Générer un nouveau jeton.
Check repo: status (Je ne suis pas sûr que ce soit nécessaire, mais je l’ai fait et cela a fonctionné pour moi).
Générez le jeton, copiez-le.
Assurez-vous que l'utilisateur GitHub que vous allez utiliser est un collaborateur de référentiel (pour les référencements privés) ou un membre d'une équipe avec un accès Push and Pull (pour les référentiels d'organisation) aux référentiels que vous souhaitez créer.
Allez sur votre serveur Jenkins, connectez-vous.
Sous crochet Web GitHub, sélectionnez laissez Jenkins gérer automatiquement les URL de hook, puis spécifiez votre GitHub nom d'utilisateur et le jeton OAuth vous avez à l'étape 3.
Vérifiez que cela fonctionne avec le bouton Test des informations d'identification. Enregistrer les paramètres.
Trouvez le travail Jenkins et ajoutez Définir le statut de construction sur le commit de GitHub aux étapes post-build
C'est ça. Maintenant, faites un test de construction et allez dans le référentiel GitHub pour voir si cela fonctionne. Cliquez sur Branches dans la page du référentiel principal pour voir les statuts de construction.
Vous devriez voir des coches vertes:
Entre-temps, l'interface utilisateur de Jenkins et GitHub a un peu changé et il m'a fallu un certain temps pour comprendre comment configurer Jenkins 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 travail Jenkins comme étant déclenché par un Webhook ou par une interrogation. Ce sont les mesures que j'ai prises pour le faire fonctionner:
repo:status
Configure System
et ajoutez le OAuth Secret en tant que serveur GitHub - utilisez Secret Text
en tant que méthode d'authentification pour mettre le OAuth Secret à l'intérieur.Set GitHub commit status
en tant que Action post-build . Définissez le résultat d'état sur One of the default messages and statuses
.Vous verrez maintenant le statut de vos commits et branches:
Ce que j'ai fait est assez simple:
Ajouter un plugin Post Task qui met toujours le succès
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!\"
}"
Ajouter un plugin post-tâche qui mettra un échec si "marqué comme é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!\"
}"
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!\"
}"
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 fichier README.md
:
Le API de statut de validation vous permet d'afficher le " API d'état de dépôt ".
Et depuis le 26 avril 2013, vous pouvez maintenant voir le statut de la compilation sur votre page de branche du 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 d'avoir uniquement Jenkins.
Depuis le 30 avril 2013, le noeud final d'API pour les statuts de validation a été étendu pour autoriser les noms de branche et de tag , ainsi que les SHA de validation .
Il y a aussi ce plugin qui vous donnera une URL de badge que vous pouvez poster dans votre README.md et qui ressemble à ceci
https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin
Si vous avez le plugin Github
installé sur votre Jenkins
, vous pouvez le faire dans le Post build actions
comme ceci:
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/)
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 que cela fonctionne:
Sur la page Web GitHub de votre référentiel:
Sur le serveur Jenkins: (Assurez-vous que le plugin Git et GitHub est installé)
Assurez-vous également que le compte GitHub utilisé par Jenkins est un collaborateur du référentiel. Je l'ai défini avec le niveau d'autorisation d'écriture.
J'espère que cela t'aides.
J'ai suivi les instructions de Alex et cela a fonctionné.
Cependant, pour GitHub Enterprise, vous devez modifier l'URL de l'API lors de l'ajout du serveur à Jenkins.
Par exemple, si votre société est creditcard.com, votre URL serait:
Jently met à jour votre statut de validation de Github (comme décrit par @vonc ci-dessus). Malheureusement, ils n'ont pas encore implémenté le API d'état du référentiel
Modifier:
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 particulier: (les réponses ci-dessus étaient excellentes - merci!)
Comme notre serveur de compilation ne se trouve pas sur Internet, nous avons un script pour publier le statut de la compilation dans la branche gh-pages de github.
GitHub met en cache les images. Nous avons donc créé le fichier .htaccess, qui indique un court délai de mise en cache pour l'image de statut de la construction.
Mettez ceci dans le répertoire avec l'image de build-status:
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:
. . et ce script peut être exécuté à l'intérieur ou à l'extérieur de Jenkins, de sorte que:
Les résultats:
Page principale du projet a le statut de construction, mis à jour après chaque construction, ainsi que les derniers documents API, résultats de test et couverture de tests.