将 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
” - 在
String
outputDirectory
- 在
现在,你可以在 PowerShell 脚本中使用 OutPut
_Dir
变量,如下所示
Param([string]$outDir = $env:Output_Dir)
注释
- 你应该将你的环境变量的名称与 TFS2013 和 TFS2015 创建的环境变量的名称相同,因为这有助于从 TFS2012 升级时使用相同的 PowerShell 脚本。
- 你必须更改生成服务器上的 PowerShell 执行策略。在你的生成服务器上运行以下命令
Set-ExecutionPolicy RemoteSigned
- 要处理脚本错误,请不要忘记在 PowerShell 脚本中使用“
exit 0
”表示成功,使用“exit 1
”表示错误。
GitHub
如果你想贡献,只需查看 GitHub 仓库。