将 PowerShell 脚本添加到 TFS2012 生成





5.00/5 (1投票)
将预处理和后处理 PowerShell 脚本添加到 TFS2012 生成的分步指南
只需下载 TFS 生成模板即可享受。 :)
引言
在本文中,我们将解释如何自定义 TFS2012 生成默认模板以添加预置和后置 PowerShell 脚本,并创建如 drops 路径和生成号等环境变量。这些功能在 TFS2013 和 TFS 2015 中默认存在。
步骤 1:编辑生成模板
1. 添加工作流参数
打开生成设置的默认模板工作流“DefaultTemplate.11.1.xaml”,然后单击“Arguments”选项卡并添加这四个工作流参数
- PostBuildScriptPath
- PreBuildScriptPath
- PreBuildScriptArgs
- PostBuildScriptArgs
创建生成进程参数的“Hooks Script”部分
我们将创建一个新的“Hook scripts”部分,其中包含脚本参数及其描述,并为 PreBuildScriptPath 和 PostBuildScriptPath 参数添加文件浏览器,以便从源控件中选择脚本的位置。
在“Arguments”选项卡中,选择“Metadata”参数,然后单击“Default value”列中的“...”按钮,并添加脚本参数的元数据,如下所示
要为 PreBuildScriptPath 和 PostBuildScriptPath 参数添加文件浏览器,请将 Editor 字段的值设置为“Microsoft.TeamFoundation.Build.Controls.ServerFileBrowserEditor, Microsoft.TeamFoundation.Build.Controls”
2. 添加预置脚本工作流
在工作流中,找到名为“Compile and Test for Configuration”的序列,它执行编译。然后从工具箱拖动一个 If 活动并将其放置在名为“For Each Project in BuildSettings.ProjectsToBuild”的 foreach 循环上方,并设置其属性为
- DisplayName:If there is a pre-build script (如果存在预置脚本)
条件
Not String.IsNullOrEmpty(PreBuildScriptPath)
从工具箱中,将 ConvertWorkspaceItem 活动和 InvokeProcess 活动拖放到“If”活动的 Then 部分,如上图所示。
右键单击包含你的活动的序列活动,然后单击“create variable” (创建变量)。添加三个变量
- preBuildScriptLocalPath(- string)
- postBuildScriptLocalPath(- string)
- scriptResult(- Int32)
在 ConvertWorkspaceItem 活动上,设置以下属性
- DisplayName:Get pre-build script local path (获取预置脚本本地路径)
- Input:- PreBuildScriptPath
- Result:- preBuildScriptLocalPath
- Workspace:Workspace (工作区)
然后,在 InvokeProcess 活动中
- 拖动一个 WriteBuildMessage并将其放置在stdOutput下方,并设置Message属性- Message:- stdOutput
 
- 拖动 WriteBuildError并将其放置在errOutput下方,并设置Message属性- Message:- errOutput
 
在 InvokeProcess 活动上,设置以下属性
- 参数:- String.Format(" ""& '{0}' {1}"" ", preBuildScriptLocalPath, PreBuildScriptArgs)
- DisplayName:Run pre-build script (运行预置脚本)
- FileName:“PowerShell”
- Result:- scriptResult- 现在,要处理脚本错误,请在 - InvokeProcess活动之后添加一个- if活动,并用以下内容填充其属性
- DisplayName:Check Pre build script errors (检查预置脚本错误)
- 条件:- scriptResult <> 0 - 然后,从工具箱中,将 - Throw组件拖到- If活动的“- Then”部分,并用以下内容填充其- Exception属性- New GenericException("Pre build script failed - please check the log For errors")
这将使生成过程在脚本失败时停止。
请注意
你必须在 PowerShell 脚本中使用“exit 0”表示成功,使用“exit 1”表示意外错误。
3. 添加后置脚本工作流
现在,我们对后置生成脚本做同样的操作。我们将复制预置脚本的“If”活动,并将其粘贴到名为“For Each Project in BuildSettings.ProjectsToBuild”的 foreach 循环下方,并更改其属性、ConvertWorkspaceItem 活动和 InvokeProcess 活动的属性,以使用后置生成变量和参数。
步骤 2:环境变量
如果我们还需要有关生成本身的一些信息,例如 SourceDirectory 和 BuildNumber,那么在 TFS2013 和 TFS2015 中,这些变量以及更多变量都可以使用!它们存储为环境变量, 但在 TFS2012 中,这些变量未设置,因此我们必须添加它们。
让我们创建一个名为 Output_Dir 的环境变量,它存储生成输出目录。因此,从工具箱中,将 InvokeMethod 活动拖动并将其放置在预置脚本的 If 活动上方,并设置其属性为
- DisplayName:Set build output directory variable (设置生成输出目录变量)
- MethodName:- SetEnvironmentVariable
- TargetType:- System.Environment
- 参数:- 在 String“Output_Dir”
- 在 StringoutputDirectory
 
- 在 
现在,你可以在 PowerShell 脚本中使用 OutPut_Dir 变量,如下所示
Param([string]$outDir = $env:Output_Dir)
注释
- 你应该将你的环境变量的名称与 TFS2013 和 TFS2015 创建的环境变量的名称相同,因为这有助于从 TFS2012 升级时使用相同的 PowerShell 脚本。
- 你必须更改生成服务器上的 PowerShell 执行策略。在你的生成服务器上运行以下命令Set-ExecutionPolicy RemoteSigned 
- 要处理脚本错误,请不要忘记在 PowerShell 脚本中使用“exit 0”表示成功,使用“exit 1”表示错误。
GitHub
如果你想贡献,只需查看 GitHub 仓库。











