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
+122
View File
@@ -0,0 +1,122 @@
#!/usr/bin/env python3
"""
Woodpecker CI 自动触发诊断工具
排查 CI 无法自动触发的可能原因
"""
import yaml
from pathlib import Path
def diagnose_auto_trigger(config_path):
"""诊断自动触发问题"""
with open(config_path, 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
print("="*70)
print("Woodpecker CI 自动触发诊断")
print("="*70)
print("\n🔍 可能导致 CI 无法自动触发的原因:")
print("-"*70)
reasons = [
{
"原因": "1. Webhook 未配置或配置错误",
"检查": "Git 仓库设置 → Webhooks → 确认有指向 Woodpecker CI 的 Webhook",
"解决": "添加 WebhookURL 格式: http://woodpecker-server/hook"
},
{
"原因": "2. Woodpecker CI 仓库未激活",
"检查": "Woodpecker CI Web 界面 → 确认仓库已激活",
"解决": "在 Woodpecker CI 中激活仓库"
},
{
"原因": "3. 分支保护或限制",
"检查": "Woodpecker CI 仓库设置 → 查看 'Trusted''Protected' 设置",
"解决": "取消分支保护或添加受信任的分支"
},
{
"原因": "4. 配置文件语法错误",
"检查": "使用 yamllint 或在线 YAML 验证器检查配置文件",
"解决": "修复 YAML 语法错误"
},
{
"原因": "5. when 条件过于严格",
"检查": "检查配置文件中的 when 条件",
"解决": "确保 when 条件包含正确的分支和事件"
},
{
"原因": "6. Woodpecker CI 全局配置限制",
"检查": "检查 Woodpecker CI 的全局配置文件",
"解决": "修改全局配置,允许自动触发"
},
{
"原因": "7. Git 仓库权限问题",
"检查": "确认 Woodpecker CI 有访问仓库的权限",
"解决": "重新授权 Woodpecker CI 访问仓库"
},
{
"原因": "8. 提交信息包含跳过关键词",
"检查": "检查提交信息是否包含 [skip ci], [ci skip] 等",
"解决": "避免在提交信息中使用跳过关键词"
}
]
for i, reason in enumerate(reasons, 1):
print(f"\n{reason['原因']}")
print(f" 检查: {reason['检查']}")
print(f" 解决: {reason['解决']}")
# 检查配置文件中的 when 条件
print("\n\n📋 当前配置的 when 条件:")
print("-"*70)
for step_name, step_config in config.get('steps', {}).items():
if not isinstance(step_config, dict):
continue
when = step_config.get('when', {})
if not when:
continue
if isinstance(when, dict):
events = when.get('event', [])
branches = when.get('branch', [])
if events or branches:
print(f"\n步骤: {step_name}")
if events:
print(f" 事件: {events}")
if branches:
print(f" 分支: {branches}")
elif isinstance(when, list):
print(f"\n步骤: {step_name}")
for condition in when:
if isinstance(condition, dict):
events = condition.get('event', [])
branches = condition.get('branch', [])
if events:
print(f" 事件: {events}")
if branches:
print(f" 分支: {branches}")
print("\n\n💡 快速排查步骤:")
print("="*70)
print("1. 访问 Git 仓库设置 → Webhooks")
print(" - 确认有 Woodpecker CI 的 Webhook")
print(" - 查看 'Recent Deliveries' 是否有发送记录")
print("\n2. 访问 Woodpecker CI Web 界面")
print(" - 确认仓库已激活")
print(" - 检查仓库设置中的 'Trusted' 选项")
print("\n3. 查看提交记录")
print(" - 确认提交信息不包含 [skip ci] 等关键词")
print("\n4. 手动触发测试")
print(" - 在 Woodpecker CI 中手动触发 Pipeline")
print(" - 观察是否能够正常执行")
print("\n" + "="*70)
if __name__ == "__main__":
diagnose_auto_trigger(".woodpecker.yml")