我是詹金斯,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行:。:设置目标:找不到文件
和
无法运行安装目标脚本,错误:hudson.AbortException:脚本返回了退出代码1
但是设置了环境变量,我通过在sh 'printenv'
该ls -l
行的右下方进行检查。有趣的ls -l
是显示了脚本。
我想念什么?
以下:
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如何影响权限?什么?!如果我将文件修改为具有权限,则会收到一个新错误,该错误与“缺少工作空间”有关。
我想到了。我直接克隆到工作区中,然后将环境变量设置为也指向工作区。我修改了这两件事。现在,我在工作区中创建一个目录并克隆到该目录中,并且还将环境变量设置为工作区中的目录。像这样:
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}"
}
}
}
}
这有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句