在单独的 shell 中测试 gitlab-运行ner 运行 命令?

Testing gitlab-runner run command in a separate shell?

上下文

在测试自动安装和 运行s GitLab 和 GitLab 运行ners 的安装脚本的功能时,我遇到了一些困难 运行ning GitLab 运行在后台进行测试。 (我的意图是简单地 运行 在后台运行 运行ner,然后 运行 一些验证服务行为是否符合预期的测试)。但是,当我的测试执行执行 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

然后光标一直闪烁,而最后一个 运行ner 正在成功等待指令。

测试代码

@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 命令的常规输出时,我观察到它会在不询问的情况下启动一个新的 line/shell/something。例如:

(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 永远不会停止(直到手动终止),所以我认为测试正在等待 shell/output 完成。

备注

为了完整起见,我没有输入 (base) name@name:~$ Runtime platform arch=amd64 .. 输出,它以某种方式被推送到新行中的终端。我不知道为什么这不只是在 previous/original (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"
}

通过将命令的输出重定向到 /dev/null

找到了解决方案

代码

# Run GitLab runner service
run_gitlab_runner_service() {
    output=$(nohup sudo gitlab-runner run &>/dev/null &)
    echo "service is running"
}