如何在 Github Actions 中获取最新失败步骤的 stderr?

3
在使用Github Actions时,我需要了解当任何步骤出现错误并在后续作业中将其发送到外部系统时,我需要做什么才能捕获日志行。
让我们设定下一个场景:
jobs:
  job1:
    name: job 1
    steps:
      - name: step1
      ...
      - name: step2
      ...
      - name: step3
      ...
    ...
  job2:
    name: job 2
    needs: [job1]
    if: always()
    steps:
      - name: Send error lines to third party system
    ...

在执行作业1期间,其中一个步骤失败,因此在stdout和stderr中设置了一些错误日志。
如何捕获作业2中的这些错误日志行,以便采取一些操作呢?例如将它们发送到外部系统。
1个回答

3
我曾经解决类似需求的方法是使用 tee 命令:
    steps:
      - name: Run Tool
        run: |
          some_tool | tee output.log
        shell: bash

这将使您在GitHub Actions控制台中看到与往常相同的日志,同时也将它们持久化到磁盘。如果您还想要stderr,请执行以下操作:

some_tool 2>&1 | tee output.log

然后,在同一作业的后续步骤中,您可以使用if: ${{ failure() }}语法对这些日志进行任何操作:

    steps:
      - name: Persist logs
        if: ${{ failure() }}
        run: |
          cat output.log | do_something_with_logs
        shell: bash

如果您需要在作业边界上持久化日志,可以使用工件

我看到的解决方案中最干净的一个,谢谢。 我猜Github Actions没有提供跨作业处理错误的内置方式...你知道吗?我想避免自定义解决方案,但是我相信像这样的一个解决方案是我们能做到最干净的。 - Manuel Moya
1
我不知道有没有针对那个的内置功能,但是可能有一些新的东西我还不知道! - David Reed
很遗憾,这个解决方案对于“use”步骤没有帮助,因为我们无法使用tee命令。我仍在寻找解决方案。 - tvandinther

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接