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

Jenkins不等待docker exec命令完成

曹新觉
2023-03-14
问题内容

情况如下:

我有一个泊坞窗容器(jenkins)。我已经将套接字安装到容器中,以便可以在jenkins容器中执行docker命令。

手动操作,一切都在容器中进行。但是,当詹金斯执行作业时,它不会“等待” docker exec命令运行完成。

下面是Jenkinsfile的摘录。短期printenv命令可以正确运行,并输出环境变量。仅运行下一个命令(python),然后Jenkins立即继续前进,而无需等待完成。Jenkins代理(从属)在Ubuntu映像上运行。在Jenkins外部运行所有这些命令可以正常工作。

echo "Running the app docker container in detached tty mode to keep it up"
docker run --detach --tty --name "${CONTAINER_NAME}" "${IMAGE_NAME}"

echo "Listing environment variables"
docker exec --interactive "${CONTAINER_NAME}" bash -c "printenv"

echo "Running test coverage"
docker exec --interactive "${CONTAINER_NAME}" bash -c "python -m coverage run --source . --branch -m pytest -vs"

请任何人解释如何让詹金斯(Jenkins)等待docker exec命令完成,然后再继续下一步。

已经考虑过替代方案,例如DockerPipeline插件,但是在可能的情况下,我更愿意使用与我上面相似的方法。

好的,另一种方法,我尝试在这里使用DockerPipeline插件。


问题答案:

您可以docker.sock像这样在您的主机中用作卷挂载来协调主机上的容器docker-compose.yml

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

根据您的设置,您可能需要运行

chmod 666 /var/run/docker.sock

首先。

这适用于macOS和Linux。



 类似资料:
  • 问题内容: 我正在尝试让Jenkins在Docker上的Jenkins从属服务器上运行以下命令: 问题在于,当我 在Jenkins中 运行此程序时,会生成Docker进程,但Jenkins不会等待它并立即返回成功。但是,如果我用无限循环替换Docker命令,Jenkins将按预期等待。 当我以Jenkins用户的身份直接从构建从设备运行此命令时,系统会等待命令完成(这就是我想要发生的事情)。 我已

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

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

  • 根据Espresso文档,检测测试应该自动等待完成。但它不起作用。我创建了这个简单的测试用例: 返回UI线程时测试应该失败,但它总是成功。这是测试的logcat输出: 正如您所看到的,测试在后台方法执行之前就已经完成了。我怎样才能让考试等待呢?

  • 问题内容: 我正在将Selenium IDE用于Firefox并搜索等待命令。我的问题是我想用嵌入式外部地图测试网站。此外部地图需要3-5秒才能加载。 我的命令: 问题答案: 使用暂停命令,然后在“目标”字段中输入毫秒数。 将速度设置为最快(操作->最快),否则它将无法正常工作。

  • 我通读了Dart/flatter中的Async/Await/then,试图理解为什么aysnc函数中的Await不会等到完成后再继续。在我的UI中,有一个按钮调用一个异步方法来返回一个位置,该位置总是返回null,并且不等待函数完成。 该函数将调用推送到一个新的UI页面,该页面选择一个位置,并应返回一个结果。如何使该函数等待结果?我不是在使用异步吗?