PowerShell在SharePoint 2010自动化部署中的应用(1)--代码获取

由于项目需要,要把项目组成员中每天的工作整合到一起。每天手动部署很是费时费力。于是有了是否能利用PowerShell进行自动化部署的想法,正好也有机会学习一下PowerShell。

 

先交代一下项目背景,这个项目是SharePoint 2010的项目,所有功能都是通过VS2010 生成的wsp包部署到服务器的。项目的代码由公司TFS管理,咱一小程序员,没有任何管理权限(只能check in/out)。

 

初步想法是代码获取到开发服务器,编译,执行更新脚本更新开发服务器上的当前版本。以后可以扩展为本地获取,编译,上传,远程执行(PowerShell2的新功能)。按照这个逻辑将功能细化为:代码获取、代码编译打包、项目部署、整合。

 

下面我就按照这个细化的逻辑逐条说明:

1. 代码获取

     根据网上找到的资料,可以有3种途径

     A.VS2010 U版集成了访问TFS的命令行工具。功能的实现是通过TF.exe命令行程序提供,没有提供PowerShell编程接口,虽说PowerShell也可以调用,但在异常处理和信息的交互上不好处理。    

   B.微软官方提供的TFS管理工具包Team Foundation Server Power Tools September 2010,目前最新的版本是September2010(下载)

          这个应该是官方推荐的方法,值得一提的是该工具包不光提供了命令行程序,还通过PowerShell的Cmdlets提供了基本的版本控制命令。

     C.通过PowerShell直接调用TFS的对象。这个属于终极方法了,这个要是都不能实现你的功能,就给微软的产品组发信吧,呵呵。 

 

这3种方法中方法A是通过命令行程序实现的,没有提供PowerShell编程接口。方法B是微软提供的管理工具包,应该是官方推荐的方法,这里有一篇介绍http://archive.cnblogs.com/a/1841403/,不多说。我这里说说方法C。

 

下面列出了一些基本方法,更多的说明可以查MSDN 

 

代码
 
     
# 获取授权。密码如果要保存的话,注意加密,方法网上有很多“http://www.brangle.com/wordpress/2009/08/pass-credentials-via-powershell/”
$cer = Get - Credential

# Team Project Collection全路径,注意不光要提供TFS Server的URL还要包括Project Collection的名称
$srv = " http://TFSServer/tfs/ProjectCollection "

# 创建TFS 对象模型
$tfs = New - Object Microsoft.TeamFoundation.Client.TeamFoundationServer( $srv , $cer );

# 加载客户端Workspace的相关assembly
[System.Reflection.Assembly] :: LoadWithPartialName( " Microsoft.TeamFoundation.VersionControl.Client " )

# 获取workspace客户端服务对象
$vs = $srv .GetService( " Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer " );

# 获取工作区
$ws = $vs .GetWorkspace( " [工作区名称] " , " 工作区所有者 " );

# 项目路径
$projectPath = " $/Projects/ProjectA”

#获取项目类型
$request = New-Object Microsoft.TeamFoundation.VersionControl.Client.GetRequest($projectPath,[Microsoft.TeamFoundation.VersionControl.Client.RecursionType]::Full,[Microsoft.TeamFoundation.VersionControl.Client.VersionSpec]::Latest);

#获取项目
$getStatus = $ws.Get($request,([Microsoft.TeamFoundation.VersionControl.Client.GetOptions]::GetAll));

 

除了上面这样的调用方法,网上还有人利用PowerShell脚本语言的动态特性,把VersionControl,WorkitemTracking动态的添加到自定义对象上,方便以后调用。

 

代码
 
     
# function defination
function get - tfs (
[string]
$serverName = $ ( Throw 'serverName is required')
)
{
# load the required dll
[void][System.Reflection.Assembly] :: LoadWithPartialName( " Microsoft.TeamFoundation.Client " )

$propertiesToAdd = (
('VCS', 'Microsoft.TeamFoundation.VersionControl.Client', 'Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer'),
('WIT', 'Microsoft.TeamFoundation.WorkItemTracking.Client', 'Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore'),
('BS', 'Microsoft.TeamFoundation.Build.Common', 'Microsoft.TeamFoundation.Build.Proxy.BuildStore'),
('CSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.ICommonStructureService'),
('GSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.IGroupSecurityService')
)

# fetch the TFS instance, but add some useful properties to make life easier
# Make sure to "promote" it to a psobject now to make later modification easier
[psobject] $tfs = New - Object Microsoft.TeamFoundation.Client.TeamFoundationServer([String] $serverName , (New - Object Microsoft.TeamFoundation.Client.UICredentialsProvider));
$tfs .EnsureAuthenticated();
foreach ( $entry in $propertiesToAdd ) {
$scriptBlock = '
[System.Reflection.Assembly]
:: LoadWithPartialName( " {0} " ) > $null
$this .GetService([{ 1 }])
'
-f $entry [ 1 ], $entry [ 2 ]
$tfs | add - member scriptproperty $entry [ 0 ] $ExecutionContext .InvokeCommand.NewScriptBlock( $scriptBlock )
}
return $tfs
}

# variable

# Team Project Collection全路径,注意不光要提供TFS Server的URL还要包括Project Collection的名称
$srv = " http://TFSServer/tfs/ProjectCollection "

# 创建TFS 对象模型
$tfs = get - tfs( " http://TFSServer/tfs/ProjectCollection " )

# 直接获取Workspace对象
$ws = $tfs .VCS.GetWorkspace( " [工作区名称] " , " 工作区所有者 " );

  

代码获取这一部分其实很通用,只要是去TFS里面抓代码都能用到,后面我们讲的自动化编译和打包会逐渐的和SharePoint结合起来。(未完)

 

转载于:https://www.cnblogs.com/crazysharepoint/archive/2010/11/12/autodeployment1.html

你可能感兴趣的:(PowerShell在SharePoint 2010自动化部署中的应用(1)--代码获取)