Jenkins没有等待Docker命令完成

时间:2014-07-17 12:54:40

标签: jenkins docker

我正在尝试让Jenkins在Jenkins奴隶的docker中运行以下命令:

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可以确定它是成功还是失败?

1 个答案:

答案 0 :(得分:9)

事实证明问题是命令行中的-t。删除-t导致Jenkins等待docker完成它正在做的事情。

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

最后,这个命令有效:

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