Jenkins Pipeline sh nom d'affichage / étiquette
Avec le plugin Jenkins 2 Pipeline, il existe une fonctionnalité utile permettant un aperçu rapide des étapes du pipeline et de l'état des étapes, y compris la sortie de journalisation.
Cependant, si vous utilisez l'étape "Shell script" (sh), il ne semble pas y avoir de moyen d'étiqueter ce script avec un nom utile, donc l'affichage montre simplement une longue liste de "Shell Script" (montré dans l'image ci-dessous).
Comment puis-je attribuer un nom utile, ou comment puis-je utiliser une autre étape pour accomplir la même effet?
4 réponses
Pour autant que je sache, ce n'est actuellement pas possible. Dans le tracker Jenkins, il s'agit d'un problème Name ou alias Shell Script Step (sh) qui est similaire à votre situation:
L'étape
sh
ajoute une étape "Script Shell" dans le Pipeline. Cependant, il pourrait y avoir plusieurs de ces étapes y compris les étapes de divers plugins (par exemple, Docker), ce qui rend difficile de distinguer les étapes. Nous devrions peut être ajouter un paramètre optionnel à sh pour spécifier un nom ou alias qui serait apparaissent ensuite dans les étapes du pipeline.Par exemple, ce qui suit peut être l'étape pour npm qui montrerait comme " Shell script: npm " dans la vue pipeline.
sh cmd:"npm install", name: "npm"
Cependant, il a été fermé en tant que duplicata de l'ancien Allow stage pour fonctionner comme un bloc étiqueté qui a été corrigé récemment et semble être inclus dans v2. 2 du pipeline-stage-step-plugin (voir changelog) . Il semble que les étapes peuvent maintenant être imbriquées et elles apparaîtront dans la vue table, mais je ne pense pas que ce soit ce que vous cherchez.
Eh Bien, les temps désespérés appellent des mesures désespérées. Si vous pouvez utiliser Blue Ocean, vous pouvez utiliser une étape parallèle avec une seule ligne d'exécution.
parallel(
"This is my step name" : {
sh 'env'
}
)
J'essayais aussi la même chose mais dans un contexte différent, mon équipe ne veut pas de plusieurs fenêtres de journal sh sur L'interface utilisateur de journal, donc j'ai essayé d'utiliser plusieurs commandes UNIX en une seule ligne
e.g
jenkinsPipeline.sh "echo \"PATH: $PATH\";java -version;echo PROJ DIR = $projectDirectory;env > env.txt;cat env.txt;ls && cd $projectDirectory && gradle --refresh-dependencies clean assemble"
Et cela a fonctionné pour le script Jenkins pipeline dans le travail Jenkins.
mais si j'utilise la bibliothèque partagée pour étendre le pipeline et la même stratégie, alors cela ne fonctionnait pas ou bien créer plusieurs fenêtres comme d'habitude pour sh log in UI.
Essayez ceci, une bonne solution de contournement
import org.jenkinsci.plugins.workflow.cps.CpsThread
import org.jenkinsci.plugins.workflow.actions.LabelAction
def test() {
def xyz = "Prints PWD"
try {
sh script: 'pwd'
}
finally {
CpsThread.current().head.get().addAction(new LabelAction("Shell script ${xyz} "))
}
}