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

时间:2019-10-08 16:11:53

标签: azure-pipelines

我在摆弄管道,以尝试减少总体运行时间。我想做的一件事是在开始时执行docker pull ...,以便稍后在我真正需要它时为我准备好了。我想将其作为后台工作开除,并使其在任务结束后仍然存在。

我已经尝试过:docker pull imgname &

它确实起作用,但是管道抱怨此消息:

  

STDIO流在退出事件后10秒内未关闭   来自进程“ / bin / bash”。这可能表明子进程已继承   STDIO流并且尚未退出。

我也尝试过类似的事情:

  • docker pull imgname </dev/null &>/dev/null & disown
  • docker pull imgname 0>&- 1>&- 2>&- 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- &

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

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

1 个答案:

答案 0 :(得分:1)

更新

  

STDIO流在退出事件后10秒内未关闭   来自进程“ / bin / bash”。这可能表明子进程已继承   STDIO流式传输并且尚未退出

这不是一条没有写入标准错误流并且使任务失败的错误消息。

它应该更像是一条提示消息,指示某些进程仍在运行并且尚未清理(预期行为)。

在构建管道中启用调试模式后,我们可以看到

enter image description here

## [debug]该任务被标记为“完成”,但是该过程在5秒钟后仍未关闭。将任务视为已完成。

即使任务已标记为完成,该进程仍应作为后台运行。


根据您的描述,这似乎与docker命令或azure devops端无关。

您只需要在后台运行Powershell脚本(涉及docker命令)。

例如:在PowerShell任务中运行Start-Job,该脚本开始使用Receive-Job运行。当任务退出时,脚本停止。

在PowerShell任务中,我运行以下命令:

Start-Job -FilePath "C:\build\BGGetFromNuGet.ps1" -ArgumentList "C:\build"

更多详细信息,请查看此链接-Start Job

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

Start-Process powershell.exe -ArgumentList '-file C:\build\BGGetFromNuGet.ps1'