【发布时间】:2013-07-12 03:37:15
【问题描述】:
出于 CI 的原因,我一直在尝试从命令行使用 msbuild。我知道我可以编写一个 xml 构建脚本并以这种方式使用 msbuild,但我们显然需要我们的 CI 系统以相同的方式工作于我们所有的 CI 工作。我们有 69 个(dev、qa、trunk)工作需要重写,而且我们真的没有时间。
我们目前从命令行使用以下目标和属性运行 msbuild……就像这样。 /target:Rebuild;Package /p:DeployOnBuild=True;Configuration=Debug;_PackageTempDir=".\PackageTemp";PackageAsSingleFile=true;PackageLocation=".\obj\Debug\360Survey.zip"
这会生成 zip 文件,还会生成一个名为 360Survey.deploy.cmd 的文件,如您所知,我们使用该文件从命令行通过 Web 部署进行部署。
我们试图解决的问题是,我们目前无法准确了解生产中的源版本。因此,在此过程中,我们希望在 zip 文件中添加另一个包含源修订号和可能的其他构建信息的文件,以便我们始终知道将哪个版本的代码部署到生产环境中。
也许我们的部分问题源于流程问题,但在我们解决该问题之前,我们希望对 CI 流程进行小幅调整,以弥补一些不足。
我已经通过谷歌搜索进行了几次不同的尝试,但我无法让它发挥作用。
- 我尝试不打包为 zip 文件,但随后我没有得到 deploy.cmd 文件。
- 我尝试使用以下属性指定临时输出路径。 _PackageTempDir=".\PackageTemp" 将文件添加到该文件夹,然后调用包目标,但这似乎删除了临时文件夹并重新创建它删除了我们的版本文件。
- 我尝试了我们使用的不同属性的几种不同组合
显然,我对 msbuild 的工作原理以及哪些目标依赖于其他目标以及如何通过覆盖默认属性来自定义每个目标缺乏了解。我当然明白,如果不编写自定义构建脚本,可能无法做我想做的事,但我在网上找不到任何人说其他话。我查看了 msdn 文档,但不清楚在命令行运行 msbuild 时您可以更改哪些属性以及它们如何影响不同的目标。我见过的大多数网站都详细介绍了编写自定义构建脚本,但并没有真正过多地介绍命令行。
【问题讨论】:
-
既然你有一个 zip 文件,你不能只添加一个额外的构建步骤来打开 zip 并添加一个带有版本信息的文本文件吗?或者甚至只是调整 zip 文件的注释?
-
顺便说一句,将版本信息获取到构建中的一个好方法,至少对于 c++/c# dll 和 exe 来说,是有一个预构建步骤,您可以在其中获取版本信息,然后使用它来创建版本资源 (c++) 或调整 AssemblyInfo.cs (c#)。不确定这如何适用于网络,因为我根本没有使用它的经验。
-
@stijn 如何从命令行将该文件添加到 zip 中?那可能吗?最终我们可以修改 assemblyinfo 文件。虽然我觉得拥有一个文本文件或修改程序集信息文件的属性非常接近。再一次,我不确定如何在没有命令行自定义构建脚本的情况下修改 assemblyinfo 文件?
标签: version-control msbuild jenkins continuous-integration