跳到主要内容

若善云 CI/CD 自动化部署与发布技术文档

文档版本:v1.2


1. 概述

本文档详细描述了若善云(RuoShan Cloud)项目在 Gitea 平台上的 CI/CD 自动化流程,涵盖两个核心场景:

  • UAT 环境发布:通过打 uat-* 标签触发部署。
  • 定时测试环境自动构建与发布:通过 test-* 标签或每日凌晨 2 点定时任务触发。

两个流程均基于 GitHub Actions(兼容 Gitea Actions)实现,使用 Maven 构建 Java 项目,通过 rsync 同步 JAR 包至远程服务器,并通过 SSH 重启 Docker 服务。定时任务还会自动创建 Gitea Release。


2. 技术架构

2.1 整体架构图(Mermaid)

2.2 关键组件说明

组件说明
Gitea私有 Git 服务,托管代码仓库 ruo-shan-cloud
Actions Runner自建在“若善云服务端”的 CI/CD 执行环境
MavenJava 项目构建工具,使用 JDK 25
rsync安全高效同步构建产物(JAR)到远程服务器
SSH + Docker通过 SSH 执行 docker restart 实现服务热更新
Gitea API用于自动创建 Release(仅 test 流程)

3. 工作流配置详解

3.1 UAT 发布流程(release-uat.yaml

触发条件

  • 推送符合 uat-* 正则的 Git Tag。

执行流程

代码片段分析

on:
push:
tags:
- 'uat-*'
  • 说明:仅当推送的 tag 名以 uat- 开头时触发。
steps:
- name: 编译代码
run: |
mvn clean
mvn install
  • 注意:未跳过测试(-DskipTests),适用于 UAT 环境需保证质量。
- name: 复制代码到远端
uses: burnett01/rsync-[email protected]
with:
path: ./build/*.jar
  • 问题:实际 Maven 默认输出目录为 target/,此处 ./build/ 可能为误写(需确认项目配置)。

3.2 测试环境自动构建与发布(release-uat-test-api.yaml

触发条件

  • 推送 test-* 标签
  • 每日凌晨 2 点(cron: '0 2 * * *'

执行流程

代码片段分析

env:
GITEA_URL: https://git.rsjk.org.cn
GITEA_OWNER: sun_3211
GITEA_REPO: ruo-shan-cloud
  • 说明:硬编码仓库信息,便于 API 调用。
- name: 生成 TAG(仅 schedule 触发时)
if: github.event_name == 'schedule'
run: |
TAG_NAME="test-$(date +'%Y%m%d%H%M%S')"
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV
  • 设计亮点:定时任务自动打时间戳标签,避免手动操作。
curl -X POST ... ${GITEA_URL}/api/v1/repos/.../releases
  • 安全:使用 secrets.GITEA_TOKEN 进行认证。
  • 健壮性:检查 HTTP 状态码,失败时输出错误详情。

4. 配置对比表

特性release-uat.yamlrelease-uat-test-api.yaml
触发方式uat-* tagtest-* tag 或 cron
构建目录./build/(存疑)./target/(标准 Maven)
跳过测试❌ 未跳过-DskipTests
JDK 安装注释掉✅ 显式安装 JDK 25
远程路径${{ vars.REMOTE_PATH }}/home/project/(硬编码)
创建 Release❌ 无✅ 自动调用 Gitea API
错误处理基础set -e + 显式 exit 1
服务重启间隔10 秒30 秒(更稳妥)

建议:统一使用 target/ 目录,并将远程路径参数化。


5. 安全与最佳实践

5.1 安全措施

  • 所有敏感信息(SSH 密钥、Gitea Token、主机地址)均通过 secrets 管理。
  • SSH 使用密钥认证,禁用密码登录。
  • Gitea API 调用使用最小权限 Token。

5.2 改进建议

  1. 统一构建目录:确认 build/ 是否为自定义输出路径,否则应改为 target/
  2. 参数化远程路径:避免硬编码 /home/project/,改用 varssecrets
  3. 增加健康检查:重启服务后,调用 /actuator/health 确认服务就绪。
  4. 日志归档:将构建日志和部署日志持久化存储。

6. 附录:关键环境变量与 Secrets

名称类型说明
REMOTE_USERsecret远程服务器 SSH 用户名
DEV_REMOTE_HOSTsecret远程服务器 IP 或域名
SERVER_SSH_KEYsecretSSH 私钥(PEM 格式)
GITEA_TOKENsecretGitea Personal Access Token(需 repo 权限)
REMOTE_PATHvariable远程部署路径(仅 uat 流程使用)
HOME_CACHEvariable本地缓存目录(uat 流程使用)

7. 总结

本文档完整描述了若善云项目在 Gitea 平台上的双模式 CI/CD 自动化方案:

  • UAT 发布:手动打标,严格构建,适用于准生产验证。
  • Test 自动化:支持定时构建 + 自动打标 + 自动 Release,适用于每日集成测试。

两套流程结构清晰、安全可控,具备良好的可维护性和扩展性。建议后续统一构建路径与部署参数,进一步提升复用性与健壮性。


文档结束

Loading comments...