公司动态

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

📅 2026/7/14 7:14:26
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 脚本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{mavenMaven 3.9.11}stages{// 阶段 1: 初始化阶段根据选择的参数设置对应的 IP 和 凭证stage(Initialize Environment){steps{script{echo当前选择的部署环境是:${params.DEPLOY_ENV}if(params.DEPLOY_ENVprod){// --- 正式环境配置 ---env.REMOTE_HOST192.168.x.x// 正式服 IPenv.SSH_CRED_IDprod_ssh_secret// 正式服的凭证IDecho已切换至 - 正式环境 (Prod)}elseif(params.DEPLOY_ENVtest){// --- 测试环境配置 ---env.REMOTE_HOST192.168.y.y// 测试服 IPenv.SSH_CRED_IDtest_ssh_secret// 测试服的凭证IDecho已切换至 - 测试环境 (Test)}else{error(无效的部署环境:${params.DEPLOY_ENV})}}}}// 阶段 2: 拉取代码stage(Checkout Code){steps{// 因为参数值现在就是真实分支名 (test/prod)可以直接用 checkout scmcheckout scm script{echo已拉取分支 (用户选择环境时的参数):${params.DEPLOY_ENV}}}}// 阶段 3: 编译打包stage(Maven Build){steps{echo开始编译打包...shmvn clean package -Dmaven.test.skiptrue}}// 阶段 4: 传输文件stage(Transfer Files){steps{// 使用动态设置的凭证 ID 进行 SSH 登录sshagent(credentials:[${env.SSH_CRED_ID}]){script{echo向${env.REMOTE_HOST}传输文件...// 请根据实际项目结构修改 jar 包所在的目录名shscp -o StrictHostKeyCheckingno your-module/target/*.jar root${env.REMOTE_HOST}:${env.TARGET_DIR}}}}}// 阶段 5: 执行部署stage(Execute Deploy){steps{sshagent(credentials:[${env.SSH_CRED_ID}]){script{echo正在远程执行脚本...shssh -o StrictHostKeyCheckingno root${env.REMOTE_HOST}cd${env.TARGET_DIR} ./build.sh}}}}}}注意如果没有服务器凭据需要在此处创建这里可以创建 DomainDomain是 Jenkins「凭据管理Credentials」中的概念不是我们平时理解的“域名 domain”。它的主要作用是对 Jenkins 中的 Credentials账号、密码、SSH Key、Token 等进行分类和匹配限制。简单理解Credential 密钥/账号密码Domain 给这些 Credential 分组并规定它们适用于什么场景2.创建凭证ID是某凭证的唯一标识如果不设置Jenkins会随机生成在 Jenkinsfile 中 SSH_CRED_ID 对应的就是这个凭据ID。