elvis0123

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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 简单明了。

posted on 2011-03-22 15:41  elvis  阅读(610)  评论(0编辑  收藏  举报