当前位置: 首页 > news >正文

从GitHub到Tomcat:在麒麟V10上搭建一条龙自动化部署流水线

从GitHub到Tomcat:在麒麟V10上搭建一条龙自动化部署流水线

在当今快节奏的软件开发环境中,自动化部署已成为提升团队效率的关键环节。对于使用国产操作系统麒麟V10的中小团队来说,构建一套从代码托管到应用部署的完整流水线,不仅能显著减少人工操作错误,还能加速迭代周期。本文将手把手带你搭建一个简易但完整的CI/CD流程,涵盖GitHub代码管理、Maven构建优化和Tomcat自动化部署三大核心环节。

麒麟V10作为国产操作系统的代表,其安全性和稳定性已得到广泛验证。我们将从最基础的SSH密钥配置开始,逐步实现代码提交后的自动构建与部署。这套方案特别适合资源有限但追求效率提升的团队,所有组件均采用开源工具,无需额外预算即可获得接近专业级的自动化体验。

1. 基础环境准备与SSH密钥配置

1.1 麒麟V10基础环境调优

在开始前,请确保你的麒麟V10系统已更新到最新版本。打开终端,执行以下命令完成基础准备:

# 更新系统软件包 sudo yum update -y # 安装基础开发工具链 sudo yum groupinstall "Development Tools" -y # 安装常用依赖 sudo yum install -y curl wget unzip zip

对于国内用户,建议先配置yum镜像源以加速下载。创建新的repo文件:

sudo vi /etc/yum.repos.d/kylin.repo

填入以下内容(以华为镜像源为例):

[ks10-adv-os] name = Kylin Linux Advanced Server 10 - Os baseurl = https://mirrors.huaweicloud.com/kylin/KS10-Adv/os/aarch64/ gpgcheck = 0 enabled = 1

1.2 配置Git与GitHub的SSH连接

实现自动化部署的第一步是建立安全的代码获取通道。我们将配置SSH密钥实现GitHub免密访问:

# 生成ED25519算法密钥(比RSA更安全) ssh-keygen -t ed25519 -C "your_email@example.com"

生成过程中会提示保存位置,直接回车使用默认路径即可。接着查看并复制公钥:

cat ~/.ssh/id_ed25519.pub

将输出的内容完整添加到GitHub的SSH Keys设置页面(Settings → SSH and GPG keys)。测试连接是否成功:

ssh -T git@github.com

看到"Hi username!"的欢迎信息即表示配置成功。最后设置全局Git配置:

git config --global user.name "Your Name" git config --global user.email "your_email@example.com" git config --global core.autocrlf input git config --global core.safecrlf true

提示:对于团队开发,建议使用部署专用账号而非个人账号,便于权限管理

2. JDK与Maven环境搭建

2.1 安装优化版JDK

我们选择OpenJDK 11作为基础Java环境,这是目前大多数Java应用的推荐版本:

# 安装OpenJDK sudo yum install -y java-11-openjdk-devel # 验证安装 java -version javac -version

配置JAVA_HOME环境变量。首先查找JDK安装路径:

readlink -f $(which java) | sed 's|/bin/java||'

然后在/etc/profile.d目录创建独立配置文件:

sudo vi /etc/profile.d/java.sh

加入以下内容(路径替换为实际查询结果):

export JAVA_HOME=/usr/lib/jvm/java-11-openJdk export PATH=$JAVA_HOME/bin:$PATH

使配置立即生效:

source /etc/profile

2.2 配置高性能Maven环境

从官网下载最新版Maven并安装:

wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz sudo tar -zxvf apache-maven-*.tar.gz -C /opt sudo ln -s /opt/apache-maven-3.8.6 /opt/maven

创建Maven专属配置,优化构建速度:

sudo vi /opt/maven/conf/settings.xml

关键配置修改如下:

<localRepository>/var/maven/repository</localRepository> <mirrors> <mirror> <id>aliyun</id> <name>Aliyun Maven Mirror</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <profiles> <profile> <id>default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> </profile> </profiles>

配置环境变量:

sudo vi /etc/profile.d/maven.sh

加入:

export MAVEN_HOME=/opt/maven export PATH=$MAVEN_HOME/bin:$PATH

验证安装:

mvn -v

3. Tomcat部署优化与自动化

3.1 安全加固的Tomcat安装

下载并安装Tomcat 9:

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.68/bin/apache-tomcat-9.0.68.tar.gz sudo tar -zxvf apache-tomcat-*.tar.gz -C /opt sudo ln -s /opt/apache-tomcat-9.0.68 /opt/tomcat

创建专用系统用户运行Tomcat:

sudo useradd -r -m -d /opt/tomcat -s /bin/false tomcat sudo chown -R tomcat:tomcat /opt/tomcat sudo chmod -R u+x /opt/tomcat/bin

优化server.xml配置:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="200" minSpareThreads="10" enableLookups="false" acceptCount="100" disableUploadTimeout="true" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"/>

3.2 自动化部署脚本开发

创建自动部署脚本/opt/scripts/deploy.sh:

#!/bin/bash # 配置参数 REPO_DIR="/var/www/repo" TOMCAT_HOME="/opt/tomcat" APP_NAME="myapp" GIT_REPO="git@github.com:yourname/yourrepo.git" # 拉取最新代码 cd $REPO_DIR git pull origin main # 构建项目 mvn clean package -DskipTests # 停止Tomcat sudo -u tomcat $TOMCAT_HOME/bin/shutdown.sh # 备份旧版本 TIMESTAMP=$(date +%Y%m%d%H%M%S) mv $TOMCAT_HOME/webapps/$APP_NAME.war $TOMCAT_HOME/webapps/$APP_NAME.war.$TIMESTAMP.bak # 部署新版本 cp target/*.war $TOMCAT_HOME/webapps/$APP_NAME.war # 启动Tomcat sudo -u tomcat $TOMCAT_HOME/bin/startup.sh # 健康检查 sleep 10 curl -I http://localhost:8080/$APP_NAME/

设置脚本可执行权限:

sudo chmod +x /opt/scripts/deploy.sh

4. 全流程集成与测试

4.1 GitHub Webhook自动触发

在项目仓库的Settings → Webhooks页面添加新的webhook:

  • Payload URL: http://your-server-ip:8080/github-webhook/
  • Content type: application/json
  • Secret: 设置一个复杂密码
  • 事件类型: 仅选择Push events

服务器端需要配置接收webhook的接口。可以使用简单的Python Flask应用:

from flask import Flask, request import subprocess app = Flask(__name__) SECRET = 'your_secret_here' @app.route('/github-webhook', methods=['POST']) def handle_webhook(): signature = request.headers.get('X-Hub-Signature-256', '').split('=')[1] # 实际项目应实现签名验证 if request.json['ref'] == 'refs/heads/main': subprocess.run(['/opt/scripts/deploy.sh'], check=True) return 'OK' if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)

4.2 日志监控与报警

配置日志轮转,防止日志文件过大:

sudo vi /etc/logrotate.d/tomcat

加入:

/opt/tomcat/logs/catalina.out { daily rotate 30 missingok compress delaycompress notifempty copytruncate }

设置简单的异常监控脚本:

#!/bin/bash ERROR_COUNT=$(grep -c "ERROR" /opt/tomcat/logs/catalina.out) if [ $ERROR_COUNT -gt 0 ]; then echo "发现 $ERROR_COUNT 个错误" | mail -s "Tomcat异常警报" admin@example.com fi

添加到crontab每日执行:

0 0 * * * /opt/scripts/monitor.sh
http://www.jsqmd.com/news/696108/

相关文章:

  • Jetson Nano + 双目摄像头:从零到一跑通ORB_SLAM2的完整避坑指南(Ubuntu 18.04)
  • 2026广东超易洁金丝绒瓷砖品牌推荐:防脱落瓷砖品牌优选指南 - 栗子测评
  • K近邻算法原理与实践:从基础到优化
  • 从Bootloader设计到APP跳转:深入理解STM32内存映射如何影响你的实际项目
  • 从依赖关系到执行序列:有向无环图(DAG)与拓扑排序的实战解析
  • 天梯赛L2进阶:结构体排序与STL容器的实战抉择
  • Praat基频分析结果存疑?手把手教你用窄带谱图和倒谱进行交叉验证
  • ARMCC退役倒计时:如何在Keil5.37+环境强行使用AC5编译器(避坑指南)
  • 2026年3月有足弓支撑的护士鞋生产厂家口碑推荐,护士鞋哪个好,缓震效果好,减轻脚部负担压力 - 品牌推荐师
  • 从Wi-Fi路由器到宙斯盾:聊聊有源相控阵雷达(AESA)的‘T/R组件’到底牛在哪?
  • C++实战:利用xlnt库构建自动化Excel报表系统
  • 开源AI专家团队项目:构建模块化、可组合的虚拟协作工作流
  • 3种高效方案解决TranslucentTB开机自启动难题:Windows任务栏美化工具完全指南
  • 用Deeplabv3在Cityscapes上做语义分割:从数据预处理到可视化测试的全流程保姆级教程
  • 【C++26合约编程权威指南】:2026年唯一经ISO WG21草案验证的生产级实战手册(含12个工业级断言迁移案例)
  • 2026年兰州正规装饰机构实测盘点:5家合规服务商解析 - 优质品牌商家
  • 2026浙江铝单板厂家盘点:润达铝业带你了解实力冲孔雕花/热转印木纹/氟碳喷涂/别墅外墙装饰靠谱厂家 - 栗子测评
  • 2026佛山一线陶瓷品牌有哪些?广东新一线陶瓷品牌榜单盘点 - 栗子测评
  • 消息队列-RabbitMq
  • 车载HMI开发必看:VSCode+QNX SDP 7.1+EB tresos深度集成实战(官方未公开的gdb-server多核调试秘技)
  • 深度学习中批标准化技术的原理与实践
  • GNSS数据处理避坑指南:为什么你的RTK解算总失败?从o文件和nav文件的常见错误说起
  • 别再傻等串口发送了!STM32 HAL库中断发送HAL_UART_Transmit_IT保姆级避坑指南
  • 2026年可调激光器光源主流品牌排行及核心能力解析:波长可调谐激光器,点光源,窄线宽激光器,排行一览! - 优质品牌商家
  • 2026选连接器不踩坑!格瑞达储能连接器、防水连接器工厂实力盘点,解答叉车、AGV、电源锂电池 pack、大电流连接器哪 - 栗子测评
  • 从特雷门琴到万物互联:一文读懂RFID技术的前世今生与未来
  • 高速数字系统信号完整性挑战与解决方案
  • VSCode国产化配置黄金清单:工信部推荐的6项强制合规项、8项等保2.0达标配置及2个零信任接入模板
  • JDK异常处理No appropriate protocol
  • 2026年推荐哈尔滨PE管/哈尔滨PE给水管源头工厂推荐 - 品牌宣传支持者