避免GitHub动作缓冲

时间:2020-10-15 08:36:42

标签: github github-actions

我有一个包含一些Linux实用程序的Github存储库。

要运行测试,我使用GitHub动作和一些简单的自定义工作流,这些工作流使用自托管运行程序在远程Linux服务器上运行:

name: CMake
on: [push]
env:  
  BUILD_TYPE: Release
jobs:
  build:
    runs-on: self-hosted
    steps:
    - uses: actions/checkout@v2
    - name: Build
      working-directory: ${{runner.workspace}}/Utils
      shell: bash
      run: cmake --build . --config $BUILD_TYPE

    - name: Run test
      working-directory: ${{runner.workspace}}/Utils
      shell: bash
      run: ./testing/test.sh

工作流程非常简单-我使用cmake编译源代码,然后从同一仓库运行脚本来测试构建。测试脚本是bash脚本,其外观如下:

#!/bin/bash

export LD_LIBRARY_PATH=/path/to/bin

cd /path/to/bin

echo -e "Starting the tests"

./run_server &
./run_tests

if [ $? -eq 0 ]; then
    echo "successful"
else
    echo "failed"
    exit 1
fi

此处,脚本从我的代码(run_server)启动了一个已编译的应用程序,然后运行与之通信并打印结果的测试实用程序。

实际上,我在printf()内使用C run_tests打印输出字符串。如果在本地计算机上运行该命令,则会得到如下所示的输出:

Starting the tests
test1 executed Ok
test2 executed Ok
test3 executed Ok
successful

每次测试大约需要1秒钟。因此,我的应用程序每秒打印一行testX executed Ok之类的行。

但是,如果使用Github操作运行,则输出看起来会有所不同(从Github操作控制台复制):

./testing/test.sh
  shell: /bin/bash --noprofile --norc -e -o pipefail {0}
  env:
    BUILD_TYPE: Release
    
Starting the tests   
successful

即使在这种情况下,bash脚本的输出也仅在脚本完成后才打印出来。 所以我有两个问题:

  • 测试应用程序没有printf()输出
  • 脚本输出(使用echo打印)仅在脚本完成后出现

我期望Github动作具有与在本地计算机上相同的行为,即,我看到的行打印速度约为1 /秒。立即。

Github动作似乎会缓冲所有输出,直到执行一个步骤为止,并且会忽略bash脚本中运行的应用程序中的所有打印内容。

有没有一种方法可以在执行步骤时实时获取所有输出?

0 个答案:

没有答案