Jenkins 是一款流行的开源自动化服务器,用于自动化构建、测试和部署软件。在构建流水线时,有时候需要根据不同的条件动态配置环境变量。本文将介绍如何在Jenkins Pipeline中动态配置环境变量的方法。该方法同样适用于通过docker安装jenkins的小伙伴(只需要将对应路径替换为主机映射到容器内的路径即可)

1. 使用 env 块加载环境变量

在Jenkins Pipeline中,可以使用 env 块来加载环境变量。这样可以在Pipeline的不同阶段动态配置环境变量。

pipeline {
    agent any

    environment {
        // 预定义的环境变量
        JAVA_HOME = '/usr/local/jdk-17'
        MAVEN_HOME = '/usr/local/maven'
        PATH = "/usr/local/maven/bin:$PATH"
        CLASSPATH = ".:${env.JAVA_HOME}/lib/dt.jar:${env.JAVA_HOME}/lib/tools.jar"
    }

    stages {
        stage("Example Stage") {
            steps {
                script {
                    // 输出环境变量信息
                    echo "JAVA_HOME=${env.JAVA_HOME}"
                    echo "MAVEN_HOME=${env.MAVEN_HOME}"
                    echo "PATH=${env.PATH}"
                    echo "CLASSPATH=${env.CLASSPATH}"

                    // 运行 Maven 和 Java 命令
                    sh "mvn -v"
                    sh "java -version"
                }
            }
        }
    }
}

在上面的例子中,使用 environment 块预定义了一些环境变量,这些变量在整个Pipeline中都可以使用。

需要注意的是,上面的例子配置的环境变量仅在当次编译生效

2. 在脚本中动态修改环境变量

在需要的阶段,可以使用 script 块执行脚本,并在其中修改环境变量。例如,在构建阶段动态修改PATH:

stage("Build Stage") {
    steps {
        script {
          echo "<<<  构建环境  >>>"
                // 使用 env 块加载环境变量
                // Node.js 环境变量
                env.NODEJS_HOME = "/usr/local/node"
                env.PATH = "${env.NODEJS_HOME}/bin:${env.PATH}"
            
                // 输出环境变量信息
                sh "echo PATH=${env.PATH}"
                sh "echo CLASSPATH=${env.CLASSPATH}"
                sh "echo NODEJS_HOME=${env.NODEJS_HOME}"
                sh ". /etc/profile"
                // 执行 npm/node 命令
                sh "node -v"
                sh "npm -v"

            // 其他构建步骤...
        }
    }
}

3. 示例:根据条件动态配置环境变量

下面是一个具体的示例,演示了如何根据不同条件动态配置环境变量。

pipeline {
    agent any

    environment {
        JAVA_HOME = '/usr/local/jdk-17'
        MAVEN_HOME = '/usr/local/maven'
        PATH = "/usr/local/maven/bin:$PATH"
        CLASSPATH = ".:${env.JAVA_HOME}/lib/dt.jar:${env.JAVA_HOME}/lib/tools.jar"
    }

    stages {
        stage("Build Project") {
            steps {
                script {
                    // 根据不同的条件动态配置环境变量
                    if (params.useCustomJavaHome) {
                        env.JAVA_HOME = '/path/to/custom/jdk'
                    }

                    // 输出修改后的环境变量信息
                    echo "JAVA_HOME=${env.JAVA_HOME}"
                    echo "MAVEN_HOME=${env.MAVEN_HOME}"
                    echo "PATH=${env.PATH}"
                    echo "CLASSPATH=${env.CLASSPATH}"

                    // 其他构建步骤...
                }
            }
        }
    }
}

在这个示例中,根据参数 useCustomJavaHome 的值,动态修改了 JAVA_HOME。这样可以根据实际情况在流水线中灵活配置环境变量。

通过这些方法,你可以在Jenkins Pipeline中灵活地配置和修改环境变量,以适应不同的构建需求。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐