web-dev-qa-db-fra.com

Jenkins Pipeline sh nom/étiquette

Le plug-in Jenkins 2 Pipeline offre une fonctionnalité utile permettant un aperçu rapide des étapes du pipeline et de l'état des étapes, y compris la sortie de la journalisation.

Toutefois, si vous utilisez l’étape "Shell script" (sh), il ne semble pas y avoir de moyen de lui attribuer un nom utile. L‘écran affiche simplement une longue liste de "Shell Script" image ci-dessous).

Comment attribuer un nom utile ou comment utiliser une autre étape pour obtenir le même effet?

 enter image description here

47
goofballLogic

Mise à jour février 2019:

Selon la réponse de gertvdijk ci-dessous , il est maintenant possible de attribuer une étiquette facultative à l'étape sh , à partir de la version 2.28, et pour ceux qui ne peuvent pas encore mettre à niveau, il existe également une solution de contournement. S'il vous plaît vérifier sa réponse pour plus de détails et commentaires!


Version précédente (survolez-la pour la voir):

Pour autant que je sache, ce n'est actuellement pas possible. Dans le Jenkins tracker, il existe un nom ou alias Shell Script Step (sh) issue qui est semblable à votre situation:

L'étape sh ajoute une étape "Shell Script" dans le pipeline. Toutefois, il pourrait y avoir plusieurs étapes de ce type, y compris des étapes de divers plugins (par exemple, Docker), ce qui rend difficile la distinction des étapes . Nous devrions peut-être ajouter un paramètre optionnel à sh pour spécifier un nom ou alias qui apparaîtrait alors dans les étapes du pipeline . Par exemple, l’étape suivante peut être l’étape pour npm qui s’affichera sous la forme «Shell script: npm» dans la vue du pipeline.

sh cmd:"npm install", name: "npm"
Cependant, il a été fermé en tant que duplicata de l’ancien Allow stage to fonctionne comme un bloc étiqueté qui a été corrigé récemment et semble être inclus dans v2.2 du plug-in pipeline-stage-step-step (voir changelog) .

Il semble que les étapes puissent maintenant être imbriquées et qu'elles apparaîtront dans le Voir la table, mais je ne pense pas que c'est ce que vous cherchez.

23
Morfic

Eh bien, les temps désespérés appellent des mesures désespérées. Si vous pouvez utiliser Blue Ocean, vous pouvez utiliser un pas parallèle avec une seule ligne d'exécution.

        parallel(
            "This is my step name" : {
                sh 'env'
            }
        )
2
whitediver

La version 2.28+ du "Plugin Nœuds et processus de pipeline" a obtenu l'option label pour l'étape sh maintenant avec JENKINS-55410 :

étiquette (facultatif)

Étiquette à afficher dans la vue des étapes du pipeline et détails de l'océan en bleu pour l'étape à la place du type d'étape. La vue est donc plus significative et spécifique à un domaine plutôt que technique.

  • Type: chaîne

Par exemple.:

sh "echo foo", label: "my step"

Si vous ne pouvez pas encore effectuer la mise à niveau, une autre option consiste à utiliser le plugin Labeled Pipeline Steps .

2
gertvdijk
sh "echo foo", label: "my step"

Ça ne marche pas pour moi 

Ce doit être:

sh script: "echo foo", label: "my step"

https://stackoverflow.com/a/54787322/6847446

1
Nils

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} "))
    }
}
1
sandy

J'essayais également la même chose, mais dans un contexte différent. Mon équipe ne souhaitait pas avoir plusieurs fenêtres de journalisation sh sur l'interface utilisateur du journal. J'ai donc essayé d'utiliser plusieurs commandes UNIX sur une seule ligne Par exemple 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 de pipeline Jenkins dans le travail Jenkins . mais si j'utilise une bibliothèque partagée pour étendre le pipeline et la même stratégie, cela ne fonctionnait pas ou ne créait pas plusieurs fenêtres comme d'habitude pour le journal sh dans l'interface utilisateur.

0
ARUN007

Après une excellente réponse, j’ai créé un petit wrapper de script qui encapsule l’étape sh dans un bloc try/finally.

Utilisation de base:

wrapper.script script: 'echo the invisible script', returnStdout: true, stepName: "description #1"

Affiche "description n ° 1" au lieu du texte générique.

Le code source complet et les instructions d'installation sont ici https://github.com/ael-computas/jenkins-script-wrapper

Peut facilement être installé en tant que bibliothèque sur votre serveur Jenkins.

0
Anders Elton

Ce n'est pas parfait, mais je trouve généralement suffisant d'ajouter une étape d'écho décrivant ce que l'étape suivante tente d'accomplir. Quelqu'un qui ne l'a jamais vu auparavant devrait être capable de le comprendre rapidement.

echo "Testing with Ping"
bat "ping www.stackoverflow.com"
echo "Getting IPs"
bat "nslookup www.stackoverflow.com"
0
Randall Hood