🔧 修复: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: 已提交
  • 工作流应该可以正常运行了

重新触发工作流

  1. 等待自动触发

  2. 验证修复

    • 工作流应该可以正常启动
    • 不再出现 "Unrecognized named-value: 'secrets'" 错误

📚 相关文档


修复已完成!工作流现在应该可以正常运行了。 🎉