TFS自动下载Build原理及代码实现

Posted xuexiaodong2009

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TFS自动下载Build原理及代码实现相关的知识,希望对你有一定的参考价值。

 背景:

   由于TFS服务器在国外的客户处,导致每次生成新的build,复制到本地局域网需要近一个小时的时间,由于使用的是远程桌面mstsc登录的方式,经常发生同一个账户多个人登录,导致复制了一半,连接中断,又不得不重新复制。所以需要写一个自动下载build到本地局域网的程序。而且我们又不能修改TFS的生成设置,也不能修登录TFS所在的机器,还需要对代码进行一些验证例如stylecop,Fxcop。通过对本程序的扩展支持其他一些验证。


 需要解决的问题:

    1Build何时build成功?2获取下载地址?3如何通过远程登录的方式自动下载?4如何支持stylecop,Fxcop的验证?


 1Build何时build成功?

     我的做法是通过轮询的方式进行查询,本身并不难,只是文档很少,很难找到TFS相关文档。

   参考文献

 2获取下载地址?

   其实第一步查询到的信息中包含下载地址,但调试时,怎么都读不到数据,后来才知道需要在C:\\Windows\\System32\\drivers\\etc\\hosts文件中做映射,把IP和机器名相互对应。否则下载地址是机器名,没办法解析成IP,导致下载失败。

3如何通过远程登录的方式自动下载?

   由于没有在同一个局域网,导致必须通过远程桌面mstsc登录的方式自动连接,然后把下载好的文件复制到本地局域网。

找了很长时间都没有发现通过mstsc命令行或者代码的方式自动登录。mstsc命令行有一个文件的参数,可自己试了多次,但依然需要手动输入密码。想要自动下载肯定不能这样。

幸好找到一种相当于共享文件夹的方式。这样就避开了自动远程桌面mstsc登录的这个难题。

   下载的实际过程,其实很简单,根据查询到的下载地址,压缩到远程登录机器上的一个文件夹,然后再从此文件夹复制到本地局域网的共享文件夹。

4如何支持stylecop,Fxcop的验证?

    其实思路基本是一致的,只要把代码下载到本地局域网,任何验证都是可以处理的。

Remote Desktop Services API Functions

远程桌面连接最后一幅图包含怎么在远程登录的机器上共享登录机的磁盘

C#访问远程主机资源的方法

如何:连接到远程计算机

使用VB越过远程登录的代码

set sh=WScript.CreateObject("WScript.Shell")
  sh.run("cmd")    
  WScript.Sleep   1000   
  sh.SendKeys   "telnet 10.32.148.224"   
  WScript.Sleep   3000   
  sh.SendKeys   "ENTER"   
  WScript.Sleep   3000   
  sh.SendKeys   "ENTER"  
  WScript.Sleep   3000    
  sh.SendKeys   "AdministratorENTER"   
  WScript.Sleep   3000   
  sh.SendKeys   "o7a@bjENTER"   
  WScript.Sleep   3000   
  sh.SendKeys   "C:\\Xian\\CopyToPackage.batENTER"   
  WScript.Sleep   3000    
  sh.SendKeys   "C:\\Xian\\build.batENTER"   
  WScript.Sleep   3000  
  sh.SendKeys   "C:\\Xian\\CopytoAgent.batENTER"    
WScript.Sleep   1000  
  sh.SendKeys   "exitENTER"
WScript.Sleep   1000  
  sh.SendKeys   "exitENTER"  

REM Setup current directory and path to MSBuild
setlocal
pushd %~dp0
set TARGET="%1"
if "%1" == "" (set TARGET=Rebuild)
set CONFIGURATION="%2"
if "%2" == "" (set CONFIGURATION=Debug)
set MSBUILDCMD="%SystemRoot%\\Microsoft.NET\\Framework\\v4.0.30319\\MsBuild.exe" /p:Configuration=%CONFIGURATION% /t:%TARGET%

%MSBUILDCMD% Common\\Coinstar.Coin.Common\\Coinstar.Coin.Common.sln
if ERRORLEVEL 1 GOTO error

%MSBUILDCMD% Kiosk\\Coinstar.Coin.Kiosk.Common\\Coinstar.Coin.Kiosk.Common.sln
if ERRORLEVEL 1 GOTO error

%MSBUILDCMD% Kiosk\\Coinstar.Coin.Kiosk.Devices\\Coinstar.Coin.Kiosk.Devices.sln
if ERRORLEVEL 1 GOTO error

%MSBUILDCMD% Kiosk\\Coinstar.Coin.Kiosk.BusinessManager\\Coinstar.Coin.Kiosk.BusinessManager.sln
if ERRORLEVEL 1 GOTO error

%MSBUILDCMD% Kiosk\\Coinstar.Coin.Kiosk.Product\\Coinstar.Coin.Kiosk.Product.sln
if ERRORLEVEL 1 GOTO error

%MSBUILDCMD% Kiosk\\Coinstar.Coin.Kiosk.Ui\\Coinstar.Coin.Kiosk.Ui.sln
if ERRORLEVEL 1 GOTO error

popd
exit /b 0

:error
popd
pause
exit /b 1



源代码下载


以上是关于TFS自动下载Build原理及代码实现的主要内容,如果未能解决你的问题,请参考以下文章

关于 TFS 2010 Build 的奇怪代码分析问题

Android 实现自动抢微信红包

TFS看板规则

TFS Build 2013 避免代码分析

TFS 创建团队成员及管理啊

TFS online build change web.config