企业 Jenkins 流水线:将 WAR 部署到 DEV、QA、UAT 和 PROD,带审批门、回滚和 SCP
Source: Dev.to
介绍
在现代企业环境中,手动将应用程序部署到多个环境(DEV、QA、UAT、PROD)风险大、容易出错且效率低下。
组织需求
- 自动化部署
- 环境特定的目标定位
- 生产环境的审批门槛
- 备份和回滚能力
- 安全文件传输
- 高可靠性和可审计性
在本文中,我们将构建一个面向生产的 Jenkins 流水线,使用以下技术将 WAR 文件部署到多个环境:
- 参数化流水线
- SCP 部署
- SSH 安全认证
- 审批门槛
- 自动备份
- 回滚支持
- Tomcat 重启
- 部署验证
该架构已在真实企业环境中使用。
企业部署架构
Developer
↓
Git Repository
↓
Jenkins Pipeline
↓
Build WAR File
↓
Select Environment (DEV/QA/UAT/PROD)
↓
Approval Gate (PROD only)
↓
Backup Existing WAR
↓
Deploy WAR using SCP
↓
Restart Tomcat
↓
Health Check Verification
↓
Application Live
前置条件
在实现此流水线之前,请确保以下内容已就绪:
1. 已安装 Jenkins
必需插件
- Pipeline Plugin
- SSH Agent Plugin
- Credentials Plugin
2. 在 Jenkins 中添加 SSH 凭据
路径:Manage Jenkins → Credentials → Global → Add Credentials
- Kind(类型): SSH Username with private key
- ID(标识):
tomcat-key - Username(用户名):
ec2-user - Private key(私钥): 粘贴 PEM 文件
3. 目标服务器已安装 Tomcat
典型的部署路径:
/opt/tomcat/webapps/
⚙️ 完整企业 Jenkins 流水线
pipeline {
agent any
tools {
maven 'Maven-3.9'
}
parameters {
choice(
name: 'ENV',
choices: ['DEV', 'QA', 'UAT', 'PROD'],
description: 'Select Deployment Environment'
)
booleanParam(
name: 'ROLLBACK',
defaultValue: false,
description: 'Rollback deployment'
)
}
environment {
DEV_SERVER = "10.0.0.10"
QA_SERVER = "10.0.0.20"
UAT_SERVER = "10.0.0.30"
PROD_SERVER = "10.0.0.40"
USER = "ec2-user"
DEPLOY_PATH = "/opt/tomcat/webapps/"
BACKUP_PATH = "/opt/tomcat/backup/"
WAR_FILE = "target/myapp.war"
}
stages {
stage('Checkout') {
steps {
git 'https://GitHub.com/sresrinivas/EBusibess.git'
}
}
stage('Build WAR') {
when { expression { params.ROLLBACK == false } }
steps {
sh 'mvn clean package'
}
}
stage('Select Server') {
steps {
script {
if (params.ENV == "DEV") env.SERVER = env.DEV_SERVER
if (params.ENV == "QA") env.SERVER = env.QA_SERVER
if (params.ENV == "UAT") env.SERVER = env.UAT_SERVER
if (params.ENV == "PROD") env.SERVER = env.PROD_SERVER
}
}
}
stage('Approval for PROD') {
when { expression { params.ENV == 'PROD' } }
steps {
input message: "Approve deployment to PROD?", ok: "Deploy"
}
}
stage('Backup WAR') {
steps {
sshagent(['tomcat-key']) {
sh """
ssh -o StrictHostKeyChecking=no ${USER}@${SERVER} '
mkdir -p ${BACKUP_PATH}
cp ${DEPLOY_PATH}/myapp.war ${BACKUP_PATH}/myapp-${BUILD_NUMBER}.war || true
'
"""
}
}
}
stage('Deploy WAR') {
when { expression { params.ROLLBACK == false } }
steps {
sshagent(['tomcat-key']) {
sh """
scp -o StrictHostKeyChecking=no \
${WAR_FILE} \
${USER}@${SERVER}:${DEPLOY_PATH}
"""
}
}
}
stage('Rollback WAR') {
when { expression { params.ROLLBACK == true } }
steps {
sshagent(['tomcat-key']) {
sh """
ssh -o StrictHostKeyChecking=no ${USER}@${SERVER} '
cp ${BACKUP_PATH}/myapp-${BUILD_NUMBER}.war ${DEPLOY_PATH}/myapp.war
'
"""
}
}
}
stage('Restart Tomcat') {
steps {
sshagent(['tomcat-key']) {
sh """
ssh -o StrictHostKeyChecking=no ${USER}@${SERVER} '
systemctl restart tomcat
'
"""
}
}
}
stage('Health Check') {
steps {
sh """
curl -I http://${SERVER}:8080/myapp || true
"""
}
}
}
}
回滚机制
如果部署失败,只需使用 ROLLBACK = true 重新运行流水线。流水线将自动恢复之前的 WAR 文件。
生产安全机制
- 手动批准生产部署
- 部署前备份
- 安全的 SSH 认证(通过 Jenkins 凭据)
- 重启后进行健康检查验证
关键企业功能
- Parameterized environment selection
- Secure SSH/SCP transfers
- Automated backup & rollback
- Manual approval gate for production
- Tomcat service management
- Post‑deployment health verification
Jenkins 企业部署流水线
功能
✔ 多环境部署
流水线支持使用单个 Jenkins 任务无缝部署到 DEV、QA、UAT 和 PROD。工程师可以在运行时动态选择目标环境。
✔ 使用 SCP 和 SSH 的安全部署
WAR 文件通过 SCP 并使用 SSH‑key 认证安全传输,确保 Jenkins 与目标服务器之间的通信加密。
✔ 生产审批门
在任何生产部署之前都需要手动审批,防止意外发布并强制受控上线。
✔ 部署前自动备份
流水线会自动备份当前已部署的 WAR 文件,确保始终有稳定版本可用于恢复。
✔ 即时回滚能力
如果部署失败或出现问题,流水线可以立即从备份恢复之前的版本,最大限度降低停机时间和风险。
✔ 全自动部署工作流
从构建 → 部署 → 服务重启 → 验证,整个过程全程自动化,减少人工干预和人为错误。
✔ 安全凭证管理
所有 SSH 密钥和凭证均安全存储在 Jenkins Credentials Manager 中,提供企业级安全性。
✔ 部署验证与健康检查
部署完成后,自动健康检查会验证应用可用性,确认发布成功。
实际企业收益
✔ 消除手动部署风险
自动化消除了手动部署中固有的错误、不一致和延迟。
✔ 提升部署速度与效率
原本手动需要 30–60 分钟的工作,现在几分钟即可完成。
✔ 确保生产安全与稳定
审批门、备份和回滚机制保障生产环境安全。
✔ 加快发布周期
团队可以快速交付功能、修复和更新,支持敏捷和 DevOps 实践。
✔ 提供完整可追溯性与审计性
每一次部署都记录在 Jenkins 中,为合规提供完整追踪。
✔ 降低停机时间并提升可靠性
自动回滚和健康检查保持应用高可用。
✔ 提升 DevOps 自动化成熟度
该流水线体现了银行、金融科技、医疗和大规模云环境中使用的企业级实践。
✔ 支持可扩展和面向未来的架构
易于扩展至 Kubernetes、云部署、蓝绿策略和 GitOps 工作流。
未来改进方向
您可以进一步增强流水线:
- 蓝绿部署
- 金丝雀部署
- Kubernetes 部署
- 健康检查失败自动回滚
- Slack(或其他)通知
- GitOps 集成
结论
此 Jenkins 流水线提供了一套完整的企业级部署解决方案,具备:
- 多环境部署
- 安全的 SCP 传输
- 生产审批门
- 自动备份与即时回滚
- 全自动工作流
它代表了全球 DevOps 团队在实际生产环境中采用的部署模式。
