70 votes

Jenkins Pipeline sh nom / étiquette

Avec Jenkins 2 Pipeline plugin, il y a une fonctionnalité utile permettant un rapide aperçu des étapes du pipeline et le statut de mesures, y compris la sortie de journalisation.

Toutefois, si vous utilisez le "script Shell" (sh) de l'étape, il ne semble pas être un moyen de l'étiquette que le script avec un nom utile, de sorte que l'écran affiche simplement une longue liste de "Script Shell" (comme illustré dans l'image ci-dessous).

Comment puis-je attribuer un nom utile, ou comment puis-je utiliser une autre étape pour accomplir le même effet?

enter image description here

40voto

Morfic Points 11543

Pour autant que je sais, c'est pas possible. Dans le Jenkins tracker, il y a un Nom ou alias Shell Script (sh) problème qui est similaire à votre situation:

L' sh étape ajoute un "Shell Script" étape dans le Pipeline. Cependant, il pourrait y avoir plusieurs de ces mesures, y compris des mesures de divers les plugins (par exemple, menu fixe), ce qui rend difficile de distinguer les étapes. Nous devrions peut-être ajouter un paramètre optionnel pour les poissons de spécifier un nom ou alias qui apparaît ensuite dans les étapes du pipeline.

par exemple, le suivant peut être l'étape de mnp, qui permettrait de montrer que "Shell script: mnp" dans le pipeline de vue.

sh cmd:"npm install", name: "npm"

Cependant, il a été fermé comme un double de l'ancienne Permettre stade de fonctionner comme un étiquetés bloc qui a été résolu récemment et semble être inclus dans v2.2 de la canalisation, l'étape-étape-plugin (voir le changelog).

Il semble que les étapes peuvent maintenant être imbriqués et ils apparaissent dans le tableau d'affichage, mais je ne pense pas que c'est ce que vous cherchez.

1voto

whitediver Points 321

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'
            }
        )
 

1voto

sandy Points 14

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

0voto

ARUN007 Points 1

J'essayais aussi la même chose, mais dans un contexte différent. Mon équipe ne voulait 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" . 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.

0voto

Randall Hood Points 1

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"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X