Files
novalon-website/scripts/setup-cicd/README.md
T
张翔 b8ab1fd0e3 build(ci/cd): add full automated CI/CD setup scripts
新增了完整的Novalon网站CI/CD自动化配置工具链,包括:
1.  一键启动脚本、主配置脚本与配置文件
2.  Jenkins容器部署、Gitea Webhook配置、环境验证脚本
3.  完善的中文文档与使用示例
4.  优化了Jenkinsfile流水线,新增构建保留、并发限制、备份清理等功能
2026-05-14 16:18:30 +08:00

374 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Novalon Website CI/CD 自动化配置工具
## 📋 概述
一套完整的自动化脚本,用于快速配置 **Jenkins + Gitea** 的 CI/CD 流水线,实现:
-**一键配置**:自动完成所有 Jenkins 和 Gitea 的配置
-**Docker 适配**:专为 Docker 环境优化(Shell 模式)
-**免密部署**:自动挂载 SSH 密钥,实现生产服务器免密登录
-**Webhook 集成**:自动配置 Gitea Webhook 触发构建
-**完整验证**:自动检测所有配置是否正确
## 🎯 适用场景
- **首次部署**:全新环境的一键初始化
- **环境重建**:需要重置或迁移时
- **故障排查**:验证当前配置状态
- **日常维护**:更新插件、重新配置 Webhook
## 📁 文件结构
```
scripts/setup-cicd/
├── cicd.sh # 一键启动器(入口脚本)
├── setup-cicd.sh # 主配置流程
├── cicd.config # 配置文件(可自定义修改)
└── lib/
├── utils.sh # 工具函数库
├── jenkins-setup.sh # Jenkins 配置逻辑
├── gitea-setup.sh # Gitea Webhook 配置
└── verify.sh # 验证和测试
```
## 🚀 快速开始
### 前置条件
1. **Docker 已安装并运行**
2. **SSH 密钥已生成**(用于免密登录生产服务器):
```bash
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
```
3. **生产服务器的 `authorized_keys` 包含你的公钥**
```bash
ssh-copy-id root@139.155.109.62
```
### 使用方法
#### 1️⃣ 完整安装(首次使用)
```bash
# 进入项目目录
cd /Users/zhangxiang/Codes/Novalon/novalon-website
# 赋予执行权限
chmod +x scripts/setup-cicd/*.sh scripts/setup-cicd/lib/*.sh
# 执行完整安装(会重建 Jenkins 容器)
./scripts/setup-cicd/cicd.sh --full
```
**执行过程**
```
╔════════════════════════════════════════════╗
║ 🚀 Novalon Website CI/CD 自动配置工具 ║
╚════════════════════════════════════════════╝
📋 模式: 完整安装(包含 Docker 容器重建)
════════════════════════════════════════════
检查前置条件
════════════════════════════════════════════
✅ docker 已安装
✅ curl 已安装
✅ jq 已安装
✅ 前置条件检查通过
════════════════════════════════════════════
配置 Jenkins Docker 容器
════════════════════════════════════════════
✅ Jenkins 容器已启动
容器名称: jenkins
访问地址: http://ci.f.novalon.cn:8080
...(后续步骤自动完成)
════════════════════════════════════════════
✅ 自动化配置完成!
════════════════════════════════════════════
🌐 Jenkins: http://ci.f.novalon.cn:8080
🔗 Gitea: https://git.f.novalon.cn
🚀 任务名: novalon-website-ci-cd
```
---
#### 2️⃣ 快速配置(跳过容器重建)
如果 Jenkins 容器已经在运行,只是需要重新配置:
```bash
./scripts/setup-cicd/cicd.sh
```
这会跳过容器创建,直接进行工具安装、凭据配置、任务创建和 Webhook 设置。
---
#### 3️⃣ 仅配置 Jenkins
```bash
./scripts/setup-cicd/cicd.sh --jenkins
```
适用于:
- 安装新的 Jenkins 插件
- 更新全局工具配置
- 重新创建 Pipeline 任务
---
#### 4️⃣ 仅配置 Gitea Webhook
```bash
./scripts/setup-cicd/cicd.sh --webhook
```
适用于:
- Webhook 丢失或损坏
- 更新 Webhook URL
- 重新测试触发机制
---
#### 5️⃣ 验证当前配置
```bash
./scripts/setup-cicd/cicd.sh --verify
```
输出示例:
```
════════════════════════════════════════════
验证结果汇总
════════════════════════════════════════════
总计: 7 项检查
通过: 7 项
🎉 所有配置已就绪!可以开始使用 CI/CD 流水线了。
下一步操作:
1. 访问 http://ci.f.novalon.cn:8080/job/novalon-website-ci-cd/
2. 点击 'Build Now' 进行首次构建
3. 推送代码到 main 分支测试自动触发
4. 勾选 DEPLOY_TO_PRODUCTION 参数测试部署
```
---
#### 6️⃣ 清理所有配置
```bash
./scripts/setup-cicd/cicd.sh --clean
```
⚠️ **警告**:此操作会删除 Jenkins 容器和所有数据!
---
## ⚙️ 自定义配置
编辑 `cicd.config` 文件可以修改以下参数:
```bash
# Jenkins 配置
JENKINS_URL="http://ci.f.novalon.cn:8080"
JENKINS_CONTAINER_NAME="jenkins"
JENKINS_IMAGE="jenkins/jenkins:lts-jdk17"
# Gitea 配置
GITEA_URL="https://git.f.novalon.cn"
GITEA_USERNAME="zhangxiang@novalon.cn"
GITEA_PASSWORD="qerqek-cavxaC-5jupri"
# 生产服务器配置
SERVER_IP="139.155.109.62"
SERVER_USER="root"
DEPLOY_ROOT="/home/novalon/docker-app"
# 项目配置
REPO_OWNER="novalon"
REPO_NAME="novalon-website"
JOB_NAME="novalon-website-ci-cd"
```
## 🔧 故障排查
### 问题 1SSH 连接失败
**症状**:验证阶段显示 "❌ SSH 免密登录: 失败"
**解决方案**
```bash
# 1. 在宿主机上测试 SSH 连接
ssh root@139.155.109.62
# 2. 如果失败,复制公钥到服务器
ssh-copy-id root@139.155.109.62
# 3. 重新运行配置脚本
./scripts/setup-cicd/cicd.sh --jenkins
```
---
### 问题 2Jenkins 容器启动失败
**症状**`docker run` 报错或容器无法访问
**解决方案**
```bash
# 查看容器日志
docker logs jenkins
# 检查端口占用
lsof -i :8080
# 清理后重试
docker stop jenkins && docker rm jenkins
./scripts/setup-cicd/cicd.sh --full
```
---
### 问题 3Webhook 未触发构建
**症状**:推送代码后 Jenkins 无反应
**解决方案**
```bash
# 1. 验证 Webhook 是否存在
./scripts/setup-cicd/cicd.sh --verify
# 2. 手动测试 Webhook
curl -X POST "http://ci.f.novalon.cn:8080/generic-webhook-trigger/invoke?token=novalon-website-ci-token" \
-H "Content-Type: application/json" \
-d '{"ref":"refs/heads/main"}'
# 3. 如果不通,检查网络连通性
docker exec gitea curl -I http://jenkins:8080
```
---
### 问题 4:插件安装失败
**症状**Jenkins 插件未正确加载
**解决方案**
```bash
# 重启 Jenkins 使插件生效
docker restart jenkins
# 等待就绪后重新运行
sleep 30
./scripts/setup-cicd/cicd.sh --jenkins
```
---
## 📊 工作流程图
```
┌─────────────────────┐
│ 开发者推送代码 │
│ git push origin main│
└─────────┬───────────┘
┌─────────────────────┐ ┌──────────────────┐
│ Gitea Webhook │────▶│ Jenkins Trigger │
│ (Push Event) │ │ (Generic Trigger) │
└─────────────────────┘ └────────┬─────────┘
┌────────────────┼────────────────┐
▼ ▼ ▼
┌───────────┐ ┌─────────────┐ ┌──────────────┐
│ 环境准备 │ │ 依赖安装 │ │ 代码质量检查 │
│ (Node.js) │ │ (npm ci) │ │(ESLint+TS) │
└───────────┘ └─────────────┘ └──────────────┘
│ │ │
└────────────────┼────────────────┘
┌──────────────┐
│ 单元测试 │
│ (覆盖率≥80%) │
└──────┬───────┘
┌──────────────┐
│ 构建 dist │
│ (next build) │
└──────┬───────┘
┌──────────────────────────────┐
│ DEPLOY_TO_PRODUCTION=true ? │
└──────────────┬───────────────┘
Yes ↘ ↘ No
┌──────────┐ ┌──────────┐
│ rsync 部署│ │ 构建完成 │
│ Nginx 重载│ │ (仅构建) │
│ 验证页面 │ └──────────┘
└─────┬────┘
┌──────────────┐
│ 发送通知 │
│ (钉钉/邮件) │
└──────────────┘
```
---
## 🎯 最佳实践建议
### 1. 定期运行验证
```bash
# 添加到 crontab,每周五上午 10 点自动验证
0 10 * * 5 cd /path/to/project && ./scripts/setup-cicd/cicd.sh --verify >> /var/log/cicd-check.log 2>&1
```
### 2. 版本控制配置文件
将 `cicd.config` 提交到 Git(注意移除敏感信息或使用环境变量):
```bash
git add scripts/setup-cicd/
git commit -m "chore: add automated CI/CD setup scripts"
git push origin main
```
### 3. 团队协作
新成员入职时只需运行:
```bash
git clone <repo-url>
cd novalon-website
./scripts/setup-cicd/cicd.sh --full
```
即可在 5 分钟内完成完整的开发环境搭建!
---
## 📞 技术支持
如遇到问题:
1. 运行 `./scripts/setup-cicd/cicd.sh --verify` 查看详细诊断
2. 检查日志:`docker logs jenkins`
3. 查看 Gitea Webhook 的 Recent Deliveries
4. 访问 Jenkins 系统日志:Manage Jenkins → System Log
---
**版本**: 1.0.0
**最后更新**: 2026-05-12
**适用环境**: Docker + Jenkins 2.400+ + Gitea 1.19+