0

J'ai un pipeline de CD qui nécessite une confirmation de l'utilisateur à certaines étapes, donc je voudrais libérer des ressources du serveur pendant que le pipeline attend l'entrée de l'utilisateur.Jenkins 2 Pipelines déclaratifs - Est-il possible d'exécuter toutes les étapes d'un nœud (agent any) mais d'en exécuter certaines sans lui?

pipeline { 
    agent any 
    stages { 
    stage ('Build Stage') { 
     steps { 
     ... 
     } 
    } 
    stage ('User validation stage') { 
     agent none 
     steps { 
     input message: 'Are you sure you want to deploy?' 
     } 
    } 
    stage ('Deploy Stage') { 
     steps { 
     ... 
     } 
    } 
    } 
} 

Vous pouvez voir ci-dessus que j'ai un mondial agent any mais dans la validation utilisateur Phase I ajouté agent none. Est-ce que quelqu'un peut confirmer que cela fait ce que je veux (aucun agent/noeud n'attend l'entrée de l'utilisateur)? Je ne vois pas comment le vérifier, rien de différent dans le journal d'exécution ...

Si non, comment pourrais-je le faire?

+0

vous avez la réponse ici https://stackoverflow.com/questions/42159221/use-a-light-executor-for-a-declarative-pipeline-stage-agent-none –

+0

Cela semble bien mais soulève encore quelques questions , En utilisant la même étiquette pourriez-vous obtenir différents nœuds (espaces de travail) dans différentes étapes? Comment pouvons-nous faire face à cela? – codependent

Répondre

0

Cela ne fonctionnera pas comme prévu. Vous ne pouvez pas spécifier agent any sur l'ensemble du pipeline, puis attendre agent none pour ne pas occuper l'exécuteur.

Pour le prouver, vous pouvez exécuter ce code que vous avez, et alors qu'il est en attente au stade input, accédez à votre page principale et jenkins regarder le Construire Exécuteur Statut. Vous verrez qu'il y a un exécuteur qui exécute toujours votre travail.

Ensuite, passez votre pipeline à agent none et ajoutez agent any à toutes les autres étapes (en plus de votre étape d'entrée) et faites le même test. Vous pouvez voir qu'en attendant l'entrée, aucun des exécuteurs n'est occupé. En ce qui concerne votre question sur les différents espaces de travail sur différents nœuds ... En supposant que vous utilisez du code d'un SCM, il sera extrait sur chaque nouveau nœud, ce qui n'est pas un problème. La seule chose dont vous devez vous préoccuper est les artefacts que vous avez créés à chaque étape.

Il n'est pas prudent d '«espérer» que vous resterez sur le même nœud, mais Jenkins «essaiera» de vous y maintenir. Mais même dans ce cas, il n'y a aucune garantie que vous obtiendrez le même répertoire d'espace de travail.

La façon correcte de gérer cela est de stash tous les fichiers que vous avez créés ou modifiés que vous aurez besoin dans les étapes ultérieures. Puis dans les étapes suivantes, unstash les fichiers requis. Ne supposez jamais que les fichiers le feront entre les étapes qui ont leur propre déclaration de noeud.

+0

Merci pour l'information. Juste quelques doutes: dois-je utiliser des noms uniques pour cacher? Par exemple concaténer "stashedArtifact" + buildNumber. Y a-t-il un problème à cacher des artefacts tels que des fichiers war ou jar jusqu'à 80 Mo? – codependent

+0

Vous pouvez le nommer comme vous le souhaitez et l'utiliser pour le décoller. Mais je ne sais pas quelles sont les répercussions de l'utilisation du même nom pour stocker plusieurs fois. Est-ce qu'il va clober ou combiner? Pas certain. Les questions sur la taille sont répondues dans les documents ici: https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-stash-code-stash-some-files-to-be- utilisé plus tard dans la construction –