【发布时间】:2021-03-05 15:47:46
【问题描述】:
在本主题中涉及 2 台机器:BuildMachine 和 TargetMachine(我在下面定义它们)。
我在私有实例上使用 Azure devops。 在发布管道中,我在 TargetMachine 上安装了一个软件。 为此,发布管道:
- 由自托管代理执行。 (Agent.Version: 2.153.1) 在 BuildMachin 上
- 在 TargetMachine 上上传 powershell 脚本
- 通过以下任务在 TargetMachine 上运行远程 powershell 会话:
powershell 脚本:
- 停止目标exe
- 更新 bin 文件夹
- 重新启动 exe
- 退出无需等待 ExitCode,因为应用程序是必须保持活动状态的服务器。 使用以下代码:
Stop-Process -Name "TOTO" -ErrorAction SilentlyContinue
......
Start-Process -FilePath "C:\toto.exe" -WorkingDirectory "C:\" -WindowStyle Maximized
Write-Output "Process is started"
Exit 0
发布管道成功完成,powershell 任务需要: 35 秒:
BUT 1 分 20 秒后,进程被终止。 该进程是一个控制台应用程序,它是一个 TCP 服务器,它应该永远保持活动状态(如果我添加一个带有单击按钮的 winform 应用程序,也会出现同样的问题)。
我的ps任务配置如下(60秒大于当前powershell执行时间35秒):
-SkipCACheck -IdleTimeout 60000 -OperationTimeout 60000 -OutputBufferingMode Block
即使我将 timeout 乘以 10,targetProcess 也会在 1'20" 后被杀死:
-SkipCACheck -IdleTimeout 600000 -OperationTimeout 600000 -OutputBufferingMode Block
在 TargetMachine 的本地命令提示符下,以管理员身份打开,我运行相同的脚本没有问题,并且进程没有被杀死:
powershell ./release_TAS.ps1
脚本需要 10 秒才能执行。
=> 是否有某个设置表明 ps 创建的子进程可以无限期地继续单独存在? 如何通过 azure 发布管道启动进程,并让它执行而不等待退出代码。
问候
【问题讨论】:
-
您能告诉我们更多细节吗? 1.您使用的是微软托管代理还是自托管代理? 2. 请您尝试在目标虚拟机上手动运行 Powershell 脚本并检查此问题是否仍然存在? 3.如果可以的话,请尝试在你的vm中安装一个self-agent,然后使用新的self-agent再次运行pipeline,看看是否有同样的问题。
-
我用你问的细节更新了我的问题
标签: c# azure azure-devops devops azure-pipelines-release-pipeline