【发布时间】:2013-04-23 14:16:33
【问题描述】:
作为 CI 的一部分,我们已经开始将我们的几个项目之一迁移到团队城市。下面是我们如何设置 teamcity 构建。我们正在尝试部署网站。
1) 构建步骤 1(包安装)
使用“命令行”运行器类型安装所需的包。
2) 构建步骤 2(构建)
使用 Runner 类型“Visual Studio (sln)”(Visual Studio 2010) 构建网站。
3) 构建步骤 3(部署网站)
使用“.Net Process Runner”,deployer.exe(使用 .Net Framework 4 构建的 x86)部署站点。
Deployer.exe 读取配置文件。配置文件包含我们想要推送构建的“BuildId”、“Environment”和“Servers”。
<buildType id="bt52">
<env name="Debug">
<server path="SERVER1" />
</env>
<env name="QA">
<server path="SERVER2" />
<server path="SERVER3" />
</env>
<env name="UAT">
<server path="SERVER4" />
<server path="SERVER5" />
</env>
</buildType>
Deployer.exe 使用以下所需参数调用。它读取配置并将站点部署到 Server2 和 Server3。
Deployer.exe "bt52" "QA" "siteQA" "E:\BuildAgent\work\2483052e33e5e1e8\src\diy\" msdeploy.exe
问题区域是第 3 步。
当我们使用 .Net 进程运行程序作为团队城市的一部分运行 deployer.exe 时,我们看到它挂起并且有时甚至 45 分钟都没有响应。当我们尝试使用命令行脚本从构建服务器执行相同的 deployer.exe 时,会在几秒钟内执行。
E:\TeamCity_custom_applications\deployer>Deployer.exe farm1-1 QA siteQA E:\BuildAgent\work\2483052e33e5e1e8\src\diy\ msdeploy.exe
信息
:处理批处理运行...信息:处理命令...msdeploy.exe -verb:sync -source:contentPath="E:\BuildAgent\work\2483052e33e5e1e8\src\diy\" -dest:contentPath="siteQA",wmsvc="SERVER2",userName="*****",password ="******",authType="Basic"-skip:objectName=filePath,absolutePath=web.config -skip:objectName=dirPath,absolutePath="bin" -enableRule:DoNotDeleteRule -allowUntrusted 信息:输出>>更改总数:0(添加 0、删除 0、更新 0、更改参数 0、更改参数 0 复制的字节数)信息:错误>>(无)信息:ExitCode >> 0信息:
处理命令 ...msdeploy.exe -verb:sync -source:contentPath="E:\BuildAgent\work\2483052e33e5e1e8\src\diy\" -dest:contentPath="siteQA",wmsvc="SERVER3",userName="******",password="* *****",authType="基本" -skip:objectName=filePath,absolutePath=web.config -skip:objectName=dirPath,absolutePath="bin" -enableRule:DoNotDeleteRule -allowUntrusted Info : output >>Total changes: 0 (0 added, 0 deleted, 0 updated, 0参数改变,0 复制的字节数)信息:错误>>(无)信息:ExitCode >> 0
信息:部署脚本完成。
我们观察到的另一件事是通过 teamcity 运行 deployer.exe 我看到站点内容被复制但仅适用于 1 台服务器,并且 teamcity 构建状态保持在“运行”模式。我想知道是否有人可以就我如何看待这个问题提出一些见解。
更新 1:
感谢您花时间研究它!我们最终做的是,我们没有从“cmd.exe”运行命令“msdeploy.exe”,而是将“msdeploy.exe”位置添加为环境变量,并在#服务器的循环中执行“msdeploy.exe”。这解决了挂起的问题。现在我很想知道为什么它会以这种方式运行,如果你从“cmd.exe”执行“msdeploy.exe”,它会在直接运行“msdeploy.exe”时挂起,它会成功执行。任何对此的见解将不胜感激。
更新 2:
我添加了使用进程资源管理器解释行为的图像。如果我们从进程资源管理器中杀死 msdeploy.exe,那么接下来对该服务器的所有部署都不会出现构建挂起的问题。请看下图
【问题讨论】:
标签: c#-4.0 msbuild continuous-integration teamcity msdeploy