如何通过GitLab CI/CD将WAR包部署到两台Tomcat实例?
部署Spring Boot WAR到两台Tomcat实例的GitLab CI/CD方案
方法一:单个Job中依次部署到两台服务器
通过SSH将构建好的WAR包分别传输到两台Tomcat服务器,前提是GitLab Runner已配置无密码SSH访问两台目标机器(将Runner的公钥添加到两台Tomcat服务器的~/.ssh/authorized_keys中)。修改.gitlab-ci.yml如下:
stages: - build - deploy maven-build: stage: build script: "mvn package -B" artifacts: paths: - target/*.war deploy-to-tomcats: stage: deploy script: # 部署到第一台Tomcat服务器 - scp target/testservice.war 你的用户@tomcat服务器1地址:/var/lib/tomcat9/webapps/ # 部署到第二台Tomcat服务器 - scp target/testservice.war 你的用户@tomcat服务器2地址:/var/lib/tomcat9/webapps/
方法二:拆分两个独立Deploy Job(支持并行部署)
将部署逻辑拆分为两个独立Job,同属deploy阶段,默认会并行执行,提升部署效率:
stages: - build - deploy maven-build: stage: build script: "mvn package -B" artifacts: paths: - target/*.war deploy-to-tomcat-1: stage: deploy script: - scp target/testservice.war 你的用户@tomcat服务器1地址:/var/lib/tomcat9/webapps/ deploy-to-tomcat-2: stage: deploy script: - scp target/testservice.war 你的用户@tomcat服务器2地址:/var/lib/tomcat9/webapps/
方法三:用GitLab变量管理服务器信息(便于维护)
在GitLab项目的「设置 → CI/CD → 变量」中添加服务器地址、用户名等变量(如TOMCAT_1_HOST、TOMCAT_1_USER、TOMCAT_2_HOST、TOMCAT_2_USER),之后在脚本中引用,避免硬编码:
stages: - build - deploy maven-build: stage: build script: "mvn package -B" artifacts: paths: - target/*.war deploy-to-tomcats: stage: deploy script: - scp target/testservice.war $TOMCAT_1_USER@$TOMCAT_1_HOST:/var/lib/tomcat9/webapps/ - scp target/testservice.war $TOMCAT_2_USER@$TOMCAT_2_HOST:/var/lib/tomcat9/webapps/
额外注意事项
- 确保Tomcat服务器的
/var/lib/tomcat9/webapps目录对部署用户有写入权限 - 若需部署后重启Tomcat,可在
scp后追加SSH命令,例如:ssh 你的用户@tomcat服务器1地址 "sudo systemctl restart tomcat9"(需确保部署用户有免密sudo权限) - 大体积WAR包推荐用
rsync替代scp,增量传输更高效
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

