当前位置: 首页 > 面试题库 >

Jenkins没有等待Docker命令完成

邹涵畅
2023-03-14
问题内容

我正在尝试让Jenkins在Docker上的Jenkins从属服务器上运行以下命令:

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能够确定该命令成功还是失败?

问题答案:

原来问题出-t在命令行中。删除-t导致Jenkins等待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"


 类似资料:
  • 问题内容: 情况如下: 我有一个泊坞窗容器(jenkins)。我已经将套接字安装到容器中,以便可以在jenkins容器中执行docker命令。 手动操作,一切都在容器中进行。但是,当詹金斯执行作业时,它不会“等待” 命令运行完成。 下面是Jenkinsfile的摘录。短期命令可以正确运行,并输出环境变量。仅运行下一个命令(python),然后Jenkins立即继续前进,而无需等待完成。Jenkin

  • 问题内容: 我有一个脚本,可通过popen shell命令启动。问题在于脚本不会等到该popen命令完成后才继续运行。 如何告诉我的Python脚本等待shell命令完成? 问题答案: 根据您想如何使用脚本,您有两种选择。如果您希望命令阻塞并且在执行过程中不执行任何操作,则可以使用。 如果您想在执行过程中执行操作或将内容输入,可以在调用后使用。 如文档中所述,可能会死锁,因此建议进行通信。

  • 问题内容: 在我的Java程序中,我创建一个执行命令以运行批处理文件的过程,如下所示: 现在,我想发生的是该命令 仅在我调用的批处理文件执行完毕后运行。但是现在,它会在命令提示符打开后立即运行。 我该如何解决? 问题答案: 我设法在其他地方找到答案。要保持初始过程打开,直到批处理文件完成,您需要的是“ / wait”

  • 问题内容: 我有一个过程密集型任务,我想在后台运行。 用户单击一个页面,PHP脚本运行,最后,根据某些条件(如果需要),它必须运行Shell脚本EG: 当前,我使用shell_exec, 但这 需要脚本等待输出。有什么方法可以执行我想要的命令, 而无需 等待命令完成? 问题答案: 如何添加。 请注意,这也摆脱了stdio和stderr。

  • 问题内容: 我正在尝试用Java倒计时。 这是我的HTML 而我的JS: 但是由于某种原因,它不会等待超时时间,而是立即执行,以便在刷新页面时立即显示“完成”。我知道它实际上被执行了多次,因为如果我这样做,它会从45开始递减计数。为什么会绕过超时? 问题答案: 执行带有该参数的函数,并将结果传递给。你不要那样 相反,执行一个匿名函数来调用您的函数:

  • 我想在C#中处理子目录和文件的文件系统/文件夹。我正在使用TPL库中的任务。这个想法是递归地执行它并为每个文件夹创建一个任务。主线程应该等待子线程完成,然后打印一些信息。事实上我只是想知道扫描何时完成。我已经开始使用线程池,然后切换到TLP。做了一些简单的例子。经过一些尝试从简单的代码到越来越臃肿的代码我被困在这里: 主线程有时仍然过早地继续,而不是在完成所有其他线程之后继续。(我对C#比较陌生,