dd2a0999bb
ci/woodpecker/push/woodpecker Pipeline failed
- 使用 PAYLOAD=$(cat <<ENDPAYLOAD) 替代 cat > file <<EOF - 确保环境变量在 heredoc 中正确展开 - 添加测试脚本验证环境变量展开 - 修复构建详情链接和消息内容缺失问题
276 lines
5.8 KiB
Markdown
276 lines
5.8 KiB
Markdown
# 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
|