簡體   English   中英

獲取整個 Github 操作工作流程的 state,而不僅僅是單個作業

[英]Get the state of the whole Github Actions workflow, not just a single job

我正在嘗試從 Guthub Actions 工作流程向 slack 發送有關工作流程成功/失敗的消息。

  finally:
    runs-on: ubuntu-latest
    needs: ['ci-build', 'lint-yaml', 'lint-json', 'lint-env-files', 'lint-folders', 'lint-filenames', 'shellcheck', 'lint-dockerfile']
    if: always()

    steps:
      - name: Send pipeline status to Slack
        if: always()
        uses: kpritam/slack-job-status-action@v1
        with:
          job-status: ${{ job.status }}
          slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }}
          channel: C0438TFQNPM # pipelines channel

發送消息有效。 但是${{ job.status }}並不代表整個管道的state,只代表最后一個job。

如果任何作業中的任何步驟失敗,我想發送失敗。 這是我用於測試的工作流程運行: https://github.com/sebastian-sommerfeld-io/docker-image-adoc-antora/actions/runs/3096876874

工作流程本身按預期工作。 但是我的松弛消息報告“成功”。 它應該報告“失敗”,因為一個作業失敗,另一個作業隨后被跳過。

任何人都知道如何獲得整個工作流程的 state,而不僅僅是 Github 操作工作流程中的單個工作?

不是為每個失敗(或成功)的作業發送通知,通常可以通過使用needs關鍵字來創建依賴關系樹來將作業“鏈接”在一起。

為了保持邏輯分離,你可以添加一個最終作業來執行 Slack 的通知,這可以設置為對所有早期作業的依賴。

最終作業可以使用類似${{ job.status == 'success' && needs.earlierjob1.result == 'success' && needs.earlierjob2.result == 'success' }來表示 boolean的整體成功。 通過使用needs.*.result而不是按名稱列出每個作業,這可以變得更容易維護。

在這里寫了一篇更詳細的文章,包括哪些有效和哪些無效的示例。

最后,我構建了一個原生的 Slack 應用程序來自動處理這個問題,所以你根本不需要考慮工作狀態或通知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM