TFVC Code Analysis and Gated Check-In with TFS 2017

1. Managed Code 程式码分析 in Visual Studio

Visual Studio 的 Managed Code 程式码分析有两种, 本文件採用 FxCop 静态程式码分析配合闸道签入强制签入时进行程式码分析

FxCop - 静态程式码分析Roslyn - Build & Design time analysis (Support .NET Core)

2. Enable Static Code Analysis in Visual Studio

(1) Project (Right-click) > Properties

http://img2.58codes.com/2024/20111871I3qrOBQm2p.png

(2) Code Analysis > Enable Code Analysis on Build > Select the rule set

http://img2.58codes.com/2024/20111871F4NagrbbnI.png

(3) [Option] 建立自定义 Rule Sets

a. 选取 Code Analysis > Enable Code Analysis on Build > 选取 Microsoft Managed Minimum Rules > 选取 Open

http://img2.58codes.com/2024/20111871MoxIT0p63v.png

b. 取消 Show rules that are not enabled, 点选 Add or remove child rule sets

http://img2.58codes.com/2024/20111871jG4N6FN1qd.png

c. 新增 Microsoft Security Rules

http://img2.58codes.com/2024/20111871PUucmzNltN.png

d. 将自定义的 Rule set 存档, File > Save ManagedMinimunRules.ruleset as

http://img2.58codes.com/2024/20111871U2qkP1I47R.png

e. 储存为自定义的 Ruleset 档案, 例如 ContosoCA2017.ruleset

http://img2.58codes.com/2024/20111871WgyZ6Itpeg.png

(4) [Option] 选择自定义 Rule Sets

http://img2.58codes.com/2024/20111871aMohq9Fdz2.png

(5) 将专案重新 Build, 测试 Code Analysis 结果

http://img2.58codes.com/2024/20111871wOnyk5vfvd.png

(6) 确认 Output 结果

http://img2.58codes.com/2024/201118712JOdKyQZtu.png

(7) 从 Error List 点选 Code Analysis 纪录连线

http://img2.58codes.com/2024/20111871dUEbld8z7e.png

(8) 开启错误说明网页, 参考说明文件进行修正

http://img2.58codes.com/2024/20111871tvWX6LU4F0.png

3. Configure Gated Check-In in Build Pipeline

闸道签入 (Gated Check-in) 功能主要是防止有缺陷的 Code 被签入 Repository 中, 造成共同开发者取得有缺陷的原始码, 导致无法正常编译. 在程式码控制的一种策略会考虑将开发环境 (Dev), 整合测试环境(SIT), 验证环境(UAT)与生产环境(PROD)独立开发. 以下分支的结构範例 Dev -> SIT -> UAT -> PROD. 在过版的流程中, 当 UAT 程式码要过版到 PROD 环境时, 可以利用 闸道签入来确保程式码必须要完成 Code Analysis 才能够签入.

http://img2.58codes.com/2024/20111871U5EaI14xSH.png

(1) 建立 PROD Build Pipeline

a. 开启 TFS, 选取 Build & Release > + New 建立 Build Pipeline

http://img2.58codes.com/2024/20111871PkaupkUh7Q.png

b. 选取 Empty process

http://img2.58codes.com/2024/20111871RQ8qCiAxbe.png

c. 加入以下的 Task

http://img2.58codes.com/2024/201118718yatVcVM6h.png

(a) 设定 Get Sources Task: Map 部分, 请选择 PROD, 目的是 Gated Check-in 将会以这个路径下的档案 Tigger 签入检查

http://img2.58codes.com/2024/20111871hGwYeG6GcD.png

(b) NuGet restore 使用预设值

http://img2.58codes.com/2024/20111871kawjYmLHaf.png

(c) MSBuild 参数需要加入 /p:RunCodeAnalysis=true;CodeAnalysisRuleSet=C:\RuleSets\ContosoCA2017.ruleset 启用 Code Analysis, 此外需要将 专案中的 ContosoCA2017.ruleset 客製 Rule Set 複製到 Build Server 中的 C:\RuleSets 路径

http://img2.58codes.com/2024/20111871PtG2uFa1Ob.png

(d) Publish Artifact 使用以下的设定

http://img2.58codes.com/2024/20111871R4hNB5ffdx.png

(2) 设定闸道签入: 在 Build Pipeline 选取 Triggers > 设定 Trigger 为启用状态 > 确认 Use workspace mapping for filters 为启用

http://img2.58codes.com/2024/20111871gOVpcfKUON.png

(3) 模拟闸道签入情境

a. 在 Visual Studio 修改 UAT 程式码 (Views/Home/index.cshtml)

http://img2.58codes.com/2024/20111871nEyFBJAeYz.png

b. 签入 UAT 程式码

http://img2.58codes.com/2024/20111871ckEZRNhLkB.png

c. Merge UAT 程式码到 PROD

(a) Source Control Explorer, 选取 UAT > 按滑鼠右键 > Branching and Merging > Merge

http://img2.58codes.com/2024/20111871aJgH2b6EpK.png

(b) Target Branch 选取 PROD

http://img2.58codes.com/2024/20111871PFQx6ZzfjZ.png

(c) Merge 最新版本

http://img2.58codes.com/2024/20111871Z23rlHm8UP.png

(d) Finish 完成 Merge 精灵设定, 进行 Merge

http://img2.58codes.com/2024/20111871BfmSd1u8SJ.png

d. 签入 PROD 程式码

(a) 开启 PROD 专案, 选取 Source Control > Check in...

http://img2.58codes.com/2024/20111871RAZi1RIKOm.png

(b) Check in merge from UAT

http://img2.58codes.com/2024/20111871AangzMv965.png

(c) 出现 Gated Check-in 提示, 选取 Build Changes

http://img2.58codes.com/2024/20111871eGgevPNIbJ.png

(d) 检查 TFS Server 上的 Build 结果, 从 Pending Changes console 点选 here

http://img2.58codes.com/2024/20111871z3VJyH6Wkh.png

(e) 从 Visual Studio Build Request Console 点选 Build Id.

http://img2.58codes.com/2024/20111871nLIbZvzL6S.png

(5) 检视 Build 结果, 可以确认 Gated Check-in 已经将 Merge 的程式码 Build 完成 Code Analysis 并且顺利 Check in 到 Repository

http://img2.58codes.com/2024/201118719fhuKUmTOr.png

参考文件

Build pipeline triggers, https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&tabs=yamlCheck in to a folder that is controlled by a gated check-in build process, https://docs.microsoft.com/en-us/azure/devops/repos/tfvc/check-folder-controlled-by-gated-check-build-process?view=azure-devops

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章