首页 > 解决方案 > 在单独的外壳中测试 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

标签: bashbackground-processgitlab-ci-runnerbats-core

解决方案


我认为您应该使用稍微不同的语法才能gitlab-runner在后台运行

# Run GitLab runner service
run_gitlab_runner_service() {
    ( run_command="$(sudo gitlab-runner run)" ) &
    echo "service is running"
}

推荐阅读