2016-07-29 2 views
7

Недавно я переписал команду исполнения bash в конвейере Дженкинса. Старый код, какКак использовать команду источника в сценарии сценария Jenkins

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

Теперь я использую сценарий трубопровода, чтобы обернуть команду, как этот

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

Однако, я получил сообщение об ошибке, так как .../.jenkins/script.sh: line 9: source: environment.sh: file not found. Когда я пытаюсь less environment.sh, он отображается правильно. Поэтому я подозреваю, что что-то не так с source command в пределах sh wrap.

Перед использованием трубопровода команда source environment.sh работает нормально в исполнении оболочки. Таким образом, источник устанавливается на сервере Jenkins, кажется, что сценарий конвейера не знает, что является исходной командой.

Как я могу выполнить команду источника в sh shackped block?

+0

Чтобы отладить использование 'echo $ pwd; ls .' – walsht

ответ

7

Заменить source environment.sh с

. ./environment.sh 

Пожалуйста, обратите внимание, что пробел после первой точки.

+0

Это работает. Мне больше не нужно использовать абсолютный путь. спасибо – Neil

2

source является bash/ksh/etc расширение, предоставленное как более «существенный» синоним для ..

В sh, вам нужно использовать . в случае основной оболочки один (например, dash), который не поддерживает команду source.

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

Я полагаю, тройные кавычки - это синтаксис сценария конвейера, который идентифицирует команду нескольких строк. И я попробовал использовать '.' вместо' source', но не повезло. Аналогичная ошибка throws '/.jenkins/script.sh: строка 9:.: Environment.sh: файл не найден' – Neil

+0

Ах, пропустил, что это был не просто сценарий оболочки. (Хотя это должно было быть очевидным, извините.) Похоже, что реальная проблема заключается в том, что у Jenkins есть другой рабочий каталог, чем ваш оригинальный скрипт. Использование абсолютного пути (а не просто 'environment.sh') должно работать. – chepner

+0

Спасибо, с абсолютным путем, он работает. Тем не менее, это странно, что linux не может найти файл – Neil

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