dd2a0999bb
ci/woodpecker/push/woodpecker Pipeline failed
- 使用 PAYLOAD=$(cat <<ENDPAYLOAD) 替代 cat > file <<EOF - 确保环境变量在 heredoc 中正确展开 - 添加测试脚本验证环境变量展开 - 修复构建详情链接和消息内容缺失问题
259 lines
5.6 KiB
Markdown
259 lines
5.6 KiB
Markdown
# Woodpecker CI 自动触发问题诊断指南
|
||
|
||
## 🔍 问题现象
|
||
|
||
- ✅ Git Webhook 推送成功
|
||
- ✅ 手动触发 CI 可以工作
|
||
- ❌ 推送代码后 CI 不会自动触发
|
||
- ❌ Woodpecker CI 设置中 "批准要求" 已改为 "无"
|
||
|
||
---
|
||
|
||
## 📝 需要在生产环境执行的命令
|
||
|
||
### 1. 查看 Woodpecker CI 日志
|
||
|
||
```bash
|
||
# SSH 到 Woodpecker CI 服务器
|
||
ssh user@139.155.109.62
|
||
|
||
# 查看 Woodpecker 容器日志
|
||
docker logs woodpecker-server --tail 100
|
||
|
||
# 查看 Webhook 相关日志
|
||
docker logs woodpecker-server --tail 200 2>&1 | grep -i "webhook"
|
||
|
||
# 查看仓库相关日志
|
||
docker logs woodpecker-server --tail 200 2>&1 | grep -i "novalon-website"
|
||
|
||
# 查看错误日志
|
||
docker logs woodpecker-server --tail 200 2>&1 | grep -iE "(error|fail|warn)"
|
||
```
|
||
|
||
### 2. 检查 Woodpecker CI 环境变量
|
||
|
||
```bash
|
||
# 查看 Woodpecker 环境变量
|
||
docker exec woodpecker-server env | grep WOODPECKER
|
||
|
||
# 关键环境变量检查
|
||
WOODPECKER_HOST # 应该设置为服务器地址
|
||
WOODPECKER_WEBHOOK_HOST # Webhook 地址
|
||
WOODPECKER_OPEN # 是否开放访问
|
||
WOODPECKER_DEFAULT_PIPELINE # 默认 Pipeline 配置
|
||
```
|
||
|
||
### 3. 检查 Webhook 接收情况
|
||
|
||
```bash
|
||
# 实时查看日志
|
||
docker logs woodpecker-server -f
|
||
|
||
# 然后推送代码,观察日志输出
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 常见问题及解决方案
|
||
|
||
### 问题 1: Webhook 地址配置错误
|
||
|
||
**症状**: Webhook 发送成功,但 Woodpecker 没有响应
|
||
|
||
**检查**:
|
||
```bash
|
||
# 检查 WOODPECKER_HOST
|
||
docker exec woodpecker-server env | grep WOODPECKER_HOST
|
||
|
||
# 应该返回类似:
|
||
# WOODPECKER_HOST=https://ci.f.novalon.cn
|
||
```
|
||
|
||
**解决**:
|
||
```bash
|
||
# 修改环境变量
|
||
docker stop woodpecker-server
|
||
docker rm woodpecker-server
|
||
|
||
# 重新启动,设置正确的 HOST
|
||
docker run -d \
|
||
--name=woodpecker-server \
|
||
-e WOODPECKER_HOST=https://ci.f.novalon.cn \
|
||
-e WOODPECKER_WEBHOOK_HOST=https://ci.f.novalon.cn \
|
||
# ... 其他配置
|
||
woodpeckerci/woodpecker-server:latest
|
||
```
|
||
|
||
---
|
||
|
||
### 问题 2: Webhook Secret 不匹配
|
||
|
||
**症状**: Webhook 返回 401 Unauthorized
|
||
|
||
**检查**:
|
||
```bash
|
||
# 检查 Git Webhook 的 Secret
|
||
curl -X POST \
|
||
-H "Content-Type: application/json" \
|
||
-H "X-GitHub-Event: push" \
|
||
# ... 其他 headers \
|
||
http://your-woodpecker-server/hook
|
||
```
|
||
|
||
**解决**:
|
||
1. 在 Woodpecker CI 中设置 `WOODPECKER_WEBHOOK_SECRET`
|
||
2. 在 Git Webhook 中配置相同的 Secret
|
||
|
||
---
|
||
|
||
### 问题 3: 仓库未正确同步
|
||
|
||
**症状**: Woodpecker 日志显示 "repository not found"
|
||
|
||
**检查**:
|
||
```bash
|
||
# 检查仓库是否在 Woodpecker 中正确注册
|
||
docker exec woodpecker-server sqlite3 /var/lib/woodpecker/woodpecker.sqlite \
|
||
"SELECT * FROM repos WHERE repo_full_name = 'novalon/novalon-website';"
|
||
```
|
||
|
||
**解决**:
|
||
1. 在 Woodpecker CI Web 界面中删除仓库
|
||
2. 重新同步仓库
|
||
3. 重新激活仓库
|
||
|
||
---
|
||
|
||
### 问题 4: 分支过滤配置问题
|
||
|
||
**症状**: Webhook 接收成功,但 Pipeline 未创建
|
||
|
||
**检查**:
|
||
```bash
|
||
# 查看 Woodpecker 日志中关于分支的日志
|
||
docker logs woodpecker-server --tail 200 2>&1 | grep -i "branch"
|
||
```
|
||
|
||
**可能的原因**:
|
||
- Woodpecker 全局配置中限制了某些分支
|
||
- 仓库设置中的分支保护
|
||
|
||
**解决**:
|
||
1. 检查 Woodpecker 全局配置
|
||
2. 检查仓库设置中的分支过滤
|
||
|
||
---
|
||
|
||
### 问题 5: 数据库问题
|
||
|
||
**症状**: Woodpecker 日志显示数据库错误
|
||
|
||
**检查**:
|
||
```bash
|
||
# 检查数据库连接
|
||
docker logs woodpecker-server 2>&1 | grep -i "database\|sqlite\|mysql\|postgres"
|
||
```
|
||
|
||
**解决**:
|
||
1. 检查数据库服务是否运行
|
||
2. 检查数据库连接配置
|
||
3. 检查数据库权限
|
||
|
||
---
|
||
|
||
## 🧪 测试 Webhook 接收
|
||
|
||
在 Woodpecker CI 服务器上执行:
|
||
|
||
```bash
|
||
# 1. 启动日志监控
|
||
docker logs woodpecker-server -f &
|
||
|
||
# 2. 在另一个终端推送代码
|
||
# git push origin release/v1.0.0
|
||
|
||
# 3. 观察日志输出
|
||
# 应该看到类似:
|
||
# "received webhook from gitea"
|
||
# "found repository novalon/novalon-website"
|
||
# "creating pipeline for push event"
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 诊断清单
|
||
|
||
请提供以下信息:
|
||
|
||
### 1. Woodpecker CI 日志输出
|
||
```bash
|
||
docker logs woodpecker-server --tail 100 > /tmp/woodpecker-logs.txt
|
||
cat /tmp/woodpecker-logs.txt
|
||
```
|
||
|
||
### 2. Webhook 推送详情
|
||
在 Git 仓库的 Webhook 设置中:
|
||
- 点击最新的推送记录
|
||
- 查看 Request Body
|
||
- 查看 Response Body
|
||
- 查看 HTTP Status Code
|
||
|
||
### 3. Woodpecker CI 环境变量
|
||
```bash
|
||
docker exec woodpecker-server env | grep WOODPECKER > /tmp/woodpecker-env.txt
|
||
cat /tmp/woodpecker-env.txt
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 快速修复方案
|
||
|
||
如果日志查看困难,可以尝试以下方案:
|
||
|
||
### 方案 A: 重启 Woodpecker CI
|
||
|
||
```bash
|
||
docker restart woodpecker-server
|
||
docker restart woodpecker-agent
|
||
```
|
||
|
||
### 方案 B: 重新同步仓库
|
||
|
||
1. 在 Woodpecker CI Web 界面中删除 `novalon/novalon-website` 仓库
|
||
2. 在设置中重新同步仓库列表
|
||
3. 重新激活仓库
|
||
4. 重新配置仓库设置(批准要求改为 "无")
|
||
|
||
### 方案 C: 使用 API 触发(备选方案)
|
||
|
||
如果自动触发始终无法工作,可以使用 API 手动触发:
|
||
|
||
```bash
|
||
# 获取 Woodpecker Token
|
||
# 在 Woodpecker CI 用户设置中生成
|
||
|
||
# 使用 API 触发 Pipeline
|
||
curl -X POST \
|
||
"https://ci.f.novalon.cn/api/repos/novalon/novalon-website/pipelines" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"branch": "release/v1.0.0",
|
||
"event": "push"
|
||
}'
|
||
```
|
||
|
||
---
|
||
|
||
## 📞 联系支持
|
||
|
||
如果以上方法都无法解决问题:
|
||
|
||
1. 收集所有日志和配置信息
|
||
2. 访问 Woodpecker CI GitHub Issues: https://github.com/woodpecker-ci/woodpecker/issues
|
||
3. 提供详细的错误信息和环境配置
|
||
|
||
---
|
||
|
||
**最后更新**: 2026-03-28
|