从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 = 11.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/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> <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 -v3. 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.sh4. 全流程集成与测试
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