从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 11.2 配置Git与GitHub的SSH连接实现自动化部署的第一步是建立安全的代码获取通道。我们将配置SSH密钥实现GitHub免密访问# 生成ED25519算法密钥比RSA更安全 ssh-keygen -t ed25519 -C your_emailexample.com生成过程中会提示保存位置直接回车使用默认路径即可。接着查看并复制公钥cat ~/.ssh/id_ed25519.pub将输出的内容完整添加到GitHub的SSH Keys设置页面Settings → SSH and GPG keys。测试连接是否成功ssh -T gitgithub.com看到Hi username!的欢迎信息即表示配置成功。最后设置全局Git配置git config --global user.name Your Name git config --global user.email your_emailexample.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/profile2.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 idaliyun/id nameAliyun Maven Mirror/name urlhttps://maven.aliyun.com/repository/public/url mirrorOfcentral/mirrorOf /mirror /mirrors profiles profile iddefault/id activation activeByDefaulttrue/activeByDefault /activation properties maven.compiler.source11/maven.compiler.source maven.compiler.target11/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 -v3. Tomcat部署优化与自动化3.1 安全加固的Tomcat安装下载并安装Tomcat 9wget 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创建专用系统用户运行Tomcatsudo useradd -r -m -d /opt/tomcat -s /bin/false tomcat sudo chown -R tomcat:tomcat /opt/tomcat sudo chmod -R ux /opt/tomcat/bin优化server.xml配置Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 maxThreads200 minSpareThreads10 enableLookupsfalse acceptCount100 disableUploadTimeouttrue compressionon compressionMinSize2048 compressableMimeTypetext/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_NAMEmyapp GIT_REPOgitgithub.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.sh4. 全流程集成与测试4.1 GitHub Webhook自动触发在项目仓库的Settings → Webhooks页面添加新的webhookPayload URL: http://your-server-ip:8080/github-webhook/Content type: application/jsonSecret: 设置一个复杂密码事件类型: 仅选择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], checkTrue) return OK if __name__ __main__: app.run(host0.0.0.0, port8080)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异常警报 adminexample.com fi添加到crontab每日执行0 0 * * * /opt/scripts/monitor.sh