0

出于 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 deploy 进行部署。

我们试图解决的问题是我们目前没有办法确切知道生产中的源版本。因此,在此过程中,我们希望向 zip 文件添加另一个包含源修订号和可能的其他构建信息的文件,以便我们始终知道将哪个版本的代码部署到生产环境中。

也许我们的部分问题源于流程问题,但在我们得到解决之前,我们希望对我们的 CI 流程进行小幅调整,以弥补一些不足。

我已经通过谷歌搜索进行了几次不同的尝试,但我无法让它发挥作用。

  1. 我尝试不打包为 zip 文件,但后来我没有得到 deploy.cmd 文件。
  2. 我尝试使用以下属性指定临时输出路径。_PackageTempDir=".\PackageTemp" 将文件添加到该文件夹​​,然后调用包目标,但这似乎删除了临时文件夹并重新创建它删除了我们的版本文件。
  3. 我尝试了我们使用的不同属性的几种不同组合

显然,我对 msbuild 的工作原理以及哪些目标依赖于其他目标以及如何通过覆盖默认属性来自定义每个目标缺乏了解。我当然明白,如果不编写自定义构建脚本,可能无法做我想做的事,但我在网上找不到任何人说其他话。我查看了 msdn 文档,但不清楚在命令行运行 msbuild 时可以更改哪些属性以及它们如何影响不同的目标。我见过的大多数网站都详细介绍了编写自定义构建脚本,但并没有真正过多地介绍命令行。

4

1 回答 1

0

有很多方法可以将文件(或多个文件)添加到现有的 zip 文件中:在使用MsBuildTasks的 msbuild 脚本中,在PowerShell 脚本中,在命令行中使用各种技巧

我最喜欢的也是迄今为止最简单的:只需使用您选择的方法安装7zip,或者无论如何只要确保它在您的路径中,然后从命令行调用它:

7z a .\obj\Debug\360Survey.zip versionInfo.txt

将 versionInfo.txt 添加到 zip 文件中。

顺便说一句,如果您使用的是 git,您将使用类似这样的东西来创建信息:

git rev-parse --short HEAD > versionInfo.txt

或者如果存储库在其他地方:

git --work-tree=/path/to/x --git-dir=/path/to/x.git rev-parse --short HEAD > versionInfo.txt
于 2013-07-12T13:33:49.600 回答