我有一个包含一些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脚本中运行的应用程序中的所有打印内容。
有没有一种方法可以在执行步骤时实时获取所有输出?