web-dev-qa-db-de.com

Jenkins Pipeline sh Anzeigename/Bezeichnung

Mit dem Jenkins 2 Pipeline-Plugin gibt es eine nützliche Funktion, die einen schnellen Überblick über die Pipelinestufen und den Status der Schritte ermöglicht, einschließlich der Protokollierungsausgabe.

Wenn Sie jedoch den Schritt "Shell - Skript" (sh) verwenden, scheint es keine Möglichkeit zu geben, dieses Skript mit einem nützlichen Namen zu kennzeichnen, so dass auf dem Display lediglich eine lange Liste von "Shell - Skript" angezeigt wird Bild unten).

Wie kann ich einen nützlichen Namen vergeben oder wie kann ich einen anderen Schritt verwenden, um denselben Effekt zu erzielen?

 enter image description here

47
goofballLogic

Update Februar 2019 :

Laut gertvdijks Antwort unten ist es jetzt möglich, dem Schritt sh ein optionales Label zuzuweisen ab v2.28 und für diejenigen, die noch kein Upgrade durchführen können, Es gibt auch eine Problemumgehung. Bitte überprüfen Sie seine Antwort für Details und Kommentare!


Vorherige Version (schweben, um sie zu sehen):

Soweit ich weiß, ist das derzeit nicht möglich. Im Jenkins-Tracker gibt es ein Name oder Alias ​​Shell Script Step (sh) Problem, das Ihrer Situation ähnelt:

Der Schritt sh fügt einen "Shell Script" -Schritt in die Pipeline ein. Es könnte jedoch mehrere solcher Schritte geben, einschließlich Schritte von verschiedenen Plugins (z. B. Docker), was es schwierig macht, die Schritte zu unterscheiden. Wir sollten vielleicht einen optionalen Parameter zu sh hinzufügen, um einen Namen oder Alias ​​anzugeben, der dann in den Pipelineschritten erscheinen würde. Beispielsweise kann das Folgende der Schritt für npm sein, der in der Pipeline-Ansicht als "Shell-Skript: npm" angezeigt wird.

sh cmd:"npm install", name: "npm"
Es wurde jedoch als Duplikat des älteren Erlaube Stage, als beschrifteter Block zu arbeiten geschlossen, das kürzlich behoben wurde und in v2.2 von enthalten zu sein scheint das Pipeline-Stage-Step-Plugin (siehe Changelog .

Es sieht so aus, als ob Phasen jetzt verschachtelt werden können und in der Ansichtstabelle angezeigt werden, aber ich glaube nicht, dass Sie danach suchen.
30
Morfic

Nun, verzweifelte Zeiten erfordern verzweifelte Maßnahmen. Wenn Sie Blue Ocean verwenden können, können Sie den Parallelschritt mit einer einzigen Ausführungszeile verwenden.

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

Version 2.28+ des "Pipeline Nodes and Processes Plugin" hat die Option label für den sh-Schritt gewonnen jetzt mit JENKINS-55410 :

beschriftung (optional)

Beschriftung, die in der Pipeline-Schrittansicht und blauen Ozeandetails für den Schritt anstelle des Schritttyps angezeigt werden soll. Die Ansicht ist also aussagekräftiger und domänenspezifisch anstatt technisch.

  • Geben Sie Folgendes ein: String

Z.B.:

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

Wenn Sie noch kein Upgrade durchführen können, können Sie das Labeled Pipeline Steps Plugin verwenden.

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

Klappt nicht bei mir 

Es muss sein:

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

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

1
Nils

Versuchen Sie dies, eine gute Abhilfe

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

Ich habe auch dasselbe ausprobiert, aber in einem anderen Kontext möchte mein Team kein Protokollfenster über die Protokollbenutzeroberfläche haben. Daher habe ich versucht, mehrere UNIX-Befehle in einer Zeile zu verwenden. __ z. 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" Und es funktionierte für Jenkins-Pipelineskript innerhalb des Jenkins-Jobs . Wenn ich jedoch die gemeinsam genutzte Bibliothek zum Erweitern der Pipeline und derselben Strategie verwende, funktionierte es nicht oder errichtete mehrere Fenster wie üblich für shlog in der Benutzeroberfläche.

0
ARUN007

Nach einer hervorragenden sandigen Antwort habe ich einen kleinen Script-Wrapper erstellt, der den sh-Schritt in einem try/finally-Block einschließt.

Grundnutzung:

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

Zeigt "description # 1" anstelle des generischen Textes an.

Vollständiger Quellcode und Installationsanweisungen hier https://github.com/ael-computas/jenkins-script-wrapper

Kann einfach als Bibliothek auf Ihrem Jenkins-Server installiert werden.

0
Anders Elton

Es ist nicht perfekt, aber im Allgemeinen finde ich es angemessen, einen Echo-Schritt hinzuzufügen, der beschreibt, was der folgende Fledermaus- oder SH-Schritt zu erreichen versucht. Jemand, der es noch nie gesehen hat, sollte es schnell herausfinden können.

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