阅读量:2
Linux Tomcat自动化部署实践
一、方案总览与适用场景
- 下表给出三种常用路径,覆盖从本地打包到远程发布的完整链路,可按团队成熟度与网络策略选择或组合使用。
| 方式 | 核心思路 | 适用场景 | 关键要点 |
|---|---|---|---|
| Shell脚本一键发布 | 本地/CI构建出 WAR → 通过 SCP/FTP 上传 → 脚本执行停服、备份、部署、启动、健康检查 | 内网隔离、多实例、需要自定义流程与回滚策略 | 原子化操作、备份与回滚、启动失败告警、日志追踪 |
| Maven Tomcat 插件部署 | 在 pom.xml 配置 tomcat7-maven-plugin → 执行 mvn tomcat7:deploy/redeploy | 开发-测试联动、快速迭代、与CI/CD天然集成 | 配置 manager 用户与权限、settings.xml 的 server 认证、使用 /manager/text 接口 |
| Jenkins 流水线 | Jenkins 拉代码 → 构建 → 调用脚本或 Maven 插件 → 多机分发与回滚 | 规范化交付、多环境发布、可审计可追溯 | 参数化构建、人工确认门禁、制品归档、回滚作业、并发控制 |
二、Shell脚本一键发布实战
- 核心流程
- 停服:调用 $CATALINA_HOME/bin/shutdown.sh,结合 ps 校验进程退出,必要时超时强杀。
- 备份:将 webapps/应用目录 与当前 WAR 备份到时间戳目录,便于回滚。
- 部署:清理旧包/旧目录,拷贝新 WAR;如需根应用,可部署为 ROOT.war。
- 启动:执行 startup.sh 或 nohup catalina.sh start,并 tail 日志观察启动是否成功。
- 健康检查:轮询 /health 或 catalina.out 关键字,超时判定失败并回滚。
- 参考脚本骨架(可按需裁剪)
#!/usr/bin/env bash
set -Eeuo pipefail
export CATALINA_HOME="/opt/apache-tomcat-9.0.xx"
APP_NAME="myapp"
WAR_SRC="/opt/dist/${APP_NAME}.war"
WEBAPPS="$CATALINA_HOME/webapps"
BACKUP_DIR="/opt/backups/${APP_NAME}/$(date +%F_%H%M%S)"
HEALTH_URL="http://127.0.0.1:8080/${APP_NAME}/health"
TIMEOUT=60
SLEEP=5
log(){ echo "[$(date '+%F %T')] $*"; }
stop_tomcat(){
log "Stopping Tomcat..."
"$CATALINA_HOME/bin/shutdown.sh" || true
local i=0
while (( i < TIMEOUT )); do
pid=$(ps -ef | grep "$CATALINA_HOME" | grep -v grep | awk '{print $2}' | head -n1)
[[ -z "$pid" ]] && { log "Tomcat stopped."; return 0; }
sleep "$SLEEP"; ((i+=SLEEP))
done
log "Timeout, killing Tomcat..."
pkill -f "$CATALINA_HOME" || true
}
backup(){
log "Backup $APP_NAME to $BACKUP_DIR"
mkdir -p "$BACKUP_DIR"
cp -a "$WEBAPPS/${APP_NAME}" "$BACKUP_DIR/" 2>/dev/null || true
cp -a "$WAR_SRC" "$BACKUP_DIR/" 2>/dev/null || true
}
deploy(){
log "Deploying $WAR_SRC to $WEBAPPS"
rm -rf "$WEBAPPS/${APP_NAME}" "$WEBAPPS/${APP_NAME}.war"
cp "$WAR_SRC" "$WEBAPPS/${APP_NAME}.war"
}
start_tomcat(){
log "Starting Tomcat..."
"$CATALINA_HOME/bin/startup.sh"
}
health_check(){
log "Health check $HEALTH_URL"
local i=0
while (( i < TIMEOUT )); do
if curl -sf "$HEALTH_URL" >/dev/null; then
log "Health check OK."
return 0
fi
sleep "$SLEEP"; ((i+=SLEEP))
done
log "Health check FAILED."
return 1
}
rollback(){
log "Rolling back..."
pkill -f "$CATALINA_HOME" || true
sleep 3
rm -rf "$WEBAPPS/${APP_NAME}" "$WEBAPPS/${APP_NAME}.war"
cp -a "$BACKUP_DIR/${APP_NAME}" "$WEBAPPS/" 2>/dev/null || true
cp -a "$BACKUP_DIR/${APP_NAME}.war" "$WEBAPPS/" 2>/dev/null || true
"$CATALINA_HOME/bin/startup.sh"
}
main(){
trap rollback ERR
stop_tomcat
backup
deploy
start_tomcat
if ! health_check; then
rollback
exit 1
fi
log "Deploy SUCCESS."
}
main "$@"
- 使用要点
- 建议以 非 root 运行,目录权限与 tomcat 用户一致。
- 多实例场景需为 CATALINA_HOME/CATALINA_BASE 分别配置。
- 若需并发安全,可在脚本外加 文件锁 或 CI 的 并发限制。
三、Maven Tomcat 插件部署
- 服务端配置:在 $CATALINA_HOME/conf/tomcat-users.xml 增加可脚本化访问的管理角色与用户
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="deployer" password="StrongPass!23" roles="manager-script,manager-jmx,manager-status"/>
- 客户端配置:在 ~/.m2/settings.xml 配置认证 Server
<servers>
<server>
<id>tomcat-serverid>
<username>deployerusername>
<password>StrongPass!23password>
server>
servers>
- 项目配置:在 pom.xml 使用插件(示例为 tomcat7-maven-plugin)
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<url>http://192.168.10.20:8080/manager/texturl>
<server>tomcat-serverserver>
<path>/${project.artifactId}path>
<update>trueupdate>
<charset>UTF-8charset>
configuration>
plugin>
plugins>
build>
- 常用命令
- 首次部署:mvn clean package tomcat7:deploy
- 热更新:mvn tomcat7:redeploy
- 常见问题
- 403/401:检查 tomcat-users.xml 角色是否为 manager-script,以及 settings.xml 的 server id 是否一致。
- 连接失败:确认 manager/text 已启用、网络与防火墙策略允许访问、Tomcat 已启动。
四、Jenkins 流水线编排
- 基本步骤
- 源码拉取 → 选择 Maven 构建(产出 WAR)→ 归档制品 → 调用 Shell 脚本 或 Maven 插件 发布到目标 Tomcat → 健康检查 → 成功归档与通知,失败回滚。
- 关键实践
- 参数化构建:选择 环境(dev/test/prod)、版本号/构建号、是否回滚。
- 人工确认:生产发布前设置 确认门禁(Approval)。
- 并发与锁:同一 Tomcat 实例 同一时间只允许一个发布作业。
- 回滚作业:基于已归档的 WAR/备份 快速回滚,减少 MTTR。
- 安全:凭据使用 Jenkins Credentials 管理,禁止明文;限制脚本执行权限。
五、安全与运维要点
- 访问控制:仅开放必要端口(如 8080/8443),管理端 /manager 限制来源 IP,强口令与最小权限原则。
- 权限最小化:部署脚本与 Tomcat 运行用户分离,避免以 root 部署。
- 原子化与回滚:先备份再部署,失败自动回滚;优先使用 WAR 部署而非直接替换目录。
- 日志与审计:保留 catalina.out 与部署日志,关键步骤加时间戳与操作者标记。
- 健康检查:应用提供 /health 或 /actuator/health 端点,发布后自动校验,超时即回滚。
- 多实例与并行:为 CATALINA_BASE 隔离实例,发布前检查端口占用与数据库连接池状态。
以上就是关于“如何利用Linux Tomcat实现自动化部署”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm