dd2a0999bb
ci/woodpecker/push/woodpecker Pipeline failed
- 使用 PAYLOAD=$(cat <<ENDPAYLOAD) 替代 cat > file <<EOF - 确保环境变量在 heredoc 中正确展开 - 添加测试脚本验证环境变量展开 - 修复构建详情链接和消息内容缺失问题
304 lines
5.9 KiB
Markdown
304 lines
5.9 KiB
Markdown
# Woodpecker CI/CD 快速启动指南
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 前置准备
|
||
|
||
确保以下条件已满足:
|
||
|
||
- ✅ Git 仓库已配置 Woodpecker CI
|
||
- ✅ 已配置以下 Secrets:
|
||
- `ssh_private_key`: SSH 私钥(用于 Git 操作和服务器部署)
|
||
- `registry_password`: Docker Registry 密码
|
||
|
||
### 2. 配置 Secrets
|
||
|
||
在 Woodpecker CI 界面中配置以下 Secrets:
|
||
|
||
```bash
|
||
# SSH 私钥(用于 Git 操作和服务器部署)
|
||
ssh_private_key: |
|
||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||
...
|
||
-----END OPENSSH PRIVATE KEY-----
|
||
|
||
# Docker Registry 密码
|
||
registry_password: your_registry_password
|
||
```
|
||
|
||
### 3. 配置 Git 分支保护规则
|
||
|
||
在 Git 仓库设置中配置:
|
||
|
||
#### main 分支
|
||
- ✅ 禁止直接推送
|
||
- ✅ 禁止强制推送
|
||
- ✅ 仅允许 CI 自动合并
|
||
|
||
#### release/** 分支
|
||
- ✅ 禁止强制推送
|
||
- ✅ 需要 PR 审核通过
|
||
|
||
#### dev 分支
|
||
- ✅ 需要 PR 审核通过
|
||
- ✅ 需要 CI 检查通过
|
||
|
||
---
|
||
|
||
## 📋 使用流程
|
||
|
||
### 开发新功能
|
||
|
||
```bash
|
||
# 1. 从 dev 创建 feature 分支
|
||
git checkout dev
|
||
git pull origin dev
|
||
git checkout -b feature/new-feature
|
||
|
||
# 2. 开发并提交代码
|
||
git add .
|
||
git commit -m "feat: 添加新功能"
|
||
git push origin feature/new-feature
|
||
|
||
# 3. 创建 PR 到 dev 分支
|
||
# CI 自动执行: Lint + TypeCheck + Unit Test + Smoke E2E
|
||
|
||
# 4. PR 审核通过后合并到 dev
|
||
```
|
||
|
||
### 集成测试
|
||
|
||
```bash
|
||
# 1. feature 分支合并到 dev 后
|
||
# CI 自动执行: Lint + TypeCheck + Unit Test + Standard E2E
|
||
|
||
# 2. 验证集成测试通过
|
||
```
|
||
|
||
### 发布到生产
|
||
|
||
```bash
|
||
# 1. 从 dev 创建 release 分支
|
||
git checkout dev
|
||
git pull origin dev
|
||
git checkout -b release/v1.0.0
|
||
git push origin release/v1.0.0
|
||
|
||
# 2. CI 自动执行完整流程:
|
||
# - 完整测试套件
|
||
# - 构建 Docker 镜像
|
||
# - 部署到生产环境
|
||
# - 归档到 main 分支
|
||
# - 创建版本标签
|
||
|
||
# 3. 验证部署成功
|
||
curl https://novalon.cn/api/health
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 监控与调试
|
||
|
||
### 查看 CI 运行状态
|
||
|
||
1. 访问 Woodpecker CI 界面
|
||
2. 选择对应的仓库
|
||
3. 查看最新的 Pipeline 运行状态
|
||
|
||
### 常见问题排查
|
||
|
||
#### 问题1: Lint 检查失败
|
||
|
||
```bash
|
||
# 本地运行 Lint 检查
|
||
npm run lint
|
||
|
||
# 自动修复
|
||
npm run lint:fix
|
||
```
|
||
|
||
#### 问题2: 类型检查失败
|
||
|
||
```bash
|
||
# 本地运行类型检查
|
||
npm run type-check
|
||
```
|
||
|
||
#### 问题3: 单元测试失败
|
||
|
||
```bash
|
||
# 本地运行单元测试
|
||
npm run test
|
||
|
||
# 查看覆盖率
|
||
npm run test:coverage
|
||
```
|
||
|
||
#### 问题4: E2E 测试失败
|
||
|
||
```bash
|
||
# 本地运行 E2E 测试
|
||
npm run test:e2e
|
||
|
||
# 运行特定测试
|
||
npx playwright test tests/smoke.spec.ts
|
||
```
|
||
|
||
#### 问题5: 部署失败
|
||
|
||
1. 检查健康检查日志
|
||
2. 检查服务器日志
|
||
3. 验证 Secrets 配置
|
||
4. 检查网络连接
|
||
|
||
---
|
||
|
||
## 🎯 质量门禁
|
||
|
||
### feature 分支
|
||
|
||
| 检查项 | 通过标准 | 失败后果 |
|
||
|--------|---------|---------|
|
||
| Lint | 0 errors | ❌ 阻止合并 |
|
||
| TypeCheck | 0 errors | ❌ 阻止合并 |
|
||
| Unit Test | 覆盖率 ≥ 80% | ❌ 阻止合并 |
|
||
| Smoke E2E | 100% 通过 | ❌ 阻止合并 |
|
||
|
||
### dev 分支
|
||
|
||
| 检查项 | 通过标准 | 失败后果 |
|
||
|--------|---------|---------|
|
||
| Lint | 0 errors | ❌ 阻止合并 |
|
||
| TypeCheck | 0 errors | ❌ 阻止合并 |
|
||
| Unit Test | 覆盖率 ≥ 80% | ❌ 阻止合并 |
|
||
| Standard E2E | 100% 通过 | ❌ 阻止合并 |
|
||
|
||
### release 分支
|
||
|
||
| 检查项 | 通过标准 | 失败后果 |
|
||
|--------|---------|---------|
|
||
| 完整测试套件 | 100% 通过 | ❌ 阻止部署 |
|
||
| 健康检查 | HTTP 200 OK | ❌ 自动回滚 |
|
||
|
||
---
|
||
|
||
## 📊 性能指标
|
||
|
||
### 预期执行时间
|
||
|
||
| 分支类型 | 预期时间 | 主要步骤 |
|
||
|---------|---------|---------|
|
||
| feature/** | 5-10 分钟 | Lint + TypeCheck + Unit Test + Smoke E2E |
|
||
| dev | 10-15 分钟 | Lint + TypeCheck + Unit Test + Standard E2E |
|
||
| release/** | 30-45 分钟 | 完整测试 + 构建 + 部署 + 归档 |
|
||
|
||
### 优化建议
|
||
|
||
1. **添加缓存**: 减少 50-70% 的依赖安装时间
|
||
2. **并行执行**: 减少 30-50% 的测试时间
|
||
3. **增量测试**: 只运行受影响的测试
|
||
|
||
---
|
||
|
||
## 🔔 通知配置(待实现)
|
||
|
||
### 企业微信通知
|
||
|
||
```yaml
|
||
notify-wechat:
|
||
image: alpine:latest
|
||
commands:
|
||
- |
|
||
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY" \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{
|
||
"msgtype": "markdown",
|
||
"markdown": {
|
||
"content": "## 部署通知\n> 状态: 成功\n> 分支: release/v1.0.0\n> 提交: abc1234"
|
||
}
|
||
}'
|
||
when:
|
||
status: [success, failure]
|
||
```
|
||
|
||
### 钉钉通知
|
||
|
||
```yaml
|
||
notify-dingtalk:
|
||
image: alpine:latest
|
||
commands:
|
||
- |
|
||
curl -X POST "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN" \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{
|
||
"msgtype": "markdown",
|
||
"markdown": {
|
||
"title": "部署通知",
|
||
"text": "## 部署通知\n> 状态: 成功\n> 分支: release/v1.0.0"
|
||
}
|
||
}'
|
||
when:
|
||
status: [success, failure]
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 相关文档
|
||
|
||
- [验收报告](./CICD_ACCEPTANCE_REPORT.md)
|
||
- [配置文件](./.woodpecker.yml)
|
||
- [测试脚本](./test-woodpecker-config.py)
|
||
|
||
---
|
||
|
||
## 💡 最佳实践
|
||
|
||
### 提交信息规范
|
||
|
||
使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范:
|
||
|
||
```
|
||
feat: 添加新功能
|
||
fix: 修复 bug
|
||
docs: 更新文档
|
||
style: 代码格式调整
|
||
refactor: 重构代码
|
||
test: 添加测试
|
||
chore: 构建/工具链更新
|
||
```
|
||
|
||
### 分支命名规范
|
||
|
||
```
|
||
feature/功能名称 # 新功能开发
|
||
bugfix/问题描述 # Bug 修复
|
||
hotfix/紧急修复 # 紧急修复
|
||
release/v版本号 # 发布分支
|
||
```
|
||
|
||
### 版本标签规范
|
||
|
||
```
|
||
v2026.03.28-abc1234
|
||
│ │ │ └─ commit SHA 前 7 位
|
||
│ │ └──── 日期
|
||
│ └─────── 年份
|
||
└────────── 版本前缀
|
||
```
|
||
|
||
---
|
||
|
||
## 🆘 获取帮助
|
||
|
||
遇到问题时:
|
||
|
||
1. 查看本文档
|
||
2. 查看 [验收报告](./CICD_ACCEPTANCE_REPORT.md)
|
||
3. 查看 CI 运行日志
|
||
4. 联系运维团队
|
||
|
||
---
|
||
|
||
**最后更新**: 2026-03-28
|
||
**维护者**: 张翔
|