在Jenkins Scripted Pipeline中设置环境变量然后运行脚本

66次阅读
没有评论

问题描述

一个新手在使用Jenkins、Groovy和Pipeline时遇到了问题。他创建了一个简单的Pipeline阶段,其中包含一些脚本命令。起初,他能够成功执行这些脚本,但后来他想在运行脚本之前修改或添加环境变量。他尝试了一些方法,但出现了一些错误。

解决方案

在Jenkins Scripted Pipeline中设置环境变量并运行脚本是一项常见的任务,但也可能涉及一些细微的问题。下面是一些解决方案,以帮助你在Pipeline中成功设置环境变量并运行脚本。

请注意以下操作可能因版本差异而有所不同,建议在操作前备份你的配置。

步骤1:设置环境变量

要在Pipeline中设置环境变量,你可以使用withEnv闭包。这会在闭包内设置环境变量,然后在闭包外部恢复原始环境。这样可以确保你的环境变量不会影响Pipeline中的其他部分。

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'
                // 其他脚本命令
            } catch(all) {
                sh "echo 'Failed to run setup-target script with error: ' ${all}"
            }
        }
    }
}

步骤2:运行脚本

在运行脚本时,确保你的脚本路径是正确的。在Pipeline的上下文中,相对路径可能会有所不同,因此最好使用绝对路径或确保脚本相对于Pipeline脚本的路径是正确的。

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'
                dir('path/to/checkout') {
                    sh '. ./setup-target'  // 运行脚本
                }
                // 其他脚本命令
            } catch(all) {
                sh "echo 'Failed to run setup-target script with error: ' ${all}"
            }
        }
    }
}

请注意,在运行脚本之前,你可以使用dir闭包切换到正确的工作目录。这可以确保脚本在正确的位置执行。

注意事项

  • 保持脚本路径的正确性。使用绝对路径或相对路径确保脚本在预期位置。
  • 在设置环境变量时,使用withEnv来确保变量的范围在闭包内。
  • 在捕获错误时,可以使用try-catch块来处理脚本执行可能出现的异常。

如果你需要更多帮助,你也可以参考这个问题在Stack Overflow上的讨论:https://stackoverflow.com/questions/56015463/set-environment-variables-then-run-script-in-jenkins-scripted-pipeline

结论

在Jenkins Scripted Pipeline中设置环境变量并运行脚本可能会涉及到路径和作用域的细微问题。通过使用withEnv闭包设置环境变量,并确保脚本路径的正确性,你可以成功地实现你的任务。如果你遇到了问题,可以参考上述解决方案或查阅相关文档以获取更多帮助。

正文完