【发布时间】:2016-08-25 04:05:24
【问题描述】:
在我们的构建服务器上,我们有一个正在运行的进程,除其他外,它是运行集成测试所必需的,以获取对数据库的访问权限。
这个软件可以在我们的存储库中更改,因此我创建了一个 CI 构建来构建更改。然后我想做的是在成功构建后使用新编译的版本重新启动该过程,但这部分我似乎无法开始工作。
我没有问题终止正在运行的进程,并将结果部署到构建服务器上的特定位置,但似乎无论我尝试什么,只要正在运行的构建结束,我生成的进程就会被终止。
我尝试了以下方法:
使用 PowerShell
Start-Process <path to file>
使用 CMD
使用 'cmd' 作为工具和以下参数:
<path to file>
start <path to file>
/c start <path to file>
cmd <path to file>
cmd start <path to file>
cmd /c start <path to file>
我也尝试过简单地提供 .exe 路径作为工具名称,没有参数,也没有运气。
效果如何?
好吧,对于上述大多数方法,使用 PS 命令Get-Process <exe name>* 的额外步骤我得到了进程正在运行的结果。在停止该过程的步骤之后,相同的步骤没有产生任何结果,因此可以启动一个新的更新的步骤。所以我很肯定它可以工作,vNext 构建只是在构建结束后将其全部杀死。
其他解决方案
我还剩下 2 个我认为应该可行的解决方案,但是这两个解决方案对我来说都太复杂了,因为我在构建过程中引入了相当复杂的东西,然后可能会出错,但是这里是:
- 将构建服务器设置为有效的部署目标。然后我猜我可以使用“目标机器上的 PowerShell”步骤,即使我的目标是自己。我会假设它将作为单独的进程。不过,这需要各种配置才能完成,还要为该任务编写远程 PowerShell 脚本。
- 编写一个可调用的小型 Windows 服务,例如REST,然后可以启动进程,因此新的 Windows 服务成为拥有线程。 - 这只是引入了一个可能也需要更新的新层。然后可能会手动更新而不是自动更新。
同样,如果存在更好的解决方案,我宁愿不使用这两种解决方案中的任何一种。 :)
【问题讨论】:
标签: powershell tfs tfsbuild