web-dev-qa-db-fra.com

Comment déclencher un travail Jenkins 2.0 Pipeline à partir d'une demande d'extraction GitHub

Il semble que GitHubPullRequestBuilder n'est pas compatible avec les travaux de pipeline Jenkins v2.0. 

Comment configurer un travail de pipeline pour qu'il soit déclenché à partir d'un événement de demande d'extraction GitHub?
La documentation sur ce sujet est rare et je ne trouve aucun exemple de cela. Ou est-il préférable de créer un lien Web dans GitHub pour déclencher le job de pipeline sur l'événement PR? 

22
user6253266

Le moyen le plus simple d'utiliser Pipeline avec les requêtes GitHub consiste à placer le script dans votre référentiel sous le nom Jenkinsfile, puis à installer le plug-in GitHub Branch Source. Documentation

2
Jesse Glick

J'ai eu le même problème. Voici ce qui a fonctionné pour moi 

Pré-demande

  • Jenkins ver. 2+ (J'utilisais Jenkins 2.60) 
  • Compte Github (ou Githhub Entreprise) 
  • Votre github et Jenkins doivent être capables de se parler.

Sur Github

  1. créer un jeton d’accès personnel (PAT) github avec les droits correspondants.
  2. Pour votre repo, créez un Webhook avec
    • URL en tant que YourJenkinsURL/github-webhook/
    • Choisissez "Permettez-moi de sélectionner des événements individuels" et cochez la case "Demande d'extraction". 
  3. Ajoutez un Jenkinsfile au dossier racine de votre référentiel. À des fins de test, vous pouvez placer le contenu dans un monde de base comme ci-dessous.
 pipeline {
 agent quelconque 
 étapes {
 stage ('Test') {
 pas {
 echo 'Hello World ...'
 } 
 } 
 } 
 } 

Sur Jenkins

  1. Installez le plugin GitHub Pull Request Builder. (Vous avez également besoin du plugin “Github” mais cela devrait normalement être installé dans le cadre de Jenkins version 2+)
  2. Jenkins - Lettres de créance
    • Ajoutez le jeton d’accès personnel (PAT) github en tant qu’information d’identité «texte secret».
    • Ajoutez le nom d'utilisateur-mot de passe de github comme identifiant ‘nom d'utilisateur-mot de passe’. 
  3. Gérer Jenkins - Configurer le système
    • Github - Serveurs Github: Cela fait partie du plugin Github. Ajouter un serveur github. ‘URL de l’API’ La valeur par défaut est https://api.github.com . Si vous utilisez Enterprise Github, remplacez-le par Enterprise Github url suivi de/api/v3. Pour les informations d'identification, sélectionnez l'option PAT. Testez la connexion. La case "Gérer les points d'ancrage" est cochée. 
    • GitHub Pull Request Builder: pour ‘URL API du serveur GitHub’, utilisez la même adresse URL que celle spécifiée dans la section Serveur Github. Laissez le "secret partagé" vide. Pour les identifiants, utilisez les identifiants ‘username-password '. Testez les informations d'identification pour vous assurer de son bon fonctionnement. Dans mes paramètres, la case "Gérer automatiquement les Webhooks" a été cochée. 
  4. Pipeline Job
    • Créez un nouvel élément en utilisant l’option ‘Pipeline’. Remarque: Il s'agit du travail Pipeline Vanilla, pas du pipeline Multibranch.
    • Section Général: Vérifiez ‘Projet Github’ - URL du projet: Entrez l’URL de votre dépôt Github. 
    • Construire des déclencheurs: Cochez la case 'Générateur de demandes d'extraction GitHub'
      • Pour l'option "Informations d'identification de l'API GitHub", sélectionnez l'option que vous avez définie pour le générateur de demande d'extraction GitHub dans l'écran "Gérer Jenkins - Configurer le système". 
      • Pour la liste des administrateurs: ajoutez votre nom d'utilisateur 
      • Cochez Utiliser les crochets github pour déclencher la construction 
    • Pipeline:
      1. Sélectionnez ‘Script Pipeline from SCM’. Notez que cela suppose que le dossier racine de votre référentiel contiendra un "Jenkinsfile" 
      2. SCM: sélectionnez "Git" 
      3. Dépôts - entrez les détails du dépôt. Pour les informations d'identification, utilisez les informations d'identification basées sur le nom d'utilisateur/mot de passe. 
      4. Cliquez sur Avancé et ajoutez refspec comme +refs/pull/*:refs/remotes/Origin/pr/*
      5. Branch - devrait être ${sha1}
      6. Chemin du script: Jenkinsfile par défaut, laissez tel quel. 
      7. Caisse légère - Décochez cette case ( https://github.com/jenkinsci/ghprb-plugin/issues/507 )

C'est tout. Vous êtes prêt. La création d'un PR sur une branche principale de votre référentiel devrait maintenant déclencher votre travail de pipeline Jenkins

Quelques observations

  • La redélivraison de la charge Webhook d'un PR de github ne déclenche pas le pipeline, mais l'ouverture d'un nouveau PR ou même la réouverture d'un PR fermé sur github déclenche le job de pipeline.
  • Dans Configuration du travail de pipeline, si vous choisissez «Script de pipeline» et collez votre script de pipeline ici, le travail ne se déclenche pas !!!
29
Deepak Rao

Le flux en un mot peut aller comme ceci:

  1. Vous créez votre pipeline en tant que code et vous l'enregistrez dans un fichier appelé Jenkinsfile au répertoire racine de votre projet. Ce code devrait décrire comment votre projet sera construit. Voir ici pour des exemples: https://jenkins.io/doc/pipeline/examples/

  2. Ensuite, vous devez créer un nouvel élément "Projet de pipeline multibranches" dans votre Jenkins. Vous devez configurer ceci de manière à analyser votre rapport de l’étape 1. 

  3. Désormais, chaque fois que vous aurez une nouvelle agence de relations publiques ouverte sur votre dépôt Étape 1, celle-ci sera extraite et construite selon les instructions de Jenkinsfile qui l’accompagnent. Vous pouvez définir davantage de conditions sur ce qui est construit et à quel moment si vous le souhaitez.

Remarques:

  1. Exemple de documentation "Projet de pipeline Multibranch": https://jenkins.io/doc/book/pipeline-as-code/ (faites défiler jusqu'à Projets de pipeline Multibranch)

  2. Gardez à l'esprit qu'obtenir le plugin pour créer un PR après avoir recommandé le PR ne fonctionne pas. Une discussion est en cours d’analyse ici: https://github.com/jenkinsci/gitlab-plugin/issues/298 Il existe des solutions de contournement (également décrites dans cette discussion), mais elles sont assez compliquées à installer.

1
user3837712

Suivez les étapes ci-dessous pour déclencher le travail Jenkins automatiquement sur la demande Pull générée sur GitHub

  1. Créez un hook Web sur GitHub, c'est-à-dire http: /// generic- Webhook-trigger/invoke
  2. Type de contenu: application/json
  3. Sélectionner la demande d'extraction en tant qu'événement Maintenant, la partie de configuration github est terminée.

Configuration du travail Jenkins

  1. Téléchargez le déclencheur Webhook générique dans Jenkins

  2. Configuration Git Hub sur Jenkins

Configuration Git Hub

7.Sélectionnez le déclencheur Webhook générique sur jenkins8. Configuration du déclencheur Webhook générique sur Jenkins et suivez l'étape 9

9.À l'issue de l'étape 7, le travail Jenkins sera déclenché sur PullRequest 10. L'étape 8 est requise pour obtenir des informations de Pull Request Payload11. Configuration de la branche dans Generic Webhook Trigger pour obtenir les détails de la branche à partir de Pull Request

Merci

0
Amarendra Kumar