Установите переменные среды, затем запустите скрипт в Jenkins Scripted Pipeline - PullRequest
0 голосов
/ 07 мая 2019

Я новичок в Дженкинс, 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 для этого файла, чтобы иметь разрешения, я получаю новую ошибку, что-то, связанное с «отсутствующим рабочим пространством».

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Я понял это.Я клонировал прямо в рабочее пространство, а затем установил переменные среды так, чтобы они указывали на рабочее пространство.Я изменил обе эти вещи.Теперь я создаю каталог в своем рабочем пространстве и клонирую его, а также я устанавливаю переменные среды в каталоги внутри своего рабочего пространства.Вот так:

node('build-01') {
    withEnv(["CMAKE_INSTALL_DIR=${WORKSPACE}/cmake_install", "SDK_INSTALL_DIR=${WORKSPACE}/sdk"]){
        stage('Building') {
            echo "[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}"
            try {
                sh 'ls -l'
                //ls shows the damn file
                dir('path/to/checkout/') {
                    sh '. ./setup-target'
                }
            } catch(all) { 
                sh "echo 'Failed to run setup-target script with error: ' ${all}"
            }
        }    
    }
}

Это работает.

0 голосов
/ 07 мая 2019

Я полагаю, что либо CMAKE_INSTALL_DIR, либо SDK_INSTALL_DIR находятся на пути.

Вместо sh '. setup-target' вы должны sh './setup-target'.

...