bash - 在单独的外壳中测试 gitlab-runner 运行命令?
问题描述
语境
在测试自动安装和运行 GitLab 和 GitLab 运行器的安装脚本的功能时,我在后台运行 GitLab 运行器和进行测试时遇到了一些困难。(我的意图是简单地在后台运行运行程序,然后运行一些测试来验证服务的行为是否符合预期)。但是,当我的测试执行执行sudo gitlab-runner run
命令的函数时,测试挂起,等待服务停止,(但服务不应该停止)。
功能
# Run GitLab runner service
run_gitlab_runner_service() {
run_command=$(sudo gitlab-runner run &)
echo "service is running"
}
测试的输出是:
Configuration loaded builds=0 7/7
然后光标一直闪烁,而最后一位跑步者正在成功等待指令。
测试代码
@test "Test if the GitLab Runner CI service is running correctly." {
run_service_output=$(run_gitlab_runner_service)
EXPECTED_OUTPUT="service is running"
assert_equal "$run_service_output" "$EXPECTED_OUTPUT"
}
但是,在检查sudo gitlab-runner run
命令的常规输出时,我观察到它无需询问就开始了新的行/shell/某事。例如:
(base) name@name:~$ sudo gitlab-runner run &
[1] 84799
(base) name@name:~$ Runtime platform arch=amd64 os=linux pid=84800 revision=8925d9a0 version=14.1.0
Starting multi-runner from /etc/gitlab-runner/config.toml... builds=0
Running in system-mode.
Configuration loaded builds=0
listen_address not defined, metrics & debug endpoints disabled builds=0
[session_server].listen_address not defined, session endpoints disabled builds=0
基本上,输出(base) name@name:~$ Runtime platform arch=amd64
不应该停止(直到手动终止),所以我认为测试正在等待该外壳/输出完成。
笔记
为了完整起见,我没有输入(base) name@name:~$ Runtime platform arch=amd64 ..
输出,它以某种方式被推送到新行中的终端。我不知道为什么这不只是在(base) name@name:~$
运行该sudo gitlab-runner run &
命令的先前/原始版本之下。
问题
启动服务后如何确保功能和测试继续进行gitlab-runner run
?
解决方案
我认为您应该使用稍微不同的语法才能gitlab-runner
在后台运行
# Run GitLab runner service
run_gitlab_runner_service() {
( run_command="$(sudo gitlab-runner run)" ) &
echo "service is running"
}
推荐阅读
- python - 使用 python 多处理访问和修改二维数组
- maven - 从同一分支构建开发和生产项目
- flutter - 从 Flutter_driver 迁移到 integration_test 包
- python - 在 TensorFlow/Keras 中加载 TIFF 图像数据集
- python - 如何在排行榜中对分数进行排序?
- java - 二叉搜索树布尔返回类型
- python - 使用 Nans 对 griddata 进行 2d 插值会导致 NaN,即使在执行插值之前屏蔽掉原始数据中的 Nans 之后?
- php - 在 magento 2.4 中扩展 grahpql 的模式
- powershell - 使用 Powershell 自动启动/停止 Azure Function App
- javascript - 在我的本地存储 Jquery 代码上添加了新字段