将版本文件添加到msbuild包,以通过Web部署进行部署,而无需自定义生成脚本

时间:2013-07-12 03:37:16

标签: version-control msbuild jenkins continuous-integration

出于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流程做一个小调整,以便解决一些问题。

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

  1. 我尝试不打包为zip文件,但后来我没有得到deploy.cmd文件。
  2. 我尝试使用以下属性指定临时路径。 _PackageTempDir =“。\ PackageTemp”将文件添加到该文件夹​​,然后调用包目标,但这似乎删除了临时文件夹并重新创建它,删除了我们的版本文件。
  3. 我尝试了几种不同属性的组合
  4. 显然,我对msbuild的工作原理以及哪些目标依赖于其他目标以及如何通过覆盖默认属性来自定义每个目标缺乏了解。我当然明白,如果不编写自定义构建脚本,可能无法做我想做的事情但我在网上找不到其他人说过的话。我查看了msdn文档,但是从命令行运行msbuild时,不清楚可以更改哪些属性以及它们如何影响不同的目标。我见过的大多数网站都详细介绍了编写自定义构建脚本的细节,但并没有真正说明命令行。

1 个答案:

答案 0 :(得分:0)

有很多方法可以将文件(或多个文件)添加到现有的zip文件中:使用MsBuildTasks的msbuild脚本,在PowerShell script中,在命令行using all kinds of tricks

我最喜欢的,也是迄今为止最简单的:只需使用您选择的方法安装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