JAVA_HOME: несвязанная переменная при запуске скрипта в Jenkins - PullRequest
0 голосов
/ 22 января 2020

Сценарий сборки имеет следующие строки:

if [ -z "$JAVA_HOME" ]; then
       export JAVA_HOME="$(dirname "$(dirname "$(readlink -e "$(type -p "javac")")")")"
       echo "JAVA_HOME=$JAVA_HOME"
 fi

, который хорошо работает, когда помещается в sh "", но при помещении в файл bash и во время его работы выдает ошибку:

stage ('Build') {
      sh '''
                    if [ -z "$JAVA_HOME" ]; then
                    export JAVA_HOME="$(dirname "$(dirname "$(readlink -e "$(type -p "javac")")")")"
                    echo "JAVA_HOME=$JAVA_HOME"
                     fi
                    sudo bash ./build 
            '''       

}

Консольный вывод:

+ '[' -z /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64 ']'
+ sudo bash ./build
running: ./build 
+ trap '>&2 echo '\''ERR'\'' && exit -1' ERR
./build: line 10: JAVA_HOME: unbound variable

1 Ответ

0 голосов
/ 22 января 2020

Я думаю, экспортированная переменная не передается в новый экземпляр bash, который вы порождаете.

Вы можете сделать sudo su <myuser> в верхней части вашего скрипта

                    sudo su myuser
                    if [ -z "$JAVA_HOME" ]; then
                    export JAVA_HOME="$(dirname "$(dirname "$(readlink -e "$(type -p "javac")")")")"
                    echo "JAVA_HOME=$JAVA_HOME"
                     fi
                    ./build 

Конечно, использование sudo в вашей сборке не рекомендуется. Лучшая альтернатива - предоставить jenkins разрешения, необходимые для запуска вашей сборки

...