获取github操作中特定步骤的输出

时间:2019-12-05 09:27:04

标签: github elixir github-actions

我有这个运行测试的GitHub action文件,但是现在我在其中集成了松弛通知。我想获取Run tests步骤的输出,并在松弛步骤中将其作为消息发送

  - name: Run tests
    run: |
      mix compile --warnings-as-errors
      mix format --check-formatted
      mix ecto.create
      mix ecto.migrate
      mix test
    env:
      MIX_ENV: test
      PGHOST: localhost
      PGUSER: postgres

  - name: Slack Notification
    uses: rtCamp/action-slack-notify@master
    env:
      SLACK_MESSAGE: Run tests output
      SLACK_TITLE: CI Test Suite
      SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}

任何帮助将不胜感激。 谢谢

3 个答案:

答案 0 :(得分:5)

当前 accepted answer 的问题在于该步骤的结果将始终是 success,因为测试执行结果被屏蔽了,但 echo 命令被屏蔽了。 >

对最后一行的修改应该可以保留原来的退出状态:

mix test 2>&1 | tee test.log
result_code=${PIPESTATUS[0]}
echo "::set-output name=mix-test::$(cat test.log)"
exit $result_code

答案 1 :(得分:2)

我只是想添加@ smac89的解决方案很有帮助,但对我而言并不奏效。我正在使用其他Slack操作(pullreminders/slack-action)来构建更具体的内容。我发现在每个换行符所在的位置都得到了单引号,并且每行上的前导空格也被截断了。读完https://github.com/actions/toolkit/issues/403并反复试验之后,我发现我需要在输出中实际换行(文字\n),因此我将\n字符替换为{{ 1}}。然后,我用Unicode'En Space'字符替换了常规空格字符。

这是有效的方法:

Bash运行步骤:

\\n

松弛通知步骤:

        Tools/get-changed-fields.sh src/objects origin/${{ env.DIFF_BRANCH }} > changed-fields.out
        output="$(cat changed-fields.out)"
        output="${output//$'\n'/\\n}"
        output="${output// / }"     # replace regular space with 'En Space'
        echo "::set-output name=changed-fields-output::$output"

答案 2 :(得分:0)

您需要做三件事:

  1. 在需要输出的步骤中添加id
  2. 使用set-output命令创建输出
  3. Use the id和输出名称在另一步骤中以获取输出,然后join放入一条消息中以保持松弛状态
- name: Run tests
  run: |
    echo "::set-output name=mix-compile--warnings-as-errors::$(mix compile --warnings-as-errors)\n"
    echo "::set-output name=mix-format--check-formatted::$(mix format --check-formatted)\n"
    echo "::set-output name=mix-ecto_create::$(mix ecto.create)\n"
    echo "::set-output name=mix-ecto_migrate::$(mix ecto.migrate)\n"
    echo "::set-output name=mix-test::$(mix test)\n"
  id: run_tests
  env:
    MIX_ENV: test
    PGHOST: localhost
    PGUSER: postgres

- name: Slack Notification
  uses: rtCamp/action-slack-notify@master
  env:
    SLACK_MESSAGE: ${{join(steps.run_tests.outputs.*, '\n')}}
    SLACK_TITLE: CI Test Suite
    SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}

有关输出名称的说明,请参见Metadata Syntax