在 Azure Pipelines 中,如何在其他任务运行时执行后台任务?

Jos*_*osh 6 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>&- &

还有一些类似的技巧。没有任何帮助。

这没什么大不了的,但是知道如何使这成为可能会很方便!

Pat*_*SFT 4

更新

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"
Run Code Online (Sandbox Code Playgroud)

更多详情请查看此链接--Start Job

如果您希望该脚本在任务完成时继续在后台运行。您可以尝试使用start-process命令来启动脚本。这将确保启动的作业在任务完成后继续运行。但当构建完成后,该工作将被关闭。

Start-Process powershell.exe -ArgumentList '-file C:\build\BGGetFromNuGet.ps1'
Run Code Online (Sandbox Code Playgroud)