TFS 策略 - 当代码不符合自定义准则时阻止签入

Posted

技术标签:

【中文标题】TFS 策略 - 当代码不符合自定义准则时阻止签入【英文标题】:TFS policy - prevent check-in when code is not custom guidelines compliant 【发布时间】:2017-12-15 16:18:23 【问题描述】:

在我们的组织中,我们使用 TFS 2018 和 Visual Studio 2017 Enterprise。

到目前为止,有一种“客户端”方式,从 Visual Studio 进行配置,选择 Team\Team Project Settings\Source Control\Check-in Policy\Code Analysis,我应该定义自定义规则集.

我需要两件事:

    设置自定义指南,将默认 Microsoft 指南和其他工具指南(如 Roslynator 或 StyleCop)混合在一起。

    创建自定义策略服务器端,以防止在代码不符合这些准则时从 Visual Studio(或我们能想到的任何客户端)签入。

对于第一点,我将做一个简单明了的例子。 Visual Studio 中嵌入了指南。 但它们并不完整,我想扩展它们,在这里和那里取一些东西,或者从头开始定义新的东西。

我想使用例如:

CA1500:变量名称不应与字段名称匹配(来自默认 Visual Studio 托管二进制分析) RCS1145:删除多余的“as”运算符(来自 Roslynator) RCS1204 使用 EventArgs.Empty(来自 Roslynator) SA1302:InterfaceNamesMustBeginWithI(来自 StyleCop) SA1305:FieldNamesMustNotUseHungarianNotation(来自 StyleCop)

我该怎么做?我是否可以不让我在项目级别定义它(例如为每个 .csprj 合并 stylecop 文件)但至少在解决方案或团队项目级别定义它?

对于第二点,我已经定义了附加的强制注释和强制工作项。 我什至可以定义新的策略,这是真的,但它们都可以被客户端覆盖。

有没有可能防止这种情况发生?

【问题讨论】:

【参考方案1】:

最好的解决方案是两部分:

    教育您的用户配置正确的策略和编辑器设置。创建自定义项目模板并分发它们会有所帮助(或将自定义构建目标部署到强制执行良好默认值的机器上。拥有良好的本地策略将帮助人们做正确的事情,而支持做正确事情的人可能不会尝试解决这个问题。

    为您的项目设置 CI 构建。 VSTS 和 TFS 有一个很好的特性,它可以在代码更改时运行构建。您甚至可以将其设置为 Gated Checkin 构建,它将在签入之前检查源。此检查发生在服务器上,并且更难绕过。您还可以将构建配置为始终覆盖代码分析设置,即使它们未在项目中配置。我的MsBuild Helper tasks 将帮助您设置正确的 MsBuild 属性来执行此操作。

关于您更具体的问题:

如果不为所有 Visual Studio 项目配置规则集,则无法在团队项目级别设置代码分析规则。否则签入策略将导致签入失败,但开发人员仍需使用正确的规则集更新解决方案中的所有项目。

您无法阻止人们绕过本地签到政策。您能做的最好的事情是使用报告服务和警报来检测违反政策的情况并采取纠正措施。

【讨论】:

非常清楚的信息谢谢,但我不明白如何使用您的扩展程序。我点击了你的维基,但我仍然感到困惑。有方法/手册吗?截图来自哪里? Visual Studio 还是 TFS? TFS/VSTS。您可以在新的构建管道中插入扩展,将代码分析规则集设置为您想要使用的规则集(如果您想要使用自定义规则集,则包括路径)。然后将输出变量传递到 Additional Arguments 文本框中的 Visual Studio Build 或 MsBuild 任务。 我已经在 TFS 2018 中安装了扩展,但现在......我应该做什么?我应该在构建管道中添加特定任务吗?那会是什么?【参考方案2】:
    您可以将规则集添加到 TFS 源代码管理中,然后从代码分析策略编辑器中选择它。查看下面的屏幕截图:

    签入政策已应用于团队项目,而不是单个项目。

    要编辑签入政策,您必须拥有编辑项目级信息权限。您可以拒绝用户的此权限,以防止他们编辑签入策略。

【讨论】:

以上是关于TFS 策略 - 当代码不符合自定义准则时阻止签入的主要内容,如果未能解决你的问题,请参考以下文章

在TFS签入后自定义事件/操作

TFS 2015 - 自定义路径策略实施?

TFS2010:如果存在代码分析警告,则阻止签入

创建 TFS 自定义签入策略:检查注释是不是包含特定字符串

是否有自动为您格式化代码的 TFS 签入策略?

签入前运行单元测试