我正在尝试让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等待它,但我不会看到任何输出。
也许我说这一切都错了......
答案 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"