为什么管道只运行第一个 gitlab-runner?

为什么管道只运行第一个 gitlab-runner?

我注册了 6 个 gitlab-runner 然后当推送到 gitlab 服务器时,pipline 只运行第一个 gitlab-runner?为什么会发生这种情况?我希望管道在 6 台服务器上运行。谢谢。

答案1

这是 ssh 服务上众所周知的行为,但由于您的工具实现没有详细描述,我不知道这是否是一个类似的问题。

使用 ssh 时,问题在于本地服务假定远程服务将从本地计算机读取 stdin。因此,它会抢先读取本地数据,并向远程发送一个块,以提高其启动时间。

如果您处于远程调用循环中,则会将所有输入从循环控制中吸出,并且第二个循环周期将获得 EOF。

ssh 中的修复方法是 (a) 使用 -n 选项来禁止发送本地数据,或 (b) 将 ssh 输入从 /dev/null 重定向,使其无法读取。

您还可以将数据作为回显放入 ssh 命令本身,或者从文件或另一个本地命令通过管道传输其输入,从而绕过本地标准输入。

您应该能够在 strace 下执行 git-lab-runner 以发现它是否意外读取 stdin。

相关内容