2016-07-29 15 views
7

Ich neulich Bash-Ausführungsbefehl in Jenkins-Pipeline neu schreiben. Der alte Code ist wieWie Quellbefehl in Jenkins-Pipeline-Skript verwenden

... 
source environment.sh 
//Build 
//Test 
... 

nun jedoch den Befehl, wie diese

sh ''' 
    ... 
    source environment.sh 
    //Build 
    //Test 
    ... 
''' 

einzuwickeln I Pipeline-Skript verwenden, bekam ich einen Fehler, als .../.jenkins/script.sh: line 9: source: environment.sh: file not found. Wenn ich versuche, less environment.sh, wird es korrekt angezeigt. Ich vermute also etwas falsch mit source command innerhalb sh wrap.

Vor der Verwendung der Pipeline funktioniert der Befehl source environment.sh in der Shell-Ausführung einwandfrei. Also Quelle ist auf Jenkins-Server installieren, es scheint Pipeline-Skript nicht wissen, was der Quellbefehl ist.

Wie könnte ich tun, Source-Befehl innerhalb Sh Wrapped Block ausführen?

+0

Zum Debuggen verwenden Sie echo $ pwd; ls. " – walsht

Antwort

7

ersetzen source environment.sh mit

. ./environment.sh 

Bitte beachten Sie, ein Platz nach dem ersten Punkt gibt.

+0

nicht finden kann. Ich brauche keinen absoluten Pfad mehr. Vielen Dank – Neil

2

source ist eine bash/ksh/etc Verlängerung, als mehr "substantielles" Synonym für . vorgesehen.

In sh, müssen Sie . falls die zugrunde liegenden Schale ist ein (wie dash) verwenden, die nicht den Befehl source nicht unterstützt.

sh ''' 
    ... 
    . environment.sh 
    //Build 
    //Test 
    ... 
''' 
+0

Ich nehme an, dass Triple-Anführungszeichen die Syntax im Pipelineskript ist, die mehrere Zeilen Befehl identifizieren. Und ich habe versucht '' '' anstelle von 'source' zu ​​verwenden, jedoch kein Glück dabei. Ähnliche Fehlermeldung throws '/.jenkins/script.sh: Zeile 9:.: Environment.sh: Datei nicht gefunden' – Neil

+0

Ah, verpasst, dass dies nicht nur ein Shell-Skript war. (Obwohl das offensichtlich gewesen sein sollte, tut mir leid.) Es sieht so aus, als wäre Jenkins ein anderes Arbeitsverzeichnis als das ursprüngliche Skript. Die Verwendung eines absoluten Pfades (anstatt nur 'environment.sh') sollte funktionieren. – chepner

+0

Danke, mit absolutem Pfad funktioniert es. Trotzdem ist es komisch, dass Linux die Datei – Neil