Seb*_*eld 6 github github-actions
我正在尝试从 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
Run Code Online (Sandbox Code Playgroud)
发送消息有效。但${{ job.status }}
不代表整个pipeline的状态,只代表最后一个job。
如果任何作业中的任何步骤失败,我想发送失败消息。这是我用于测试的工作流程运行:https://github.com/sebastian-sommerfeld-io/docker-image-adoc-antora/actions/runs/3096876874
工作流程本身按预期工作。但我的松弛消息报告“成功”。它应该报告“失败”,因为一项作业失败,随后跳过另一项作业。
有人知道如何获取整个工作流程的状态,而不仅仅是 Github Actions 工作流程中的单个作业吗?
小智 5
通常可以通过使用关键字needs
创建依赖树将作业“链接”在一起,而不是为每个失败(或成功)的作业发送通知。
为了保持逻辑分离,您可以添加一个最终作业来执行向 Slack 的通知,并且可以将其设置为对所有早期作业的依赖项。
最终作业可以使用类似${{ job.status == 'success' && needs.earlierjob1.result == 'success' && needs.earlierjob2.result == 'success' }
表示总体成功的布尔值之类的东西来计算总体工作流程状态。needs.*.result
通过使用而不是按名称列出每个作业,这可以变得更容易维护。
我在这里写了一篇更详细的文章,包括哪些有效、哪些无效的示例。
最后,我构建了一个本机 Slack 应用程序来自动处理此问题,因此您根本不需要考虑工作状态或通知。
归档时间: |
|
查看次数: |
3839 次 |
最近记录: |