1 问题
由于以前公司使用的是TFS 2008.现在已经升级到了TFS 2010.生成构建大不一样。因此2008的脚本基本上被放弃了。于是尝试使用TFS Build 2010来实现以前脚本中的一些功能。
以前脚本内有一个使用exec调用devenv的功能,用来生成工程的Setup文件。2010里面完全不同了。下面记录了我如何使用TFS Build 2010来完成上述操作。
2 简介
新的构建系统使用了xaml格式,打开后类似流程图。不需要直接写代码,所有操作都在工具箱里拖动到流程图中即可。如下图
可以看到有么的工具箱中有一个Sequence,就是"顺序执行"的意思。对应了右面流程图中最外面的框。有了顺序执行的框,才可以将里面的各个执行操作连接起来
上左图中,可以看到一次生成的主要顺序为
获取生成
设置放置文生成文件的地方。这里会包括设置生成版本号、建立存放生成文件文件夹等操作
这里是重点。就是在Agent上进行编译。我们一会的脚本也会写在这里面。
检查门签入。
每个双击打开都可以看到他们下面的工作。
3 思路
当初有一个项目的安装文件时这样进行的
在生成服务器获取所有源码后,调用devenv编译sln文件。这样会在其制作生成文件的脚本下生成安装文件。然后将其拷贝到编译文件夹下。
因此我们大概思路就是
1 在其完成源码获取后进行编译sln(也可以是在其用msbuild编译成功后进行,msbuild编译不会生成安装文件)
2 将生成后的安装文件拷贝到相应目录。
4 实现
由于要进入编译成功后。我们进入
Run On Agent-àTry Compile, Test, and Associate Changesets and Work Items-àTry
在控制流中加入一个IF做判断是否编译成功。我取名叫"If Compilation Successful(Make Setup Files)"如下图
双击后在其Condition下加入"BuildDetail.CompilationStatus = Microsoft.TeamFoundation.Build.Client.BuildPhaseStatus.Succeeded
"
这样只有在生产成功后才会执行如下"Then"的操作。
在Then中添加一个Sequence。这样可以执行多步操作。我们将会把调用devenv和拷贝放进去。如下图
首先我们拉入一个"Invoke Process"这个工具可以调用外部命令。
在其属性中我们再其FileName中写入
"C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"
这个是devenv的路径。
在其Arguments中写入
String.Format(SourcesDirectory + "\" + "Project_VS2005.sln /Build" + " " + """release""")
这个是执行的命令。编译sln
在拉入一个"CopyDirectory"这个工具可以做拷贝目录操作
在其属性中Source中写入
String.Format(SourcesDirectory + "\EMSetup\Release")
在执行编译sln后会在这个目录中生成安装文件。
在其属性Destination中写入
String.Format(BinariesDirectory + "\SetupFile")
我们将安装文件拷贝到BinariesDirectory目录中。这个目录最终会被拷贝到Drop目录下。
生成工作就完成了。比TFS Build 2008 简单明了。