设置环境变量,然后在Jenkins脚本化管道中运行脚本

时间:2019-05-07 04:14:00

标签: shell jenkins environment-variables jenkins-pipeline jenkins-groovy

我是詹金斯,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如何影响权限?什么?!而且,如果我将文件修改为具有权限,则会收到一个新错误,该错误与“缺少工作空间”有关。

2 个答案:

答案 0 :(得分:0)

我的猜测是路径上有<div class="el-item"> <p class="texte-a-hover">your description goes here Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque quis justo non accumsan. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p> </div>CMAKE_INSTALL_DIR

您应该SDK_INSTALL_DIR而不是sh '. setup-target'

答案 1 :(得分:0)

我知道了。我直接克隆到工作区中,然后将环境变量设置为也指向工作区。我修改了这两件事。现在,我在工作区中创建一个目录并克隆到该目录中,还将环境变量设置为工作区中的目录。像这样:

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}"
            }
        }    
    }
}

这有效。