web-dev-qa-db-fra.com

Comment puis-je créer Jenkins CI avec Git trigger sur les poussées à maîtriser?

J'essaie de configurer Jenkins-ci pour un projet utilisant GitHub. J'ai déjà configuré Jenkins avec les plugins appropriés. Je veux que Jenkins n'exécute des scripts de construction que lorsque quelqu'un du projet insiste pour le maîtriser. Jusqu'à présent, j'ai été en mesure de le configurer de manière à ce qu'une construction soit déclenchée à tout moment, même si tout le monde le souhaite, mais c'est trop large. Je l'ai fait avec des points d'ancrage de service après réception sur Git.

J'ai lu le wiki Jenkins et quelques tutoriels, mais il manque ce détail particulier ... est-ce que cela a quelque chose à voir avec les sondages? Ou faut-il travailler du côté de Git, de sorte que Git ne déclenche Jenkins que lorsque master est modifié?

199
Ziggy

Comme déjà noté par Gezzed dans son commentaire, il existe cependant une bonne solution (décrite dans Polling doit die: déclencher Jenkins construit à partir d'un hook Git):

  • Définissez le déclencheur de génération du travail Jenkins sur Poll SCM , mais ne spécifiez pas un horaire.

  • Créer un déclencheur post-réception GitHub pour notifier l'URL

    http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
    
  • Cela déclenchera toutes les générations qui interrogent le référentiel Git spécifié.

  • Cependant, polling vérifie si quelque chose a été poussé vers la branche utilisée.

Ça fonctionne parfaitement.

185
olenz

À partir de la version 0.5, le plugin GitHub pour Jenkins peut déclencher une construction lorsqu'une modification est transmise à GitHub .

32
docwhat

Au lieu de déclencher des constructions à distance, modifiez la configuration de votre projet Jenkins pour déclencher les constructions par interrogation.

Jenkins peut interroger sur une base interne fixe ou sur une URL. Ce dernier est ce que vous voulez ignorer les générations s'il n'y a pas de modifications pour cette branche. Les détails exacts sont dans la documentation . Pour l’essentiel, il vous suffit de cocher l’option "Poll SCM", de laisser la section de planification vierge et de définir une URL distante de manière à atteindre JENKINS_URL/job/name/polling.

Si vous avez un environnement Jenkins sécurisé, contrairement à /build, l'URL /polling nécessite une authentification. Les instructions ici ont des détails. Par exemple, j'ai un hook GitHub Post-Receive allant à username:apiToken@JENKIS_URL/job/name/polling.

9
Wei Wang

Pour GitLab, utilisez ces étapes:

  1. Allez dans les paramètres de votre projet → Web hooks
  2. Entrez l'URL "Build Now" de votre projet Jenkins en tant qu'URL d'événement Push:

    http://server.com/jenkins/job/project_name/build?delay=0sec par exemple

  3. Cliquez sur Add Web Hook puis sur test hook.

Ensuite, chaque fois que vous vous engagez dans le référentiel, le raccordement Web est déclenché et une construction est créée. Veillez à définir votre espace de travail Jenkins sur delete workspace before each build afin d'obtenir une nouvelle copie du nouveau code.

8
etusm

Pas lié à Git, mais ci-dessous, je vais vous aider avec la configuration du travail Jenkins en détail avec Mercurial. Cela peut aider les autres avec un problème similaire.

  1. Installer le plugin URL Trigger
  2. Accédez à la page de configuration du travail et sélectionnez l'option Poll SCM. Définissez la valeur sur * * * * *
  3. Cochez l'option: [URLTrigger] - Poll with a URL. Vous pouvez maintenant sélectionner certaines options telles que le changement de date de modification, le contenu de l'URL, etc.
  4. Dans les options, sélectionnez Modification du contenu de l'URL, sélectionnez la première option - Monitor change of content
  5. Enregistrez les modifications.

Maintenant, déclenchez des modifications dans le référentiel Mercurial à l'aide de vérifications de test.

Vérifiez que le travail Jenkins s'exécute maintenant en détectant les modifications apportées au SCM. Lorsque la construction est exécutée en raison de modifications apportées à Mercurial, le texte Started by an SCM change apparaît. Sinon, l'utilisateur qui l'a démarré manuellement.

4
Krishnam

J'espère que cela vous aidera: Comment déclencher une construction Jenkins sur Git commit

Il suffit d'utiliser curl pour déclencher un travail Jenkins à l'aide des crochets Git fournis par Git.

La commande curl http://localhost:8080/job/someJob/build?delay=0sec peut exécuter un travail Jenkins, où someJob représente le nom du travail Jenkins.

Recherchez le dossier "hooks" dans votre dossier caché .git. Renommez le fichier "post-commit.sample" en "post-commit". Ouvrez-le avec le Bloc-notes, supprimez la ligne ": Rien" et collez-y la commande ci-dessus.

C'est ça. Chaque fois que vous effectuez une validation, Git déclenchera les commandes de post-validation définies dans le fichier.

3
Nav

Intégration continue avec Jenkins, une fois que le code est poussé dans le référentiel à partir de la commande/interface graphique Git:

  1. Créez un travail dans Jenkins avec uniquement le nom du travail et sélectionnez le type de projet libre. Cliquez sur OK. La page suivante n'ajoute rien - il suffit de cliquer sur Save.
  2. Accédez au référentiel Git local dans lequel vous avez le code source et accédez au dossier .git/hooks.
  3. Le dossier hooks contient les quelques fichiers. Vérifiez le "post-commit". S'il n'est pas présent, créez un fichier "post-commit" sans extension de fichier:

    C:\work\test\\.git\hooks\post-commit
    
  4. Editez le fichier "post-commit" avec la commande ci-dessous. Assurez-vous qu'il est présent dans votre dossier de crochets de code source local.

    curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
    

    Exemple:

    curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
    

    5.

    userName: nom d'utilisateur Jenkins

    jobName: Nom du travail de la construction

    apiToken: Pour obtenir votre jeton d'API, allez sur votre page d'utilisateur Jenkins (en haut à droite de l'interface). Il est disponible dans le menu "Configurer" à gauche de la page: "Afficher le jeton de l'API"

  5. Apportez des modifications à votre code source et validez-le dans le référentiel.

  6. Votre travail, http://localhost:8080/jenkins/job/Gitcommittest/, devrait être construit.

3
Venkata Naresh Babu

Vous devez spécifier la branche. Par défaut, il écoute n'importe quoi. Voir l'article du blog Hudson: plugins Git et Maven.

3
Adam Dymitruk

Le plugin générique Webhook Trigger peut être configuré avec des filtres pour y parvenir.

Lorsque configuré avec

  • Une variable nommée ref et une expression $.ref.
  • Un filtre avec le texte $ref et une expression de filtre du type ^refs/heads/master$.

Ensuite, ce travail sera déclenché pour chaque Push to master. Pas de vote.

Vous voulez probablement que Webhook utilise plus de valeurs pour effectuer la construction. Ajoutez simplement plus de variables, avec JSONPath, pour choisir ce dont vous avez besoin.

Il existe quelques cas d'utilisation ici: https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd =

2
Tomas Bjerre

Dans mon organisation actuelle, nous ne le faisons pas en maître, mais sur les branches develop et release/(nous utilisons Git Flow), afin de générer des versions d'instantané.

Comme nous utilisons un pipeline multi-branches, nous le faisons dans le fichier Jenkins avec la syntaxe lorsque {} ...

stage {
    when { 
        expression { 
            branch 'develop'
        }
    }
}

Ceci est détaillé dans cet article de blog: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline

1
jesses.co.tt

Les réponses ci-dessus sont correctes mais je m'adresse à ceux qui sont novices ici pour leur simplicité

en particulier pour définir le déclencheur de construction du pipeline:

Considérez que vous avez deux branches Github: 1.master, 2.dev et Jenkinsfile (où le script de pipeline est écrit) et d’autres fichiers sont disponibles sur chaque branche.

Configurer le nouveau projet Pipeline (pour la branche dev)

## 1.Intégration du code avec git-plugin et approche basée sur cron Prérequis Le plugin git doit être installé et configuré avec votre nom et votre adresse e-mail.

  1. Section générale.Cochez la case "Ce projet est paramétré" et ajoutez Nom-SBRANCH Valeur par défaut-"réf./Télécommandes/Origine/dev".
  2. Section Construire des déclencheurs "Case à cocher" Sondage SCM "et programmez selon le besoin de vérifier les validations, par exemple" */1 * * * * "pour vérifier chaque minute.
  3. Section de définition de pipeline. Sélectionnez - Script de pipeline dans GDS -> sélectionnez git—> addRepository URL—> ajoutez des informations d'identification git—> choisissez Avancé—> ajoutez Nom- Origine, RefSpec- '+ refs/têtes/dev: refs/remotes/Origine/dev '(dev is github branch) -> Branches à construire - $ {SBRANCH} (Nom du paramètre à partir de la référence 1 er) -> Chemin du script—> Jenkinsfile -> Décocher Lightweightcheckout
  4. Appliquer—> enregistrer

## 2. Intégration du code: approche de github-plugin et webhook Prérequis Le plugin Github doit être installé et le serveur Github doit être configuré, la connexion doit être testée sinon. considérer la configuration suivante

Configurer le plugin Github avec un compte sur Jenkins

Section GitHub Ajouter un serveur Github si non présent URL de l'API: https://api.github.com Informations d'identification: ajoutez un texte secret (cliquez sur le bouton Ajouter: sélectionnez un type de texte secret) avec la valeur Jeton d'accès personnel (générez-le) depuis vos comptes Github -> paramètres -> paramètres de développeur -> jeton d'accès personnel—> ajouter un jeton—> vérifier les étendues—> copier le jeton) Tester la connexion—> vérifier s'il est connecté à votre compte Github ou non Cocher la case avec Gérer les crochets Dans la sous-section préalable, il suffit de sélectionner le précédent identifiant pour 'secret partagé'

Ajoutez webhook s'il n'a pas été ajouté à votre référentiel par

  1. Accédez au paramètre Référentiel Github -> add webhook—> add URL
    http: // Public_IP: Jenkins_PORT/github-webhook /
  2. Ou si vous n'avez pas Public_IP, utilisez ngrok . Installez, authentifiez, obtenez l'IP publique à partir de la commande ./ngrok http 80 (utilisez votre jenkins_port) puis ajoutez webhook -> ajoutez une URL http: // Ngrok_IP/github-webhook /
  3. Testez-le en fournissant la charge utile à partir de la page webhook et vérifiez si vous obtenez le statut 200 ou non.

Si vous avez un plugin de requêtes Github Pull, configurez-le également avec l'URL publiée Jenkins.

  1. Section générale.Cochez la case - 'Projet Github' ajouter l'URL du projet - (lien github se terminant par '.git /')
  2. Section générale.Cochez la case à cocher - 'Ce projet est paramétré' et ajoutez Nom-SBRANCH Valeur par défaut-'refs/remotes/Origin/dev '
  3. Case à cocher de construction triggers.section.Check - 'Déclencheur de hook GitHub pour la scrutation GITScm'
  4. Section de pipeline du pipeline: sélectionnez - Script de pipeline dans SCM—> sélectionnez git—> addRepository URL—> ajoutez des informations d'identification git—> choisissez Avancé -> ajoutez un nom - Origine, RefSpec- '+ refs/heads/dev: refs/remotes/Origine/dev '(la branche dev est github) -> Branches à construire - $ {SBRANCH} (Nom du paramètre à partir du point 1.) -> Chemin du script—> Jenkinsfile—> Décocher Lightweightcheckout
  5. Appliquer—> enregistrer
1
Akshay Shikre

Utilisez le plug-in du générateur de requêtes d'extraction: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin

C'est vraiment simple. Vous pouvez ensuite configurer les webhooks GitHub pour déclencher les constructions.

0
richardpringle