web-dev-qa-db-fra.com

Comment promouvoir un numéro de build spécifique provenant d'un autre emploi à Jenkins?

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:

  1. 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;

  2. 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

    • Dites que le [Nightly Build] a fonctionné et a construit avec succès l'artefact n ° 39
    • Maintenant, je peux juste exécuter la [Deploy Build] en passant à # 39 en tant que paramètre
      • Les artefacts de [Nightly Build] # 39 vont être déployés

Jusqu'ici tout va bien. C'est maintenant la partie où je veux ajouter le Build Promotions...

This is exactly what I need to achieve

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] .

61
Matheus

Mise à jour à partir de la version 2.23 du plugin paramétré:

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.

Solution

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

Voici comment configurer la promotion sur build job:

  • Vous aurez besoin de ces plugins: Plugin de déclenchement paramétré , Plugin de modules promotionnels
  • Vous devrez également configurer par défaut Archiver les artefacts l'action post-build sur ce travail de build.
  • Coche Promouvoir les constructions quand
  • Définir Nom "Déployer vers le DEV"
  • Sous Critères coche niquement lorsque approuvé manuellement
  • Sous Actions utilisez Le ​​déclencheur/l'appel s'appuie sur d'autres projets
  • Dans Projets à construire entrez le nom de votre travail deploy ici
  • Case à cocher Bloquer jusqu'à ce que les projets déclenchés finissent leurs constructions
  • Marquer cette construction comme un échec si la construction déclenchée est pire ou égale à: FAILURE (à ajuster en fonction des statuts de votre travail de déploiement)
  • Paramètres prédéfinis (Code A)

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é)

Voici comment configurer le travail deploy

  • Vous aurez besoin de plugin Copy Artifacts
  • Sous Cette construction est paramétrée
  • Configurez un paramètre de type Choix (ou Texte) avec nomServer (ce nom doit correspondre à la configuration de la promotion Paramètres prédéfinis = dans la section précédente)
  • Choix: Entrez la liste des adresses IP de serveur possibles qui seraient utilisées par les Paramètres prédéfinis de la section précédente (voir la note de mise à jour ci-dessous).
  • Configurez un paramètre de type Choix (ou Texte) avec nomJob (ce nom doit correspondre à la configuration de la promotion Paramètres prédéfinis = dans la section précédente)
  • Choix: Entrez le nom de votre travail build par défaut. Cela n'est nécessaire que si vous déclenchez manuellement le travail deploy. Lorsque le travail deploy est déclenché à partir de la promotion, la promotion fournira la valeur (le 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.
  • Mise à jour:depuis la version 2.23 de Parameterized Trigger , les choix disponibles dans la configuration de la tâche deploy doivent avoir toutes les valeurs possibles. les paramètres prédéfinis de la promotion. Si vous ne voulez pas cette limite, utilisez "Texte" au lieu de "Choix"
  • Configurez un paramètre de type Sélecteur de construction pour l'artefact de copie avec nom: BuildSelection
  • Sélecteur par défaut: Dernière version réussie
  • Sous Build étapes
  • Configurer Copier les artefacts d'un autre projet
  • Dans Nom du projet ​​entrez ${Job}
  • À Quelle version choisissez Specified by a build parameter
  • Dans Nom du paramètre entrez BuildSelection (sans ${...}!)
  • Configurez le reste en conséquence pour vos artefacts qui seront copiés du travail build vers l'espace de travail du travail deploy.
  • Utilisez les artefacts copiés dans le travail deploy selon vos besoins pour déployer

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.

119
Slav

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/

1
Biju