web-dev-qa-db-fra.com

Comment déclencher à distance la construction d'un projet de pipeline multibranches Jenkins?

Le titre le dit surtout. Comment déclencher un projet de pipeline multibranches Jenkins à partir d'un référentiel git distant?

L'option de déclencheur de génération "Constructions de déclencheur à distance" ne semble pas fonctionner, car aucun jeton que vous avez défini n'est enregistré.

15
Marmoy

Pour le moment (Jenkins 2.22), l'option de déclencheur de génération "Le déclencheur est construit à distance" est visible dans la configuration des tâches du pipeline multibranches, mais ne fonctionne pas (si vous le cochez et spécifiez un jeton, il est réinitialisé après l'enregistrement). Selon this , il est intentionnel que le déclencheur ne puisse pas être défini, mais qu’un bogue apparaisse comme une option. 

Dans le même fil, ils expliquent comment déclencher des constructions pour chaque projet individuel (branche) dans un projet de pipeline multibranches. J'avais besoin d'une configuration dynamique qui fonctionnerait pour les branches créées après la configuration du déclencheur. Ainsi, plutôt que le point de terminaison suggéré par le thread (/job/project-name/job-name/build, qui aurait dû être /job/job-name/project-name/build, car les projets sont créés à partir de branches d'un travail), j'ai constaté: que le point final à utiliser est /job/job-name/build. Pour que cela fonctionne, vous devez créer un utilisateur avec un jeton API (allez dans Gérer Jenkins -> Gérer les utilisateurs -> Icône Engrenage -> Afficher le jeton API), et utilisez-les comme nom d'utilisateur et mot de passe dans votre requête.

La solution peut sembler évidente pour ceux qui sont habitués à travailler avec l'API Jenkins REST, mais lorsque vous connaissez les projets de pipeline multibranches et l'API REST, le fait d'être explicite ne fait pas de mal.

15
Marmoy

Je n'ai pas pu obtenir le jeton d'API décrit dans la réponse acceptée, car il n'existe pas de lien appelé "Gérer les utilisateurs" même si je me connecte en tant qu'administrateur. Au lieu de cela, j'ai reçu le jeton décrit dans le Jenkins Wiki :

Le jeton API est disponible dans votre page de configuration personnelle. Cliquez sur votre nom dans le coin supérieur droit de chaque page, puis cliquez sur "Configurer" pour voir votre jeton API

Une fois que vous avez le jeton, la requête curl suivante déclenche une nouvelle construction pour un pipeline multibranches (Remplacez les espaces réservés commençant par $).

curl -X POST -u "$jenkins_username:$api_token" "http://$jenkins_url/job/$my-pipeline/job/$branch_name/build?token=BUILD_TOKEN"

Remarques:

  1. Si le nom du pipeline ou de la branche contient des caractères spéciaux, vous devez le coder. Par exemple, / devient %252F.
  2. Le paramètre de requête token est facultatif.
  3. Cette réponse a été vérifiée dans Jenkins v2.6.
2
Abhijit Sarkar

Je viens tout juste de surmonter cet obstacle et je voudrais partager ma note. 

Dans ma configuration (Jenkins 2.60.2), il n’existe aucun moyen d’activer l’option Trigger builds à distance (par exemple, à partir de scripts), car je ne peux que "Afficher la configuration". Cela m'a empêché de déclencher le pipeline en envoyant HTTP GET au noeud final (/ job/nom-projet/job/nom-travail/génération).

Cependant, j'ai découvert que je pouvais toujours déclencher en envoyant HTTP POST jusqu'au point final.

Vous devrez fournir un numéro valide dans la demande ou désactiver l'option "Empêcher les exploits de demande intersites" dans Configurer la sécurité globale.

Cordialement,

0
Lam Ly

Sans désactiver la protection CSRF (Cross Site Request Forgery), vous pouvez utiliser les commandes suivantes:

crumb=$(curl -s 'http://USERNAME:API_TOKEN@JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -X POST -H "$crumb" "http://USERNAME:API_TOKEN@JENKINS_URL/job/JOB_NAME/build"

Remplacez les lettres majuscules par les valeurs appropriées.

0
Devesh Chanchlani