TFS构建 - PowerShell或自定义活动?

问题描述:

我知道我可以编写自己的自定义活动(用C#)来在构建过程中执行自定义逻辑。我的理解是,Powershell也可以使用,但我不确定它适合在哪里。我理解Powershell用于执行命令行命令,但是如何以及在哪里使用它来自定义构建过程?TFS构建 - PowerShell或自定义活动?

感谢

是否使用PowerShell或定制活动的决定对我来说是基于谁负责。如果您有一个由构建主人(针对TFS)创建的活动,并且因此可以为组织中的所有团队重用,我将创建一个自定义活动。

如果项目团队负责(例如部署脚本),我使用powershell。我创建了一个参数,让团队可以输入需要执行部署的powershell脚本的路径。项目团队可以选择在该参数中输入值。项目团队也可以在没有构建主人的帮助下自行维护他们的PowerShell部署脚本。

因此,在短期:

  • 可重用的活动:自定义活动
  • 活动只球队:PowerShell的
+0

因此,从本质上讲,PowerShell脚本是自定义活动的替代品,并且看起来两者都具有相同的用途。我可以混合搭配PS和活动吗?我可以从自定义活动调用PS脚本吗? – DotnetDude 2010-11-08 21:47:39

+0

在自定义活动中,您可以访问构建中的所有参数和变量。所以它不是替代品。你可以混合使用它。 – 2010-11-09 04:53:38

+0

要调用PS脚本,最简单的方法是打开构建过程模板并向构建过程模板添加一个新参数以传递所需的脚本。添加convertWorkspace活动以将版本控制路径中的路径转换为本地路径。然后添加一个新的InvokeProcess活动,它使用参数“'@”“执行Powershell。 – 2010-11-09 04:56:57

对于我来说,PowerShell是要走的路。这里是我的理由:

  1. 脚本独立性:

你得到使用这种方法的脚本独立性。例如:我有一些脚本的生成后运行(即编译)过程已完成:

  • 实例化数据库
  • 部署数据库代码
  • 部署Web应用程序
  • 验证部署
  • 运行验收测试

以上所有功能都可以独立启动,调试和测试,无需排队新建。

  1. PowerShell是容易的工作:

自定义组件往往有很多的复杂性和片状的添加到解决方案。示例:从TFS 2010升级到TFS 2012非常痛苦,因为所有的构建模板都破坏了。我们必须重新编译我们所有的定制程序集,并且只有团队中的一个开发人员知道如何设置TFS Build来运行我们的定制活动。我最近从构建模板中删除了所有自定义程序集,并且仅使用Powershell。

我已经定制了我的流程模板,以在TFS构建完成后调用用户定义的powershell脚本。我通过在构建定义中使用路径参数来完成此操作。这个参数只是一个指向脚本的字符串数组。我同意上面的Ewald,TFS不会将构建参数传递给脚本。为了解决这个问题,在我的工作流模板中,我解析了字符串数组中的每个脚本,并用构建参数替换了众所周知的标记 - 例如@(BuildNumber),@(SourcesDirectory)等。我觉得这是一个非常简单和可靠的解决方案。