我试图让 Jenkins 在 Jenkins 从机上的 docker 中运行以下命令:
docker run -i -v `pwd`:/opt/myapp -w /opt/myapp -t mydockerimage /bin/bash -c "./setup_dev_env.sh && make all"
问题是当我运行这个时来自詹金斯内部Docker 进程已生成,但 Jenkins 不会等待它并立即返回成功。但是,如果我用无限循环替换 Docker 命令,Jenkins 将按预期等待。
当我作为 Jenkins 用户直接从构建从站运行此命令时,系统会等待命令完成(这就是我想要发生的情况)。
我尝试过做一个docker attach
,但也会立即返回。docker wait
会导致詹金斯等待它,但我不会看到任何输出。
也许我对这一切的看法都是错误的......
- 我怎样才能让詹金斯等待这个命令完成?
- 如何让 Jenkins 显示在 docker 容器中运行的命令的输出?
- 如何设置 Docker 中运行的命令的退出代码,以便 Jenkins 可以确定它是成功还是失败?
事实证明问题是-t
在命令行中。去除-t
导致詹金斯等待 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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)