【问题标题】:Jenkins is not waiting for Docker command to finishJenkins 没有等待 Docker 命令完成
【发布时间】:2014-09-08 08:43:38
【问题描述】:

我正在尝试让 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 将按预期等待。

当我直接从 build slave 运行这个命令时,作为 Jenkins 用户,系统等待命令完成(这是我想要发生的)。

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

也许我做错了……

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

【问题讨论】:

    标签: jenkins docker


    【解决方案1】:

    原来问题出在命令行中的-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"
    

    【讨论】:

    • 我很乐意接受任何解释为什么会发生这种情况或是否有更好的处理方法的答案。
    • t 会分配一个伪 tty,这与 jenkins tty 不同。所以詹金斯会立即返回成功。就是这样
    猜你喜欢
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2016-01-29
    • 2016-07-07
    • 2011-10-21
    • 2013-04-03
    • 2015-06-13
    相关资源
    最近更新 更多