2016-10-29 3 views
5

У меня есть задание трубопровода Дженкинс, в котором я настроить свою среду с Баш скрипт с именем setup.sh, который выглядит как:передавая переменную Баш скрипт в задании Дженкинс трубопровода

#!/bin/bash 
export ARCH=$1 
echo "architecture = " ${ARCH} 

В сценарии трубопровода Дженкинс, айКолл сценарий setup.sh с:

def lib_arch='linux-ubuntu-14.04-x86_64-gcc4.8.4' 
sh ". /opt/setup.sh ${lib_arch}" 

, к сожалению, кажется, что NO переменные передаются в сценарий setup.sh, и эхо $ {ARCH} возвращает пустую строку! Я попытался сделать так: sh "source /opt/setup.sh $ {lib_arch}" , и это также не соответствует сообщению "source not found". Я также попытался изменить первую строку моего сценария

#!/bin/sh 

, но это не помогает. Итак, как я могу передать параметр моему сценарию bash в сценарии сценария Jenkins? Спасибо за помощь.

Update: обходной путь был sugggested Берт Ян Schrijve в этой теме (см):

sh "bash -c \" source /opt/setup.sh ${lib_arch}\"" 

ответ

2

В приведенном ниже примере работы:

void updateApplicationVersionMaven(String version) { 
    sh "mvn -B versions:set -DnewVersion=$version" 
} 

и полный сценарий трубопровода (проверено на Jenkins 2.7.3):

node { 
    stage('test') { 
     def testVar='foo' 
     sh "echo $testVar"  
    } 
} 

EDIT (после комментариев): Ah, test еще несколько и могли воспроизвести эту проблему. Это потому, что вы используете скрипт с параметром. /opt/setup.sh. Это влияет на среду оболочки, и в этом случае нарушает впрыск переменной Jenkins. Интересно.

EDIT2 (после комментариев): Я считаю, что это проблема с используемой оболочкой по умолчанию (либо Jenkins, либо операционной системой). я мог воспроизвести проблему с комментариями и был в состоянии работать вокруг него явно с помощью Баш в качестве оболочки:

def testVar='foo3' 
sh "bash -c \". /var/jenkins_home/test.sh $testVar && echo \$ARCH\"" 

Последнее эхо Теперь Echos содержимое testVar, который был передан в качестве аргумента сценария и впоследствии заданный сценарием как переменная среды.

+0

Я попробовал ваше предложение, и это не удается. Я даже пытался просто сделать: sh ". /opt/setup.sh bla". Ясно, что параметр не передается сценарию оболочки, так как $ # возвращает 0, тогда как в консоли сценария я получаю [testsh] Запуск сценария оболочки +. /opt/setup.sh linux-ubuntu-14.04-x86_64-gcc4.8.4 –

+0

Это странно. Я добавил небольшой пример и протестировал его на Jenkins 2.7.3. В какой версии вы работаете? –

+0

Я использую эту военную версию: 2.19.1. Я считаю, что здесь есть что-то странное. В сценарии вашего конвейера вы не делаете то, что я пытаюсь достичь. В моем случае я пытаюсь дать значение переменной, определенное с def (как вы), в сценарий bash. Как я писал, если я делаю sh "./Opt/setup.sh bla ", и если в моем скрипте я пытаюсь выполнить эхо $ 1, я ясно вижу, что параметр« bla »не указан скрипту. –

0

1.Пожалуйста, попробуйте удалить фигурные скобки в сценарии.

export ARCH=$1 
echo "architecture = " $ARCH 

2.In Дженкинс оболочки:

def lib_arch='linux-ubuntu-14.04-x86_64-gcc4.8.4' 
sh ". /opt/setup.sh" $lib_arch 
+0

Вы попробовали свое предложение? Это сбой. java.lang.NullPointerException: Не удается получить свойство $ lib_arch на нулевом объекте. Я считаю, что мне приходится иметь дело с некоторыми ограничения для трубопровода Дженкинс рабочие места. –

Смежные вопросы