🔧 修复:secrets 在 if 条件中的错误
❌ 错误信息
Invalid workflow file: .github/workflows/complete-cicd.yml#L1
(Line: 328, Col: 13): Unrecognized named-value: 'secrets'
(Line: 466, Col: 13): Unrecognized named-value: 'secrets'
🔍 问题原因
在GitHub Actions的 if 条件中,不能直接使用 secrets 来检查secret是否存在。
错误的写法:
if: always() && secrets.SLACK_WEBHOOK_URL != ''
GitHub Actions不支持在条件表达式中使用 secrets 对象。
✅ 修复方案
方案1: 移除条件检查,使用 continue-on-error
修复后的写法:
if: always()
continue-on-error: true
这样:
- 步骤总是会运行(如果前面的步骤失败)
- 如果secret不存在,步骤会失败但不会导致整个工作流失败
- 如果secret存在,步骤会正常执行
方案2: 使用环境变量检查(如果需要)
如果确实需要检查secret是否存在,可以使用:
- name: Check if Slack webhook exists
id: check-slack
run: |
if [ -n "${{ secrets.SLACK_WEBHOOK_URL }}" ]; then
echo "has_slack=true" >> $GITHUB_OUTPUT
else
echo "has_slack=false" >> $GITHUB_OUTPUT
fi
- name: Send notification
if: always() && steps.check-slack.outputs.has_slack == 'true'
uses: 8398a7/action-slack@v3
...
但通常方案1更简单实用。
🔧 已修复的位置
位置1: Line 328 (Dev部署通知)
- name: Notify deployment
uses: 8398a7/action-slack@v3
if: always()
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
with:
status: ${{ job.status }}
text: 'Deployment to dev environment ${{ job.status }}'
continue-on-error: true
位置2: Line 466 (生产部署通知)
- name: Send deployment notification
uses: 8398a7/action-slack@v3
if: always()
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
with:
status: ${{ job.status }}
text: 'Production deployment completed'
continue-on-error: true
📋 修复效果
之前
- ❌ 工作流因为语法错误无法启动
- ❌ 错误:Unrecognized named-value: 'secrets'
现在
- ✅ 工作流可以正常启动
- ✅ 如果secret不存在,通知步骤会失败但不影响整个工作流
- ✅ 如果secret存在,通知会正常发送
🚀 下一步
修复已提交并推送:
- Commit: 已提交
- 工作流应该可以正常运行了
重新触发工作流
等待自动触发
- 由于是push到master,工作流会自动触发
- 或手动触发:https://github.com/zenglx1978/mbe-monorepo/actions
验证修复
- 工作流应该可以正常启动
- 不再出现 "Unrecognized named-value: 'secrets'" 错误
📚 相关文档
修复已完成!工作流现在应该可以正常运行了。 🎉