azure-pipelines - 在 Azure Pipelines 中,如何在其他任务运行时执行后台任务?
问题描述
我正在摆弄管道以尝试减少整体运行时间。我想做的一件事是docker pull ...
一开始就执行,这样以后,当我真正需要它时,它就为我准备好了。我想将它作为后台工作解雇,并让它在该任务结束后继续存在。
我试过了: docker pull imgname &
它确实有效,但管道抱怨此消息:
STDIO 流未在进程“/bin/bash”的退出事件后 10 秒内关闭。这可能表明子进程继承了 STDIO 流并且尚未退出。
我也尝试过类似的东西:
docker pull imgname </dev/null &>/dev/null & disown
docker pull imgname 0>&- 1>&- 2>&- 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- &
还有一些类似的技巧。没有什么帮助。
这没什么大不了的,但是知道如何使这成为可能会很方便!
解决方案
更新
STDIO 流未在进程“/bin/bash”的退出事件后 10 秒内关闭。这可能表明子进程继承了 STDIO 流并且尚未退出
这不是没有写入标准错误流并导致任务失败的错误消息。
它应该更像是一条提示消息,指示某些进程仍在运行且未清理(预期行为)。
在构建管道中启用调试模式后,我们可以看到
##[debug]任务被标记为“完成”,但进程在5秒后仍未关闭。将任务视为完成。
即使任务已标记为已完成,该进程仍应作为后台运行。
根据您的描述,这似乎与 docker 命令或 azure devops 方面无关。
您只需要在后台运行一个 powershell 脚本(涉及 docker 命令)。
例如:Start-Job
在 PowerShell 任务中运行,该脚本开始使用Receive-Job
. 当任务退出时,脚本停止。
在 PowerShell 任务中,我运行以下命令:
Start-Job -FilePath "C:\build\BGGetFromNuGet.ps1" -ArgumentList "C:\build"
更多细节请看这个链接——开始工作
如果您希望该脚本在任务完成后继续在后台运行。您可以尝试使用start-process
命令来启动脚本。这将确保启动的作业在任务完成后继续运行。但是构建完成后,该作业将被关闭。
Start-Process powershell.exe -ArgumentList '-file C:\build\BGGetFromNuGet.ps1'
推荐阅读
- javascript - React - 如何从令牌网址查看图像?
- css - Angular Material 图标按钮格式
- regex - 使用正则表达式提取具有特定模式的第一行
- python - 如何过滤 pydatatable 列中的 NA 值?
- javascript - 将带有js结果的jsp注入html>body>div
- rust - 除非我使用临时变量,否则为什么我不能推入 Vec 的 dyn Trait?
- c++ - 如何在 C++ 的 main 函数中输出两个新字符串?
- javascript - 使用超链接仅显示某些表格行
- python - 信号压缩技术
- snakemake - 在集群和本地执行的蛇形列表规则