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
(2) Code Analysis > Enable Code Analysis on Build > Select the rule set
(3) [Option] 建立自定义 Rule Sets
a. 选取 Code Analysis > Enable Code Analysis on Build > 选取 Microsoft Managed Minimum Rules > 选取 Open
b. 取消 Show rules that are not enabled, 点选 Add or remove child rule sets
c. 新增 Microsoft Security Rules
d. 将自定义的 Rule set 存档, File > Save ManagedMinimunRules.ruleset as
e. 储存为自定义的 Ruleset 档案, 例如 ContosoCA2017.ruleset
(4) [Option] 选择自定义 Rule Sets
(5) 将专案重新 Build, 测试 Code Analysis 结果
(6) 确认 Output 结果
(7) 从 Error List 点选 Code Analysis 纪录连线
(8) 开启错误说明网页, 参考说明文件进行修正
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 才能够签入.
(1) 建立 PROD Build Pipeline
a. 开启 TFS, 选取 Build & Release > + New 建立 Build Pipeline
b. 选取 Empty process
c. 加入以下的 Task
(a) 设定 Get Sources Task: Map 部分, 请选择 PROD, 目的是 Gated Check-in 将会以这个路径下的档案 Tigger 签入检查
(b) NuGet restore 使用预设值
(c) MSBuild 参数需要加入 /p:RunCodeAnalysis=true;CodeAnalysisRuleSet=C:\RuleSets\ContosoCA2017.ruleset 启用 Code Analysis, 此外需要将 专案中的 ContosoCA2017.ruleset 客製 Rule Set 複製到 Build Server 中的 C:\RuleSets 路径
(d) Publish Artifact 使用以下的设定
(2) 设定闸道签入: 在 Build Pipeline 选取 Triggers > 设定 Trigger 为启用状态 > 确认 Use workspace mapping for filters 为启用
(3) 模拟闸道签入情境
a. 在 Visual Studio 修改 UAT 程式码 (Views/Home/index.cshtml)
b. 签入 UAT 程式码
c. Merge UAT 程式码到 PROD
(a) Source Control Explorer, 选取 UAT > 按滑鼠右键 > Branching and Merging > Merge
(b) Target Branch 选取 PROD
(c) Merge 最新版本
(d) Finish 完成 Merge 精灵设定, 进行 Merge
d. 签入 PROD 程式码
(a) 开启 PROD 专案, 选取 Source Control > Check in...
(b) Check in merge from UAT
(c) 出现 Gated Check-in 提示, 选取 Build Changes
(d) 检查 TFS Server 上的 Build 结果, 从 Pending Changes console 点选 here
(e) 从 Visual Studio Build Request Console 点选 Build Id.
(5) 检视 Build 结果, 可以确认 Gated Check-in 已经将 Merge 的程式码 Build 完成 Code Analysis 并且顺利 Check in 到 Repository