【发布时间】:2021-05-18 10:56:08
【问题描述】:
我正在使用 azure devops 开发一个简单的部署管道。我创建了一个在 自托管 ubuntu 部署组上运行的部署管道。 管道如下所示:
- 从 CI 管道下载工件(使用 dotnet publish 创建)
- 停止运行部署
- 将 ASP.NET Core Web API 解压到部署目录
- 使用
dotnet MyApp.dll运行新部署
前两个步骤按预期工作。但是,当dotnet My App.dll 命令运行时,进程会运行 10 秒,最后会打印以下“错误”消息:
The STDIO streams did not close within 10 seconds of the exit event from process '/usr/bin/bash'. This may indicate a child process inherited the STDIO streams and has not yet exited.
尽管消息和应用程序未运行,但部署任务成功。我尝试通过使用nohup & 并重新定位命令输出来解决此功能。经过一些研究,我发现管道代理启动的所有进程在代理工作完成后都会停止 - 这意味着这种行为是有意的,我对天蓝色部署/代理的理解是错误的。
如何使用 azure devops 管道在我自己的 ubuntu 机器上以自动化方式部署和运行我的应用程序?
【问题讨论】:
-
您是否尝试过直接在自托管代理上运行
dotnet MyApp.dll? stackoverflow.com/questions/59053614/… -
感谢您的回答。是的,直接运行应用程序可以正常工作。通过管道运行它也可以,但该进程在 10 秒后被终止 - 代理执行清理并在所有作业完成后停止它在管道期间启动的每个进程。我设法通过将
Process.clean变量设置为false来解决它,但它有点脏,而且肯定不是开发人员想要的。 -
感谢您的解释,我认为您已经走对了。将
Process.clean变量设置为false是停止代理以清理进程的解决方案。你可以检查类似的线程developercommunity.visualstudio.com/t/… -
这个问题怎么样?下面的答案是否解决了您的问题,如果没有,请告诉我有关此问题的最新信息吗?
-
嗯......它解决了问题,但它似乎不是一种“干净”的方式。无论如何,谢谢你的回答。我想这个解决方案已经很好了。
标签: azure-devops azure-pipelines asp.net-core-webapi continuous-deployment azure-pipelines-release-pipeline