一尘不染

Jenkins没有等待Docker命令完成

jenkins

我正在尝试让Jenkins在Docker上的Jenkins从属服务器上运行以下命令:

docker run -i -v `pwd`:/opt/myapp -w /opt/myapp -t mydockerimage /bin/bash -c "./setup_dev_env.sh && make all"

问题在于,当我 在Jenkins中
运行此程序时,会生成Docker进程,但Jenkins不会等待它并立即返回成功。但是,如果我用无限循环替换Docker命令,Jenkins将按预期等待。

当我以Jenkins用户的身份直接从构建从设备运行此命令时,系统会等待命令完成(这就是我想要发生的事情)。

我已经尝试过执行docker attach,但是也会立即返回。 docker wait会导致Jenkins等待,但是我看不到任何输出。

也许我正在解决所有这些错误…

  1. 如何让Jenkins等待此命令完成?
  2. 如何让Jenkins显示在Docker容器中运行的命令的输出?
  3. 如何获得在Docker中运行的命令的退出代码以进行设置,以使Jenkins能够确定该命令成功还是失败?

阅读 302

收藏
2020-07-25

共1个答案

一尘不染

原来问题出-t在命令行中。删除-t导致Jenkins等待docker完成其工作。

我有这样的预感,因为ttys有时可能很奇怪,并且Jenkins可能正在使用与我在shell提示符下运行相同命令时不同的tty类型(或根本不使用)。

最后,此命令有效:

docker run -i -v `pwd`:/opt/myapp -w /opt/myapp mydockerimage /bin/bash -c "./setup_dev_env.sh && make all"
2020-07-25