- 使用 PAYLOAD=$(cat <<ENDPAYLOAD) 替代 cat > file <<EOF - 确保环境变量在 heredoc 中正确展开 - 添加测试脚本验证环境变量展开 - 修复构建详情链接和消息内容缺失问题
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
# Woodpecker CI 自动触发问题完整排查指南
|
||||
|
||||
## 📋 问题现象
|
||||
|
||||
- ✅ 手动触发 CI 可以正常工作
|
||||
- ❌ 推送代码后 CI 不会自动触发
|
||||
|
||||
---
|
||||
|
||||
## 🔍 排查步骤(按优先级)
|
||||
|
||||
### 步骤 1: 检查 Git Webhook 配置 ⭐⭐⭐⭐⭐
|
||||
|
||||
**这是最可能的原因!**
|
||||
|
||||
#### 操作步骤
|
||||
|
||||
1. 访问 Git 仓库设置页面:
|
||||
```
|
||||
https://git.f.novalon.cn/novalon/novalon-website/settings/hooks
|
||||
```
|
||||
|
||||
2. 检查是否存在 Woodpecker CI 的 Webhook:
|
||||
- ✅ 如果存在 → 继续步骤 3
|
||||
- ❌ 如果不存在 → 执行步骤 2
|
||||
|
||||
3. 查看 Webhook 详情:
|
||||
- **URL**: 应该是 `http://woodpecker-server/hook` 或类似格式
|
||||
- **Secret**: 如果配置了,确保与 Woodpecker CI 一致
|
||||
- **Trigger events**: 必须包含 `Push events`
|
||||
|
||||
4. 查看 "Recent Deliveries":
|
||||
- ✅ 如果有记录 → 查看响应状态码(应该是 200)
|
||||
- ❌ 如果没有记录 → Webhook 未触发,检查触发事件配置
|
||||
|
||||
#### 如何添加 Webhook
|
||||
|
||||
如果 Webhook 不存在,需要添加:
|
||||
|
||||
```bash
|
||||
# Webhook URL 格式
|
||||
http://your-woodpecker-server/hook
|
||||
|
||||
# 或使用 Secret
|
||||
http://your-woodpecker-server/hook?secret=your-secret
|
||||
|
||||
# 触发事件
|
||||
✅ Push events
|
||||
✅ Pull request events
|
||||
✅ Tag push events(可选)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 步骤 2: 检查 Woodpecker CI 仓库设置 ⭐⭐⭐⭐
|
||||
|
||||
#### 操作步骤
|
||||
|
||||
1. 访问 Woodpecker CI Web 界面
|
||||
2. 选择 `novalon/novalon-website` 仓库
|
||||
3. 点击仓库设置(Settings)
|
||||
|
||||
#### 检查项
|
||||
|
||||
- **Active**: ✅ 必须启用
|
||||
- **Trusted**: ✅ 建议启用(允许使用 volumes 等特权操作)
|
||||
- **Protected**: ❌ 如果启用,会限制自动触发
|
||||
- **Configuration**: 确认配置文件路径正确(`.woodpecker.yml`)
|
||||
|
||||
---
|
||||
|
||||
### 步骤 3: 检查 Woodpecker CI 全局配置 ⭐⭐⭐
|
||||
|
||||
如果可以访问 Woodpecker CI 服务器:
|
||||
|
||||
#### 检查环境变量
|
||||
|
||||
```bash
|
||||
# 查看 Woodpecker CI 容器环境变量
|
||||
docker exec woodpecker-server env | grep WOODPECKER
|
||||
|
||||
# 关键环境变量
|
||||
WOODPECKER_OPEN=true # 允许公开访问
|
||||
WOODPECKER_HOST=http://your-server # 服务器地址
|
||||
WOODPECKER_WEBHOOK_HOST=http://your-server # Webhook 地址
|
||||
```
|
||||
|
||||
#### 检查日志
|
||||
|
||||
```bash
|
||||
# 查看 Woodpecker CI 日志
|
||||
docker logs woodpecker-server --tail 100
|
||||
|
||||
# 查找 webhook 相关日志
|
||||
docker logs woodpecker-server 2>&1 | grep -i webhook
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 步骤 4: 检查配置文件语法 ⭐⭐
|
||||
|
||||
#### 使用 YAML 验证器
|
||||
|
||||
```bash
|
||||
# 安装 yamllint
|
||||
pip install yamllint
|
||||
|
||||
# 验证配置文件
|
||||
yamllint .woodpecker.yml
|
||||
```
|
||||
|
||||
#### 在线验证
|
||||
|
||||
访问 https://www.yamllint.com/ 粘贴配置文件内容验证。
|
||||
|
||||
---
|
||||
|
||||
### 步骤 5: 检查提交信息 ⭐
|
||||
|
||||
确认提交信息不包含跳过 CI 的关键词:
|
||||
|
||||
```bash
|
||||
# 查看最近的提交信息
|
||||
git log --oneline -5
|
||||
|
||||
# 跳过 CI 的关键词(避免使用)
|
||||
[skip ci]
|
||||
[ci skip]
|
||||
[no ci]
|
||||
***NO_CI***
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 快速测试方案
|
||||
|
||||
### 方案 1: 使用简化的配置文件
|
||||
|
||||
创建 `.woodpecker-test.yml`:
|
||||
|
||||
```yaml
|
||||
steps:
|
||||
test:
|
||||
image: alpine
|
||||
commands:
|
||||
- echo "CI is working!"
|
||||
```
|
||||
|
||||
然后在 Woodpecker CI 设置中将配置文件改为 `.woodpecker-test.yml`。
|
||||
|
||||
### 方案 2: 手动触发测试
|
||||
|
||||
1. 在 Woodpecker CI 界面手动触发 Pipeline
|
||||
2. 观察是否能正常执行
|
||||
3. 如果手动触发正常,说明配置文件没问题,问题在 Webhook
|
||||
|
||||
### 方案 3: 检查 Webhook 发送记录
|
||||
|
||||
在 Git 仓库的 Webhook 设置中:
|
||||
1. 找到 "Recent Deliveries"
|
||||
2. 查看最近的发送记录
|
||||
3. 点击查看详情:
|
||||
- **Request**: 查看发送的数据
|
||||
- **Response**: 查看服务器响应
|
||||
- **Status code**: 应该是 200
|
||||
|
||||
---
|
||||
|
||||
## 📊 常见问题及解决方案
|
||||
|
||||
### 问题 1: Webhook 发送失败(404 Not Found)
|
||||
|
||||
**原因**: Woodpecker CI 仓库未激活
|
||||
|
||||
**解决**:
|
||||
1. 访问 Woodpecker CI Web 界面
|
||||
2. 找到并激活 `novalon/novalon-website` 仓库
|
||||
|
||||
---
|
||||
|
||||
### 问题 2: Webhook 发送失败(401 Unauthorized)
|
||||
|
||||
**原因**: Webhook Secret 不匹配
|
||||
|
||||
**解决**:
|
||||
1. 检查 Woodpecker CI 的 `WOODPECKER_WEBHOOK_SECRET` 配置
|
||||
2. 在 Git Webhook 设置中配置相同的 Secret
|
||||
|
||||
---
|
||||
|
||||
### 问题 3: Webhook 发送成功但 CI 未触发
|
||||
|
||||
**原因**: 配置文件中的 `when` 条件限制
|
||||
|
||||
**解决**:
|
||||
1. 检查配置文件中的 `when` 条件
|
||||
2. 确保包含正确的分支和事件
|
||||
3. 临时移除 `when` 条件测试
|
||||
|
||||
---
|
||||
|
||||
### 问题 4: Woodpecker CI 日志显示 "repo not found"
|
||||
|
||||
**原因**: 仓库权限问题
|
||||
|
||||
**解决**:
|
||||
1. 在 Woodpecker CI 中重新授权访问仓库
|
||||
2. 检查 OAuth token 是否过期
|
||||
|
||||
---
|
||||
|
||||
## 🎯 推荐操作流程
|
||||
|
||||
### 立即执行(5分钟)
|
||||
|
||||
1. **检查 Git Webhook 配置**
|
||||
- 访问仓库设置 → Webhooks
|
||||
- 确认有 Woodpecker CI 的 Webhook
|
||||
- 查看 "Recent Deliveries"
|
||||
|
||||
2. **手动触发测试**
|
||||
- 在 Woodpecker CI 中手动触发 Pipeline
|
||||
- 确认配置文件正确
|
||||
|
||||
### 短期执行(30分钟)
|
||||
|
||||
1. **重新配置 Webhook**(如果需要)
|
||||
- 删除旧的 Webhook
|
||||
- 添加新的 Webhook
|
||||
- 测试发送
|
||||
|
||||
2. **检查 Woodpecker CI 设置**
|
||||
- 确认仓库已激活
|
||||
- 启用 "Trusted" 选项
|
||||
- 取消分支保护
|
||||
|
||||
### 中期执行(如果问题持续)
|
||||
|
||||
1. **查看 Woodpecker CI 日志**
|
||||
- 检查服务器日志
|
||||
- 查找错误信息
|
||||
|
||||
2. **联系管理员**
|
||||
- 如果没有服务器访问权限
|
||||
- 提供详细的错误信息
|
||||
|
||||
---
|
||||
|
||||
## 📝 诊断信息收集
|
||||
|
||||
如果以上步骤都无法解决,请收集以下信息:
|
||||
|
||||
```bash
|
||||
# 1. Git Webhook 配置截图
|
||||
# 2. Webhook "Recent Deliveries" 截图
|
||||
# 3. Woodpecker CI 仓库设置截图
|
||||
# 4. 手动触发的 Pipeline 日志
|
||||
# 5. 配置文件内容
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 成功标志
|
||||
|
||||
当以下条件满足时,CI 应该能够自动触发:
|
||||
|
||||
- ✅ Git Webhook 配置正确且有发送记录
|
||||
- ✅ Woodpecker CI 仓库已激活
|
||||
- ✅ 配置文件语法正确
|
||||
- ✅ when 条件包含当前分支
|
||||
- ✅ 提交信息不包含跳过关键词
|
||||
|
||||
---
|
||||
|
||||
**最后更新**: 2026-03-28
|
||||
Reference in New Issue
Block a user