Jenkins没有等待Docker命令完成

Tom*_*nen 5 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"
Run Code Online (Sandbox Code Playgroud)

麻烦的是,当我从Jenkins中运行它时,Docker进程被生成,但Jenkins不会等待它并立即返回成功.但是,如果我用无限循环替换Docker命令,Jenkins将按预期等待.

当我直接从构建从站运行此命令时,作为Jenkins用户,系统等待命令完成(这就是我想要发生的事情).

我已经尝试过了docker attach,但也会立即返回. docker wait将导致詹金斯等待它,但我不会看到任何输出.

也许我说这一切都错了......

  1. 我怎样才能让詹金斯等待这个命令完成?
  2. 如何让Jenkins显示在docker容器中运行的命令的输出?
  3. 如何设置在Docker中运行的命令的退出代码,以便Jenkins可以确定它是成功还是失败?

Tom*_*nen 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"
Run Code Online (Sandbox Code Playgroud)

  • t将分配一个伪tty,这与jenkins tty不同.所以詹金斯会立即恢复成功.就这样 (2认同)