Сценарий Bash, если условие, не работающее при вызове от Конвейера Jenkins

Ниже моя Настройка канала связи Jenkins

stage ('Import') {

            steps {
                sshagent([sshCredentials]) {
                    sh '''
                        #!/bin/bash
                        sh -x ETL_AUTOMATION/Scripts/export.sh
                    '''

Вывод сборки:-

[[ RMO_TST12 ==  ]]

ETL_AUTOMATION/Scripts/export.sh: 17: ETL_AUTOMATION/Scripts/export.sh: [[: not found

ЕСЛИ условие в сценарии:-

if [[ "$SOURCE_FOLDER" == "" ]]; then

    echo "SOURCE_FOLDER not specified... exiting"
    exit 1
fi

Я упомянул #!/bin/bash в моем сценарии также.

Помогите мне, я действительно поражен здесь.

3
задан 7 December 2019 в 15:33

1 ответ

Вы работаете sh -x ETL_AUTOMATION/Scripts/export.sh. Это означает, что export.sh выполняется sh а не bash. На Ubuntu, sh простая оболочка POSIX, названная dash, и это не поддерживает эти [[ конструкция, которая является bash вещь. Поэтому просто измените свой сценарий так, чтобы он был запущен с [1 112] вместо [1 113]. Я не знаю синтаксис Jenkins вообще, но я подозреваю, что Вы хотите один из них:

sshagent([sshCredentials]) {
    sh '''
        ETL_AUTOMATION/Scripts/export.sh
        '''

или, если Ваш export.sh не исполняемый файл:

sshagent([sshCredentials]) {
    sh '''
        bash ETL_AUTOMATION/Scripts/export.sh
        '''

Или, возможно, просто:

sshagent([sshCredentials]) {
    bash '''
        ETL_AUTOMATION/Scripts/export.sh
        '''

, С другой стороны, можно измениться export.sh, таким образом, это не использует функции только для удара:

if [ -z $SOURCE_FOLDER ]; then
    echo "SOURCE_FOLDER not specified... exiting"
    exit 1
fi
9
ответ дан 21 December 2019 в 23:38

Другие вопросы по тегам:

Похожие вопросы: