You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取GitHub Actions矩阵作业各状态?实现分环境部署后通知

实现带矩阵部署与分环境通知的GitHub Actions工作流

要实现你需要的工作流,核心是让notification作业也对应一个和deploy完全匹配的矩阵,这样每个环境的通知作业能独立关联对应的部署实例,进而获取其状态。以下是完整的实现方案:

核心思路

默认情况下,当notification依赖整个deploy矩阵作业时,无法直接获取单个环境的部署状态。解决方法是:

  1. 给notification设置与deploy完全一致的矩阵维度
  2. 通过needs.deploy[matrix.stage].status的方式,精准获取对应环境的部署状态
  3. 用if: always()确保无论部署成功/失败/跳过,通知都会执行

完整工作流代码

jobs:
  deploy:
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash
        working-directory: ./infrastructure
    strategy:
      max-parallel: 3
      matrix:
        stage: [dev, int, prd]
      fail-fast: true
    steps:
      - name: 检出代码
        uses: actions/checkout@v4
      
      - name: 部署至 ${{ matrix.stage }} 环境
        run: |
          # 替换为你的实际部署逻辑(如Terraform、CloudFormation、CLI命令等)
          echo "开始部署 ${matrix.stage} 环境..."
          # 可选:模拟部署失败用于测试
          # if [ "${matrix.stage}" = "prd" ]; then exit 1; fi

  notification:
    needs: deploy
    if: always()
    runs-on: ubuntu-latest
    strategy:
      matrix:
        stage: [dev, int, prd]
    steps:
      - name: 发送 ${matrix.stage} 环境部署通知
        run: |
          # 获取对应环境的部署状态与结论
          DEPLOY_STATUS="${{ needs.deploy[matrix.stage].status }}"
          DEPLOY_CONCLUSION="${{ needs.deploy[matrix.stage].conclusion }}"
          
          echo "=== ${matrix.stage} 环境部署结果 ==="
          echo "状态: $DEPLOY_STATUS"
          echo "结论: $DEPLOY_CONCLUSION"
          
          # 替换为你的实际通知逻辑(如Slack、邮件、企业微信等)
          # 示例:发送Slack消息
          # curl -X POST -H "Content-Type: application/json" \
          #   -d '{"text":"【部署通知】${matrix.stage} 环境部署完成,状态: '$DEPLOY_STATUS'"}' \
          #   ${{ secrets.SLACK_WEBHOOK }}

关键细节说明

  • 矩阵匹配:notification的matrix.stage必须和deploy完全一致,确保每个环境的通知作业与部署作业一一对应。
  • 状态获取:needs.deploy[matrix.stage].status会返回对应部署实例的状态(success/failure/cancelled/skipped);conclusion字段会提供更具体的执行结论(如success、failure、skipped)。
  • if: always()的作用:即使某个环境的部署被跳过(比如fail-fast: true导致后续环境终止)或失败,对应的通知作业依然会执行,不会被忽略。
  • fail-fast的影响:如果deploy的fail-fast设为true,当某个环境部署失败时,其余未执行的部署作业会被标记为skipped,对应的通知作业会获取到skipped状态;若设为false,每个环境的部署会独立执行,互不影响。

扩展技巧

  • 可以根据DEPLOY_STATUS或DEPLOY_CONCLUSION分支处理通知逻辑,比如失败时发送告警级别的消息,成功时发送普通通知。
  • 若需要获取部署作业的更多信息(如日志链接、执行时长),可以通过needs.deploy[matrix.stage].url获取作业的GitHub页面链接,或在deploy作业中输出自定义变量传递给notification。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:00:32