08_使用Jenkinsfile构建多环境Pipeline部署流程

08_使用Jenkinsfile构建多环境Pipeline部署流程

在日常的持续集成与部署(CI/CD)流程中,使用 Jenkinsfile 来定义 Pipeline 是一种非常优雅且易于版本控制的方式。本文将带大家一步步实现在 Jenkins 中配置 Maven 环境,并编写一个支持"选择部署环境(测试/正式)"的自动化部署 Pipeline。


一、 准备工作:配置 Maven 环境

因为我们的 Pipeline 涉及对 Java 项目进行 Maven 打包,所以首先需要确保 Jenkins 环境中已经正确安装并配置了 Maven。

1. 手动安装与挂载 Maven

如果你使用的是 Docker 部署的 Jenkins,可以采用手动安装的方式。将本机中下载并解压好的 maven 文件夹,完整复制到 Jenkins 的工作目录(例如 E:\docker\jenkins2\jenkins_home)下:

2. 修改 Maven 配置文件

复制完成后,需要修改 Maven 的 conf/settings.xml 配置文件。主要是调整本地仓库的地址,请根据你运行 Jenkins 容器时指定的路径挂载关系进行相应配置:

3. 在 Jenkins 控制面板中配置 Maven

接下来,进入 Jenkins 的图形化管理界面进行关联配置。

依次点击左侧菜单栏的 Manage Jenkins (系统管理) -> Tools (全局工具配置)

找到 Maven 配置区域,设置 Maven 的名称以及 settings.xml 的具体挂载路径,如下图所示:

配置完成后,滑动到页面最底部,点击 Save (保存) 即可:


二、 编写 Jenkinsfile:实现参数化多环境部署

环境准备就绪后,我们就可以开始编写 Jenkinsfile 了。

下面提供了一个完整的 Pipeline 示例。这个脚本的最大亮点在于:支持在触发构建时,通过下拉框选择将要部署的环境(测试环境 test 或正式环境 prod),并根据选择动态切换目标服务器 IP 和 SSH 凭证。

触发构建时的效果如下:

完整 Jenkinsfile 脚本

groovy 复制代码
pipeline {
    agent any

    // 1. 定义构建参数:在点击 "Build" 时会出现下拉框选择
    parameters {
        choice(
            name: 'DEPLOY_ENV',
            choices: ['prod', 'test'],
            description: '选择部署环境:test(测试环境) / prod(正式环境)'
        )
    }

    environment {
        // 这里定义通用的变量,IP 等具体变量在下方的 Setup 阶段动态赋值
        TARGET_DIR  = '/root/your_project/build/' //通用部署路径
        // TARGET_DIR="" 也可以像这样给个空值, 然后根据不同环境指定不同路径
    }

    tools {
        maven 'Maven 3.9.11'
    }

    stages {
        // 阶段 1: 初始化阶段,根据选择的参数设置对应的 IP 和 凭证
        stage('Initialize Environment') {
            steps {
                script {
                    echo "当前选择的部署环境是: ${params.DEPLOY_ENV}"

                    if (params.DEPLOY_ENV == 'prod') {
                        // --- 正式环境配置 ---
                        env.REMOTE_HOST = '192.168.x.x'  // 正式服 IP
                        env.SSH_CRED_ID = 'prod_ssh_secret' // 正式服的凭证ID
                        echo "已切换至 -> 正式环境 (Prod)"
                    } else if (params.DEPLOY_ENV == 'test') {
                        // --- 测试环境配置 ---
                        env.REMOTE_HOST = '192.168.y.y'  // 测试服 IP
                        env.SSH_CRED_ID = 'test_ssh_secret'  // 测试服的凭证ID
                        echo "已切换至 -> 测试环境 (Test)"
                    } else {
                        error("无效的部署环境: ${params.DEPLOY_ENV}")
                    }
                }
            }
        }

        // 阶段 2: 拉取代码
        stage('Checkout Code') {
            steps {
                // 因为参数值现在就是真实分支名 (test/prod),可以直接用 checkout scm
                checkout scm
                script {
                   echo "已拉取分支 (用户选择环境时的参数): ${params.DEPLOY_ENV}"
                }
            }
        }

        // 阶段 3: 编译打包
        stage('Maven Build') {
            steps {
                echo "开始编译打包..."
                sh 'mvn clean package -Dmaven.test.skip=true'
            }
        }

        // 阶段 4: 传输文件
        stage('Transfer Files') {
            steps {
                // 使用动态设置的凭证 ID 进行 SSH 登录
                sshagent(credentials: ["${env.SSH_CRED_ID}"]) {
                    script {
                        echo "向 ${env.REMOTE_HOST} 传输文件..."
                        // 请根据实际项目结构修改 jar 包所在的目录名
                        sh "scp -o StrictHostKeyChecking=no your-module/target/*.jar root@${env.REMOTE_HOST}:${env.TARGET_DIR}"
                    }
                }
            }
        }

        // 阶段 5: 执行部署
        stage('Execute Deploy') {
            steps {
                sshagent(credentials: ["${env.SSH_CRED_ID}"]) {
                    script {
                        echo "正在远程执行脚本..."
                        sh "ssh -o StrictHostKeyChecking=no root@${env.REMOTE_HOST} 'cd ${env.TARGET_DIR} && ./build.sh'"
                    }
                }
            }
        }
    }
}

注意:如果没有服务器凭据,需要在此处创建:

${env.TARGET_DIR} && ./build.sh'"

}

}

}

}

}

}

复制代码
注意:如果没有服务器凭据,需要在此处创建:

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d523036ef0e5444884d599c6036d8e88.png)
相关推荐
稀样1 天前
jenkins配置多分支流水线
jenkins
kaico20181 天前
jenkins的安装—windows环境
运维·jenkins
kaico20181 天前
jenkins值之job的配置
java·jenkins
wuyikeer2 天前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
大黄说说2 天前
Spring Boot 项目优雅上线:日志、监控、异常处理最佳实践
运维·jenkins
xuboyok23 天前
(CICD)自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)
自动化·jenkins·maven
翘着二郎腿的程序猿3 天前
自动化 CI/CD 从 0 到 1:Jenkins 本地化部署全指南
运维·jenkins