【发布时间】:2013-08-19 11:32:51
【问题描述】:
在持续集成中,如何在构建 TFS(Team Foundation Server)结束时运行 sonar-runner 的命令? 信息:TFS 2013、Windows Server 2008 R2、sonar-runner 2.3
【问题讨论】:
-
以下是卡瓦略的答案吗?如果是,请采纳!
在持续集成中,如何在构建 TFS(Team Foundation Server)结束时运行 sonar-runner 的命令? 信息:TFS 2013、Windows Server 2008 R2、sonar-runner 2.3
【问题讨论】:
在构建过程中执行任意命令的唯一方法是将 InvokeProcess 活动添加到 BuildProcessTemplate。这并不像起初看起来那么困难。
复制位于团队项目的 /BuildProcessTemplates 文件夹中的 DefaultTemplate.xaml。随意命名 - SonarRunnerTemplate.xaml 之类的。
在 Visual Studio 中打开新模板
点击右上角的“全部折叠”可轻松导航到正确的活动。
浏览到Process > Sequence > Run On Agent > Try Compule, Test, and Associate Changesets and Work Items > 在Finally 子句中 > Revert Workspace and Copy Files > If DropBuild And DropLocation is Set
在“然后”框中,您将看到 Copy Files to Drop Location 活动。暂时将其移至“其他”框中。
将工具箱中的Sequence 活动添加到(现在为空)然后框
将 Copy Files to Drop Location(我们之前移动过的)移回您刚刚添加到 Then 框中的 Sequence 活动。
从工具箱中添加一个InvokeProcess 活动以运行之后“复制文件到放置位置”活动
打开 InvokeProcess 活动的 属性。 FileName 字段是您需要执行的命令。在这种情况下,执行 Sonar runner 的命令。编写运行 Sonar 的批处理或 powershell 脚本可能是最简单的方法......然后调用它。
保存构建过程模板并将其添加到 TFS。然后,您可以将此模板用于您的构建定义。
这种方法的一个问题是,在 InvokeProcess 命令返回之前,构建不会“完成”。因此,如果您的声纳运行需要很长时间(我知道我已经看到大型代码库需要超过 24 小时),那么构建将需要很长时间才能完成。这可以通过让脚本异步生成 Sonar 进程来缓解。
【讨论】:
作为 Microsoft 和 SonarQube 合作的一部分,现在有一种官方方法可以让 MsBuild 和 TeamBuild 与 SonarQube 一起工作。您可以在 SonarQube 网站上找到所有详细信息:
http://www.sonarqube.org/announcing-sonarqube-integration-with-msbuild-and-team-build/
在 Microsoft ALM 网站上:
还有由 ALM 管理员准备的文档,描述如何安装 SonarQube 并将其与现有 TFS 服务器集成:
【讨论】: