ich einen Jenkins Pipeline Job, in dem ich meine Umgebung mit einem Bash-Skript namens setup.sh konfigurieren, die wie folgt aussieht:Variable vorbei Skript in einem jenkins Pipeline Job einzuschlagen
#!/bin/bash
export ARCH=$1
echo "architecture = " ${ARCH}
Im Jenkins Pipeline-Skript, icall das setup.sh Skript mit:
def lib_arch='linux-ubuntu-14.04-x86_64-gcc4.8.4'
sh ". /opt/setup.sh ${lib_arch}"
leider scheint es, dass NO Variable auf den setup.sh Skript übergeben wird, und das Echo $ {ARCH} einen leeren String zurück! Ich habe versucht, stattdessen zu tun: sh "Quelle /opt/setup.sh $ {lib_arch}" und dies schlägt auch gut mit der "Quelle nicht gefunden" Nachricht. Ich habe auch versucht, um die erste Zeile von meinem Skript zu ändern
#!/bin/sh
aber es hilft nicht. Wie kann ich einen Parameter an mein Bash-Skript in einem Jenkins-Pipeline-Skript übergeben? danke für Ihre Hilfe.
Update: eine Abhilfe von Bert Jan Schrijve in diesem Thread sugggested wurde (siehe unten):
sh "bash -c \" source /opt/setup.sh ${lib_arch}\""
versuchte ich Ihren Vorschlag und es funktioniert nicht. Ich habe sogar versucht einfach zu tun: sh ".opt/setup.sh bla". Offensichtlich wird der Parameter nicht an das Shell-Skript übergeben, da $ # 0 zurückgibt, während ich in der Skriptkonsole [testsh] Running shell script + erhält. /opt/setup.sh linux-ubuntu-14.04-x86_64-gcc4.8.4 –
Das ist seltsam. Ich habe ein kleines Beispiel hinzugefügt und es auf Jenkins 2.7.3 getestet. In welcher Version bist du? –
Ich benutze diese Kriegsversion: 2.19.1. Ich glaube, hier ist etwas merkwürdig. In Ihrem Pipeline-Skript machen Sie nicht das, was ich erreichen möchte. In meinem Fall versuche ich, einen Variablenwert, der mit def (wie dir) definiert ist, einem Bash-Skript zu geben. Wie ich geschrieben habe, wenn ich sh "./Opt/setup.sh bla ", und wenn ich in meinem Skript versuche, $ 1 zu echo, kann ich deutlich sehen, dass der Parameter" bla "nicht auf das Skript gegeben wird. –