Я новичок в Дженкинс, Groovy и трубопроводов. Я создал простой этап конвейера, например:
//working build but not setting env variables
node('build-01') {
stage('Building') {
echo "[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}"
try {
sh 'ls -l'
//ls shows the damn file
sh '. setup-target'
} catch(all) {
sh "echo 'Failed to run setup-target script with error: ' ${all}"
}
}
}
Это работает. Но я хочу изменить / добавить переменные окружения в сеанс, выполняющий этот скрипт (этот скрипт представляет собой bash-файл с правильной строкой shebang вверху). Итак, я сделал:
node('build-01') {
withEnv(["CMAKE_INSTALL_DIR=${WORKSPACE}", "SDK_INSTALL_DIR=${WORKSPACE}"]){
stage('Building') {
echo "[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}"
try {
sh 'ls -l'
//ls shows the damn file
sh '. setup-target'
} catch(all) {
sh "echo 'Failed to run setup-target script with error: ' ${all}"
}
}
}
}
Это ошибки с:
/home/jenkins-sw/ci/workspace/myWorkSpace@tmp/durable-6d30b48d/script.sh: строка 1:.: Setup-target: файл не найден
и
Не удалось запустить скрипт установки-цели с ошибкой: hudson.AbortException: скрипт вернул код завершения 1
Но переменные окружения установлены, я проверяю это, выполняя sh 'printenv'
прямо под строкой ls -l
. Интересно, что ls -l
показывает сценарий.
Чего мне не хватает?
UPDATE
Следующее:
node('build-01') {
withEnv(["CMAKE_INSTALL_DIR=${WORKSPACE}", "SDK_INSTALL_DIR=${WORKSPACE}"]){
stage('Building') {
echo "[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}"
try {
sh 'ls -l'
//ls shows the damn file
sh './setup-target'
} catch(all) {
sh "echo 'Failed to run setup-target script with error: ' ${all}"
}
}
}
}
Результат:
/home/jenkins-sw/ci/workspace/myWorkSpace@tmp/durable-6d30b48d/script.sh: строка 1: ./setup-target: в доступе отказано
Интересно. Как withEnv влияет на разрешения? Какие?! И если я chmod для этого файла, чтобы иметь разрешения, я получаю новую ошибку, что-то, связанное с «отсутствующим рабочим пространством».