J'ai installé le Promoted Build Plugin
de Jenkins
et je suis maintenant confronté à des problèmes pour promouvoir la création d’un travail existant. Voici le scénario:
Il y a un Nightly Build
tâche qui s'exécute toutes les nuits et exécute tous les tests et mesures nécessaires;
Il y a un Deploy Build
qui accepte le paramètre $ {BUILD_NUMBER} et déploie la construction ayant le $ {BUILD_NUMBER} correspondant à partir du Nightly Build
Jusqu'ici tout va bien. C'est maintenant la partie où je veux ajouter le Build Promotions
...
Y a-t-il un moyen de promouvoir le Nightly Build #39
( remarque qu'il a déjà été construit avant ) à partir du Deploy Build
? Ou peut-être même d’ailleurs, franchement je suis un peu perdu ici: (
Je ne les vois pas avec une relation claire en amont/en aval, car ils ne possèdent pas de: exécute toujours cette construction, puis l'autre pendant l'exécution - la [Deploy Build] est exécutée parfois seulement et pas toujours après la [Nightly Build] .
Avec la version 2.23+ comportement modifié (merci AbhijeetKamble pour avoir signalé). Tout paramètre transmis par la section Paramètres prédéfinis de l'appelant (build) doit exister dans le travail appelé (deploy) travail. De plus, les restrictions des paramètres du travail appelé s'appliquent. Par conséquent, si le paramètre du travail appelé est un choix, toutes les valeurs possibles (à partir des promotions) doivent être pré-remplies. Ou utilisez simplement le type de paramètre Texte.
Oui, j'ai exactement la même configuration: un travail build (basé sur les commits SVN) et un travail exécuté manuellement deploy. Lorsque l'utilisateur sélectionne une construction à partir du travail build (y compris des versions plus anciennes), il peut ensuite accéder à Promotion Status link et exécuter diverses promotions deploy, par exemple Deploy. to DEV, Deploy to QA, etc
Code A:
Server=IP_of_my_dev_server`
Job=$PROMOTED_JOB_NAME`
BuildSelection=<SpecificBuildSelector><buildNumber>$PROMOTED_NUMBER</buildNumber></SpecificBuildSelector>
Ci-dessus, dans la section Paramètres prédéfinis, le nom situé à gauche de = indique les paramètres définis dans votre travail deploy. Et à droite de = figurent les valeurs qui seront attribuées à ces paramètres lors de l’exécution de cette promotion. Définit trois paramètres Server
, Job
et BuildSelection
.
Le paramètre Server=
Est le mien, car mon travail de déploiement peut deploy sur plusieurs serveurs. Toutefois, si votre travail deploy est codé de manière à être déployé toujours à un emplacement spécifique, vous n'en aurez pas besoin.
Le paramètre Job=
Est obligatoire, mais le nom du paramètre dépend de ce que vous avez configuré dans votre travail deploy (j'expliquerai la configuration ici). La valeur $PROMOTED_JOB_NAME
Doit rester telle quelle. Il s'agit d'une variable d'environnement connue du processus de promotion et renvoyant au nom de votre travail build (celui dans lequel le processus de promotion est configuré).
Le paramètre BuildSelection=
Est requis. Toute cette ligne doit rester telle quelle. La valeur transmise est $PROMOTED_NUMBER
, Ce que la promotion sait à nouveau. Dans votre exemple, ce serait #39
.
La coche Blocage jusqu'à la fin des projets déclenchés] incite le processus de promotion à attendre la fin du travail deploy. Sinon, le processus de promotion déclenchera le travail de déploiement et se terminera avec succès. L'attente de la fin du travail deploy présente l'avantage que, si le travail deploy échoue, l'étoile de promotion sera également marquée par un échec.
(Une petite remarque ici: l'étoile de promotion apparaîtra avec succès while le travail deploy est en cours d'exécution. En cas d'échec du déploiement, il ne passera à échec qu'après le deploy travail terminé. Logique ... mais peut être un peu déroutant si vous regardez l'étoile de la promotion avant le déploiement terminé)
Server
(ce nom doit correspondre à la configuration de la promotion Paramètres prédéfinis = dans la section précédente)Job
(ce nom doit correspondre à la configuration de la promotion Paramètres prédéfinis = dans la section précédente)Job=
de paramètres prédéfinis que nous avons configurés). De même, si aucune valeur n'est transmise par les Paramètres prédéfinis de la promotion, la valeur du premier choix sera utilisée. Si vous avez une relation un à un entre les travaux build et deploy, vous pouvez omettre le paramètre Job=
Dans la configuration de la promotion.BuildSelection
${Job}
Specified by a build parameter
BuildSelection
(sans ${...}
!)Alors maintenant, avec le travail deploy ci-dessus, vous pouvez l'exécuter manuellement et sélectionner le numéro de construction à partir du travail build que vous souhaitez déployer (dernière construction, dernière mise en oeuvre réussie, par numéro de construction, etc.). Vous l'avez probablement déjà configuré de manière très similaire. La promotion sur le travail build exécutera essentiellement la même chose et fournira le numéro de build, en fonction de la promotion exécutée.
Faites-moi savoir si vous avez des problèmes avec les instructions.
La réponse marquée est une excellente explication pour la question. Mais je voudrais suggérer une solution pour ceux qui recherchent "comment promouvoir un numéro de build spécifique depuis un autre emploi en jenkins"
Nous pouvons utiliser une solution généralisée pour forcer la promotion en utilisant CURL et REST. Vous pouvez exécuter curl à partir de scripts Shell ou Groovy.
Solution Shell utilisant CURL :
user_name="jenkins_user"
user_token="token"
promotion_name="Test_Promote"
jenkins_url="http://build-server.com"
JOB_NAME="job_name"
JOB_NO="job-no"
url="--silent -u $user_name:$user_token $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name"
curl $url
Groovy Soultion:
user_name="jenkins_user"
user_token="token"
promotion_name="Test_Promote"
jenkins_url="http://build-server.com"
JOB_NAME="job_name"
JOB_NO="job-no"
def response = "curl -u $user_name:$user_token \" $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name".execute().text
Comment générer un jeton d'utilisateur jenkins: https://jenkins.io/blog/2018/07/02/new-api-token-system/