防止msbuild使用'current'文件夹进行构建输出

时间:2014-07-15 18:28:11

标签: jenkins msbuild continuous-integration

所以我希望有许多不同的网站运行相同的二进制副本,但使用不同的转换配置文件。这些是基本相同网站的不同区域“副本”(但连接到不同的后端DB等)。

我有一个建立我的asp.net网站的jenkins工作,例如; MSBUILD C:\代码\ projectX创建的\ src \网站\ adminsite.projectx \ adminsite.projectx.csproj / m / p:Configuration = Debug /p:OutputPath=C:\Code\ProjectX\build\Website\adminsite.projectx / t:Rebuild

当该作业完成时,我希望它触发.configs的转换和二进制文件的部署。有没有推荐的方法来实现这一目标? 目前,部署的站点只有2个不同的区域版本,每个版本都有自己的web.config转换文件

我知道我可以让每个区域构建自己的二进制文件副本,并进行简单的部署。但是这两个地区都会有相同的二进制文件,所以看起来浪费时间让他们开始构建......

如果两个作业都试图从相同的源位置构建,那么msbuild似乎会在该位置的子文件夹中生成伪像 - 所以当两个作业同时启动时它们会绊倒在彼此...

有什么建议吗? :)

对于它的价值,当我提供时,msbuild似乎忽略了OutputPath 这本来是理想的,因为我可以使用类似的东西;

/p:OutputPath=c:\Code\ProjectX\Build\$(Configuration)\.... etc.

1 个答案:

答案 0 :(得分:1)

我发现最不浪费的方法是构建(或“预包装”)一次,并将trasforms包含在artefact中,以便稍后进行特定于环境的转换和部署。基本上你会有一个自定义的MSBuild项目,在构建它时会调用PipelinePreDeployCopyAllFilesToOneFolder目标(比Package更少浪费,因为我们不需要最终.zip)并将其重定向到{ {1}}属性并包含所有_PackageTempDir项,然后在部署时,您将调用相应的转换任务并通过Web.*.config同步进行部署。