fix: 修复企业微信通知环境变量展开问题
ci/woodpecker/push/woodpecker Pipeline failed

- 使用 PAYLOAD=$(cat <<ENDPAYLOAD) 替代 cat > file <<EOF
- 确保环境变量在 heredoc 中正确展开
- 添加测试脚本验证环境变量展开
- 修复构建详情链接和消息内容缺失问题
This commit is contained in:
张翔
2026-03-28 22:48:22 +08:00
parent 5a27d2fc2a
commit dd2a0999bb
35 changed files with 2728 additions and 915 deletions
+258
View File
@@ -0,0 +1,258 @@
# 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