[英]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.