65.9K
CodeProject 正在变化。 阅读更多。
Home

将 PowerShell 脚本添加到 TFS2012 生成

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2016 年 12 月 3 日

CPOL

3分钟阅读

viewsIcon

11664

downloadIcon

114

将预处理和后处理 PowerShell 脚本添加到 TFS2012 生成的分步指南

只需下载 TFS 生成模板即可享受。 :)

引言

在本文中,我们将解释如何自定义 TFS2012 生成默认模板以添加预置和后置 PowerShell 脚本,并创建如 drops 路径和生成号等环境变量。这些功能在 TFS2013 和 TFS 2015 中默认存在。

步骤 1:编辑生成模板

1. 添加工作流参数

打开生成设置的默认模板工作流“DefaultTemplate.11.1.xaml”,然后单击“Arguments”选项卡并添加这四个工作流参数

  • PostBuildScriptPath
  • PreBuildScriptPath
  • PreBuildScriptArgs
  • PostBuildScriptArgs

创建生成进程参数的“Hooks Script”部分

我们将创建一个新的“Hook scripts”部分,其中包含脚本参数及其描述,并为 PreBuildScriptPathPostBuildScriptPath 参数添加文件浏览器,以便从源控件中选择脚本的位置。

在“Arguments”选项卡中,选择“Metadata”参数,然后单击“Default value”列中的“...”按钮,并添加脚本参数的元数据,如下所示

要为 PreBuildScriptPathPostBuildScriptPath 参数添加文件浏览器,请将 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 (获取预置脚本本地路径)
  • InputPreBuildScriptPath
  • ResultpreBuildScriptLocalPath
  • Workspace:Workspace (工作区)

然后,在 InvokeProcess 活动中

  • 拖动一个 WriteBuildMessage 并将其放置在 stdOutput 下方,并设置 Message 属性
    • MessagestdOutput
  • 拖动 WriteBuildError 并将其放置在 errOutput 下方,并设置 Message 属性
    • MessageerrOutput

InvokeProcess 活动上,设置以下属性

  • 参数:
    String.Format(" ""& '{0}' {1}"" ", preBuildScriptLocalPath, PreBuildScriptArgs)
  • DisplayName:Run pre-build script (运行预置脚本)
  • FileName:“PowerShell”
  • ResultscriptResult

    现在,要处理脚本错误,请在 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:环境变量

如果我们还需要有关生成本身的一些信息,例如 SourceDirectoryBuildNumber,那么在 TFS2013 和 TFS2015 中,这些变量以及更多变量都可以使用!它们存储为环境变量 但在 TFS2012 中,这些变量未设置,因此我们必须添加它们。

让我们创建一个名为 Output_Dir 的环境变量,它存储生成输出目录。因此,从工具箱中,将 InvokeMethod 活动拖动并将其放置在预置脚本的 If 活动上方,并设置其属性为

  • DisplayName:Set build output directory variable (设置生成输出目录变量)
  • MethodNameSetEnvironmentVariable
  • TargetTypeSystem.Environment
  • 参数:
    • StringOutput_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 仓库。

© . All rights reserved.