微软 TeamFoundation 服务器秘籍(一)_teamfileclient
原文:
annas-archive.org/md5/bd0c745fa9f073f50479ad01a83e6124
译者:飞龙
协议:CC BY-NC-SA 4.0
前言
Visual Studio 是微软开发者工具和服务的套件,其中一些关键工具包括 Visual Studio IDE、Visual Studio Code、Visual Studio Team Services 和 Visual Studio Team Foundation Server(TFS)。早在 2004 年 11 月,微软就发布了集成的应用生命周期管理(ALM)工具的第一个版本,名为“Microsoft Visual Studio Team Systems”。在过去的 15 年里,该产品经历了几次演变,每次都丰富了开发者体验和工具的范围:
Visual Studio – 任何应用,任何开发者
Visual Studio 工具和服务家族现在支持跨多个平台的异构软件开发。产品中使用开源工具的体验已经得到了极大的提升。开源解决方案被赋予了首等公民的地位,更多的这些解决方案被预先打包进产品中。这清楚地表明微软希望成为每位开发者的首选平台,无论技术或平台如何。Visual Studio 工具家族中的工具和服务之间存在着巨大的重叠。本书完全聚焦于 Visual Studio Team Foundation Server 2015。
Microsoft Visual Studio Team Foundation Server 2015 是微软 ALM 解决方案的核心,提供了版本控制、工作项跟踪、报告和自动化构建等核心服务。TFS 帮助组织在设计、构建、测试和部署软件的整个过程中更有效地沟通与协作,最终提高生产力和团队产出、改善质量,并为应用程序生命周期提供更大的可视性。
在过去十年里,软件交付本身经历了一场革命。敏捷实践和精益框架的引入,如 Scrum、Kanban、XP 和 RUP 等,证明了迭代反馈驱动的开发有助于应对市场、业务和用户需求的变化。精益流程还帮助最大限度地减少浪费,并最大化向最终用户交付的价值。更好的 DevOps 实践,鼓励持续集成、持续部署、持续交付和持续反馈,并配合更好的工具,正在帮助组织打破团队之间的孤岛。关键任务应用程序仍可能选择使用瀑布模型交付,而某些业务线应用程序则可能选择精益方法论获得更大的成功。这并没有绝对的对与错;选择最适合您交付场景的过程和工具。Visual Studio TFS 默认支持大多数流程,并且为您提供了定制和定义最适合您组织的流程的灵活性。
Visual Studio Team Foundation Server 2015,本书中以下简称为 TFS,是微软提供的本地部署的 ALM 工具。微软还提供了一个名为 Visual Studio Team Services (VSTS) 的云托管服务。不要将 VSTS 与 Visual Studio IDE 在云端混淆;它实际上是一个开发者服务集合,类似于 TFS,运行在微软 Azure 上,扩展了云端的开发体验。微软对其托管服务非常重视,并已将其迁移到 3 周一次的发布节奏。所有功能首先在 VSTS 中发布,然后通过季度更新将大部分功能引入 TFS。已发布功能及未来计划发布的功能时间表可以在www.visualstudio.com/en-us/news/release-archive-vso.aspx
查看。产品团队通过用户反馈征集新功能请求。如果你有一个迫切的功能想法,务必在visualstudio.uservoice.com/forums/121579-visual-studio-2015
提交你的请求。VSTS 目前提供许多企业级功能,如保证的正常运行时间、使用 ADFS 和 AAD 的单一登录,以及通过在这些地区托管租户来遵守美国、欧洲和澳大利亚的数据主权法律。尽管 VSTS 自豪地拥有超过 300 万活跃用户,但需要对环境和数据拥有更多控制权的组织仍然更喜欢 TFS 而非 VSTS。
注意
本书中的所有示例都适用于 TFS;然而,由于 VSTS 与 TFS 之间有很多重叠,书中大部分内容也适用于 VSTS。
可以用来连接 TFS 的各种客户端大致可分为两类——主要客户端和特定任务客户端,如下图所示。有关这些客户端可以执行的功能的完整列表,请参见msdn.microsoft.com/en-us/library/ms181304.aspx
。
如果你正在为个人使用或评估核心功能(如版本控制、构建和工作项跟踪)设置 TFS,建议使用 TFS Express。它是免费的,设置简单,且可以安装在客户端和服务器操作系统上。Express 不支持与 SharePoint 或 Reporting Services 的集成。如果你为组织设置 TFS,请使用 TFS 的标准版本。你可以在单台计算机、双服务器配置或多服务器配置中设置 TFS。使用以下便捷参考检查 TFS 2015 的兼容性矩阵:
msdn.microsoft.com/Library/vs/alm/TFS/administer/requirements
TFS 架构设置及网络和端口要求可以在msdn.microsoft.com/en-us/library/ms252473(v=vs.120).aspx
找到。产品设置文档可以在msdn.microsoft.com/en-us/Library/vs/alm/TFS/setup/overview
找到。ALM Rangers 提供的规划和灾难恢复指南(vsarplanningguide.codeplex.com/
)对于规划企业级 TFS 设置非常有帮助。TFS 2015 特定的许可证更新将在第一章,团队项目设置中的分配许可证、添加用户并审计用户访问配方中讲解。要了解更多关于 TFS 许可证要求的信息,请阅读www.microsoft.com/en-gb/download/details.aspx?id=13350
上的 Visual Studio 和 MSDN 授权白皮书。
本书中的配方要求使用标准的单机 TFS 设置。你可以使用前述安装说明设置一个独立的单服务器,或者选择使用预配置的 TFS 2015 虚拟机。下载并设置该虚拟机的说明可以在vsalmvm.azurewebsites.net/
找到。
本书内容
第一章,团队项目设置,介绍了团队项目,这是一个逻辑容器,将与软件应用程序相关的所有工具和工件隔离并组合在一个命名空间中。欢迎页面、仪表板、团队房间等功能,能够更好地促进团队内的协作,而重命名团队项目和脚本化团队项目创建的功能,则使你能够更好地管理团队项目。在本章中,我们将学习团队项目的不同功能,并了解如何设置这些功能,以充分利用它们的潜力。
第二章,设置和管理代码库,介绍了 TFS,它是唯一提供集中式和分布式版本控制系统的产品。在本章中,我们将学习如何在一个项目中设置 TFVC 和 Git 代码库,以及如何通过在开发工作流中执行代码审查和代码分析来解决技术债务。
第三章,规划和跟踪工作,解释了那些已实现但从未使用的需求,或者那些使用过短暂时间后发现无法满足用户需求的需求,这会导致浪费、返工和不满。在这一章中,我们将学习如何设置和定制多个待办事项、看板和冲刺任务板。我们还将学习如何使用服务钩子与外部规划工具集成,并通过利用 TFS 中的反馈功能改进反馈循环。
第四章,构建你的应用程序,介绍了新的构建系统(TFBuild),它是一个跨平台、开放且可扩展的基于任务的执行系统,具有丰富的 Web 界面,允许构建的创建、排队和监控。在这一章中,我们将学习如何设置和使用 TFBuild 进行持续集成。我们还将学习如何将 TFBuild 与 SonarQube 和 GitHub 集成。我们还将回顾帮助为软件的持续交付奠定基础的功能。
第五章,测试你的应用程序,指出低质量的软件是不可接受的。但你可能会问:“什么是合适的质量水平?”在这一章中,我们将学习如何使用 TFS 中可用的测试工具进行规划、跟踪和自动化。我们还将学习如何利用新的构建系统将非微软测试框架(如 Selenium 和 NUnit)集成到自动化测试工作流中。
第六章,发布你的应用程序,解释了 TFS 中基于 Web 的新发布管理器,该管理器使用与 TFBuild 提供的相同代理和任务基础设施。在这一章中,我们将学习如何使用发布管道设置、安全性设置并部署到多个环境。我们还将学习如何跟踪和报告通过发布管道交付的发布版本。本章中的技巧使您能够为持续交付设置软件。
第七章,管理 Team Foundation Server,教你如何更新、维护和优化 TFS,从而实现地理分布团队的高可用性,并减少管理开销。
第八章,扩展和自定义 Team Foundation Server,解释了组织通常会有不同的工具来管理生命周期的不同部分,例如,使用 Jira 进行敏捷项目管理,使用 TeamCity 进行构建,使用 Jenkins 进行发布管理,使用 ServiceNow 进行服务管理。本章将介绍 TFS 对象模型和 TFS REST API,帮助你通过编程访问和集成系统。本章还将讲解如何通过利用过程模板定制来定制团队项目。
本书所需内容
本书中的食谱基于 Team Foundation Server 2015。所有食谱都已经在 TFS 2015 Update 1 环境中进行过测试。为了实践这些食谱,你需要一个安装了 Visual Studio 2015 的 Team Foundation Server 2015 工作环境。
本书的目标读者
本书适合所有软件专业人士,包括开发人员、测试人员、架构师、经理以及正在使用或计划使用 TFS 的配置分析师。
本书涵盖了 Team Foundation Server 2015 的功能,包括团队项目、源代码控制、工作项、构建、测试、发布、管理、扩展性和自定义,重点讨论 DevOps 和 ALM 相关的主题。
本书提供了针对 Scrum 团队的实用食谱,帮助他们利用 TFS 的新功能和现有功能,实现更快、更高质量的软件持续交付。本书不仅涵盖理论概念,每个食谱采用食谱格式,呈现问题、解决方案和解释,将你直接带入现实世界的实践场景。
本书假设你已具备 Team Foundation Server 2015 的工作环境,并对 TFS、软件开发生命周期和 Scrum 框架有基本了解。
章节
本书中,你将发现多个经常出现的标题(准备工作、操作方法、工作原理、更多内容、另见)。
为了清楚地指导你如何完成一个食谱,我们使用以下几种结构:
准备工作
本节将告诉你如何理解本食谱的内容,并描述为该食谱设置所需的软件或其他初步设置。
如何操作…
本节包含完成食谱所需的步骤。
它是如何工作的…
本节通常包括对上一节发生内容的详细解释。
还有更多…
本节提供关于食谱的额外信息,旨在让读者更深入了解该食谱。
另见
本节提供了有用的链接,指向与本食谱相关的其他有用信息。
约定
在本书中,你将看到多种文本样式,用于区分不同类型的信息。以下是这些样式的一些示例及其含义的解释。
文本中的代码词、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 用户名如下所示:“tfsdeleteproject
命令分两阶段执行删除。”
代码块如下所示:
# User-specific files*.suo*.user*.sln.docstates# Specific files *.txt# Build results[Dd]ebug/[Rr]elease/
所有命令行输入或输出将如下所示:
refs/heads/master, TF402455: Pushes to this branch are not permitted; you must use pull requests to commit changes.
新术语和重要词汇以粗体显示。您在屏幕上看到的词汇,例如在菜单或对话框中,出现在文本中如下所示:“从项目和我的团队子菜单中,点击新建团队项目…”。
注意
警告或重要提示会以类似这样的框显示。
提示
小贴士和技巧会像这样显示。
读者反馈
我们始终欢迎读者反馈。请告诉我们您对这本书的看法——您喜欢或不喜欢的地方。读者反馈对我们来说非常重要,因为它帮助我们开发出能真正满足您需求的书籍。
如需向我们发送一般反馈,请通过电子邮件发送至,并在邮件主题中注明书名。
如果您在某个领域拥有专业知识,并且有兴趣撰写或参与编写书籍,请查看我们的作者指南:www.packtpub.com/authors。
客户支持
现在,作为一本 Packt 书籍的自豪拥有者,我们提供一些帮助,帮助您充分利用您的购买。
下载示例代码
您可以从您的帐户中下载所有 Packt 出版的书籍的示例代码文件,网址是www.packtpub.com
。如果您是从其他地方购买的本书,您可以访问www.packtpub.com/support
,并注册以直接通过电子邮件获得文件。
勘误
尽管我们已尽力确保内容的准确性,但错误仍然会发生。如果您在我们的书籍中发现错误——可能是文本或代码中的错误——我们将非常感激您能报告给我们。这样,您可以帮助其他读者避免困扰,并帮助我们改进后续版本。如果您发现勘误,请访问www.packtpub.com/submit-errata
提交,选择您的书籍,点击勘误提交表单链接,并输入勘误的详细信息。一旦您的勘误得到验证,我们将接受您的提交,并将勘误上传至我们的网站,或添加到该书名的勘误列表中。
要查看之前提交的勘误,请访问www.packtpub.com/books/content/support
,并在搜索框中输入书名。所需的信息将显示在勘误部分。
盗版
互联网版权侵犯问题是所有媒体面临的持续性问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现我们作品的任何非法复制品,请立即提供其位置地址或网站名称,以便我们采取补救措施。
请通过联系我们,并提供涉嫌侵权内容的链接。
我们感谢您的帮助,保护我们的作者和我们为您带来有价值内容的能力。
问题
如果您在本书的任何方面遇到问题,可以通过与我们联系,我们将尽力解决问题。
第一章:Team Project 设置
本章将涵盖:
-
使用 Team Explorer 连接到 TFS
-
在 TFS 中设置用户配置文件
-
使用 Scrum 模板创建 Team Project
-
分配许可证、添加用户并审计用户访问
-
配置 Team Project 中的仪表板
-
为 Team Project 设置欢迎页面
-
创建并设置 Team Room
-
重命名 Team Project
-
通过命令行创建新的 Team Project
-
删除 Team Project
介绍
Microsoft Visual Studio Team Foundation Server 提供了一套集成工具,帮助团队有效管理其软件项目的生命周期。Team Foundation Server 中的 Team 被封装在 Team Project 的容器内。简而言之,Team Project 是一个逻辑容器,将与软件应用程序相关的所有工具和工件隔离在一个单一的命名空间中。
通过 Team Project 引入的概念边界消除了访问与应用程序开发无关的工件(如代码、工作项或发布信息)的问题。相关的 Team Projects 可以被分组到一个 Team Project Collection 中。它可以通过将这些相关的 Team Projects 托管在不同的数据库中,来实现物理上的分离。
Team Foundation Server 支持多个 Team Project Collections,每个集合可以内部托管多个 Team Projects。资源如构建池在 Team Project Collection 级别进行作用域设置。一个 Team Project 可以托管多个 Team;某些资源在 Team Project 级别设置,其他则在 Team 级别设置。如以下截图所示,源代码管理库(TFVC 或 Git)的选择是在 Team Project 级别进行的;然而,团队在选择待办事项清单和看板上的工作流程时具有自主权。所选的交付框架通过 Process Template 应用;它进一步应用特定交付框架的术语、工件和工作流程到 Team Project 以及其中的所有 Teams:
TFS 报告仓库是一个传统的数据仓库,由一个按近似星型架构组织的关系型数据库和构建在关系型数据库上的 SQL Server Analysis Services 数据立方体组成。所有的 Team Projects,不论它们属于哪个 Team Project Collection,都被汇总到一个单一的数据仓库中。
Team Foundation Server 提供了一个层次化的安全模型。权限可以通过 TFS 组或 AD 组成员身份在每个层级上进行设置,从服务器到对象层级。组可以嵌套,并设置为通过层次结构继承权限。权限继承可以设置为拒绝,以控制对选定资源的访问。有关预创建组的详细信息,包括访问权限和权限细节,可以在bit.ly/1PPaU6l
找到。
权限可以用于限制对 Team 项目内部或项目之间资源的访问,Team 项目集合则提供了完全的隔离。Team 项目集合还提供了其他功能和技术上的优势,例如:
-
在多个部门之间使用单一的 TFS 实例,同时仍能提供一定程度的隔离。集合也可以用来反映组织结构。
-
备份和恢复的灵活性。这可以减少停机时间,因为恢复一个集合不会影响其他集合的用户。
-
通过将集合移动到单独的 SQL Server 实例上实现可扩展性和负载均衡。
在本章中,我们将讨论管理和过程模板的内容;这些主题将在后续章节中详细讨论。本章的重点是创建和设置 Team 项目的各个元素。
使用 Team Explorer 连接到 TFS
要构建、测试、跟踪或发布你的软件,你需要将你选择的客户端连接到 Team Foundation Server。作为软件开发人员,你将花费大量时间在 Visual Studio IDE 中。无论是将代码存储在 TFS Git 仓库中还是使用 TFVC 源代码管理,你都需要将 IDE 连接到 TFS 来与代码交互。在本节中,你将学习如何使用 Team Explorer 连接到 TFS。
准备工作
如果你已经安装了任何 Visual Studio 2015 版本,你已经拥有 Team Explorer。对于 TFS 2015,不再提供单独安装 Team Explorer 的选项;你至少需要安装 Visual Studio Community 来获得 Team Explorer。
注意
要通过任何 Office 产品连接到 TFS,你可以安装 TFS Office 集成安装程序:bit.ly/1k3wh7p
。你可以在bit.ly/1Grh3DS
了解更多关于 TFS Office 集成安装程序的好处。
当你第一次启动 Visual Studio 时,你将被要求使用 Microsoft 账户登录,如 Live、Hotmail 或 Outlook,并提供一些基本的注册信息。选择一个最能代表你的 Microsoft 账户。如果你已有 MSDN 账户,建议使用其关联的 Microsoft 账户登录。如果你没有 Microsoft 账户,可以免费创建一个。登录有多种好处,如在多台机器之间同步 Visual Studio 设置。虽然建议登录,但并非强制要求。
如何操作…
-
打开 Visual Studio 2015。
-
点击团队工具栏,选择管理连接…:
-
在 Team Explorer 中,点击管理连接超链接,选择连接到团队项目:
-
在连接到 Team Foundation Server窗口中,下拉菜单显示你以前连接过的所有 TFS 服务器。如果在下拉菜单中看不到你想连接的服务器,点击**服务器…输入 Team Foundation Server 的详细信息。点击添加…**并输入你的 TFS 服务器的详细信息。你可能需要输入登录凭据以便与服务器进行身份验证。
-
经身份验证的用户详情和服务器详情将在连接到 Team Foundation Server窗口中更新。点击连接按钮完成操作。
-
现在,你应该已成功通过 Team Explorer 连接到 TFS:
工作原理…
现在 Visual Studio 附带 GitHub 连接器。现在,Team Explorer 中的管理连接对话框不仅允许你连接到 TFS 和 VSO,还可以连接到 GitHub。这是 Microsoft 通过为非 Microsoft 产品提供无缝集成,展示其拥抱开源的一个很好的例子。
注意
如果你是 GitHub 免费账户用户,你将只能在 Visual Studio 中绑定一个账户,这是 GitHub 限制的。GitHub 企业用户可以从 Team Explorer 2015 中映射多个账户。
如果你在是否使用 Microsoft 账户登录 Visual Studio 上有些犹豫,权衡以下好处:
-
同步你的 Visual Studio 设置:当你在任何其他设备上登录 Visual Studio 时,Visual Studio 的设置(如快捷键绑定和颜色主题)会立即应用。
-
延长试用期:如果你没有 Visual Studio 许可证,通过登录,你可以将 Visual Studio Professional 或 Enterprise 的试用期从 30 天延长至 120 天。
-
解锁 Visual Studio:如果你的 Microsoft 账户与 MSDN 账户相关联,你的 Visual Studio 副本将自动解锁。
如果你不想同步设置,可以禁用此功能。在工具菜单中,选择选项。在环境下查找同步设置,然后取消选中以下截图所示的选项:
在 TFS 中设置你的用户资料
Team Foundation Server 允许你通过选择自己的设置来自定义体验。每个 TFS 用户都通过登录拥有一个个人资料。在本教程中,你将学习如何在 TFS 中自定义你的个人资料。
如何操作…
-
打开 Team Portal,导航至
http://tfs2015:8080/tfs/
。 -
右上角包含登录用户的名称。点击该名称可以打开用户个人资料控制,如下图所示:
-
点击我的个人资料以查看和自定义您的个人资料。我们先浏览一下常规设置。
-
要更改个人资料图片,点击更改图片超链接,选择一个小于 4MB 的图片,然后点击保存更改。
-
要更改显示名称,点击编辑超链接,将名称从Tarun更改为
Tarun Arora
,然后按回车。 -
要更改首选电子邮件,点击编辑超链接,将电子邮件地址更改为
tarun.arora@outlook.com
,然后按回车。 -
UI 设置字段可以通过从下拉菜单中选择高对比度主题来从默认设置更改为高对比度:
-
点击地区设置标签,切换到地区设置页面。从这里可以更改语言和时区设置。
它是如何工作的…
用户个人资料设置仅适用于个人;这些设置不会影响其他用户。您的个人资料现在应包含图片、显示名称、首选电子邮件地址以及您选择的主题。您为工作项、构建和代码审查配置的任何提醒将发送到您的首选电子邮件地址。
TFS 中的时区设置将覆盖机器的时区设置。例如,如果您的机器在 UTC + 1 时区,但您的个人资料配置为 UTC + 5:30,创建一个新的工作项时,工作项中的创建时间将是 UTC + 5:30,而不是 UTC + 1。
注意
在团队基础服务器中,有些功能受托管团队基础服务器时区设置的影响。例如,如果您的团队基础服务器托管在美国华盛顿,而您的分布式团队部分位于印度德里,则当前冲刺将根据华盛顿时间的当天结束来结束。
当个人资料在团队项目范围内打开时,您将在个人资料菜单中看到我的提醒选项。提醒功能允许您在团队项目内发生某些事件时配置电子邮件通知。例如,构建完成、工作项分配等。
点击我的提醒将启动管理您的 TFS 提醒的窗口。在此窗口中,您可以管理基本提醒和自定义提醒。提醒可以通过条件进行自定义。该窗口还包含一个链接,指向高级提醒管理页面,可以用来管理团队提醒。
使用 Scrum 模板创建团队项目
在 TFS 中,团队项目是一个逻辑容器,用于存储工作项、代码、构建和发布等工件。不同的团队遵循不同的流程来组织、管理和跟踪工作。TFS 通过过程模板允许指定流程。系统默认提供了 Scrum、Agile 和 CMMI 模板。过程模板定义了可以用于规划和跟踪项目的工作项类型、查询和报告集合。在本教程中,您将学习如何使用 Scrum 模板创建新的团队项目。
准备工作
无法通过团队门户创建团队项目;在本教程中,我们将使用 Team Explorer 来创建一个新的团队项目。如果您还没有连接 Team Explorer 到 TFS,请参考 使用 Team Explorer 连接到 TFS 教程,了解如何进行连接。
要创建新的团队项目,您需要以下权限:
-
创建新项目权限:通过成为 项目集合管理员 组的成员,您继承此权限。Team Foundation 管理员全局组 也包括此权限。
-
创建新团队站点权限:此权限通过将用户添加到具有 SharePoint 站点集合完全控制权限的 SharePoint 组中来授予。如果您决定不在团队项目创建过程中创建 SharePoint 站点,则不需要此权限。
为了使用 SQL Server 报告服务,您必须是报告服务中 Team Foundation 内容管理角色的成员。
注意
要验证是否拥有正确的权限,您可以从 CodePlex 下载 Team Foundation Server 管理工具,网址为
tfsadmin.codeplex.com/
。TFS Admin 是一个开源工具,采用 Microsoft 公共许可证(Ms-PL)发布。
如何操作…
-
打开 Visual Studio 2015,并将 Team Explorer 连接到 TFS:
-
在 项目和我的团队 子菜单中,点击 新建团队项目…。这将弹出新团队项目创建向导:
-
输入团队项目名称和描述,然后点击 下一步 按钮:
-
选择 Scrum 过程模板并点击 下一步。这是您在团队项目创建过程中可能做出的最重要的决定之一。了解有关不同过程模板的更多信息,访问
msdn.microsoft.com/library/vs/alm/work/guidance/choose-process
。 -
选择 创建一个新的 SharePoint 站点 选项。点击 配置… 来指定新站点的位置。如果没有 SharePoint 集成,选择不配置 SharePoint 站点的选项。
-
这个源代码管理选择界面呈现了在团队项目创建过程中,你将被要求做出的第二个最重要的决策。TFS 支持集中式(TFVC)和分布式(Git)源代码控制系统。在第二章,设置与管理代码仓库中,我们将深入讨论这两种源代码控制类型。选择 Team Foundation Version Control 并点击 下一步:
-
在你查看设置后,点击 完成 以开始团队项目创建过程:
-
一旦团队项目创建完成,你将在表单上看到完成状态。点击 查看团队项目创建日志 超链接(我们将在 它是如何工作的… 部分讨论日志内容)。
-
Team Explorer 现在已更新为新创建的团队项目的详细信息:
它是如何工作的…
过程模板定义了一组将用于规划和跟踪项目的工作项类型和报告。过程模板还应用了工作项工作流和状态转换。让我们来看看现成模板之间的主要区别:
-
Scrum 模板旨在支持 Scrum 组织定义的 Scrum 框架。此过程模板在与产品待办事项项目相同的级别上跟踪缺陷,并使用努力字段来跟踪估算。
-
Agile 模板旨在支持不希望被 Scrum 限制的团队的敏捷开发。它通过使用故事点来估算用户故事。任务包含用于跟踪原始估算、剩余工作和已完成工作的字段。虽然最初 Agile 模板不允许在任何待办事项页面上进行缺陷跟踪,但现在可以通过团队门户中的团队设置进行配置。
-
CMMI 模板旨在支持正式的变更管理过程。此模板通过 Size 字段支持估算的需求。任务包含用于跟踪原始估算、剩余工作和已完成工作的字段。
现成的模板旨在满足大多数团队的需求。它们都支持使用敏捷规划工具创建产品待办事项,并在任务板上以冲刺的方式进行工作。如果你的团队有不同的需求,你可以自定义一个模板并创建团队项目,或者你可以从模板创建一个团队项目,然后对项目进行自定义。
你可以通过进入 设置 视图中的团队资源管理器的过程模板管理器来下载过程模板。有关如何下载过程模板的更多说明,请参阅msdn.microsoft.com/Library/vs/alm/Work/guidance/manage-process-templates
。
打开 ProcessTemplate.xml
文件(位于之前下载的路径);您会注意到它遵循一种 XML 结构,构建了一系列插件和设置插件的指令。主模板与由其他 XML 结构定义的子模块相关联。在以下表示中,您将看到这些 XML 模板与项目创建工作流生成的仪表之间的关联。有关流程模板自定义的详细信息,请参阅第八章,扩展和自定义 Team Foundation Server。
在团队项目创建过程中,以下项目会为您创建:
-
代码仓库:根据您的选择,已配置一个代码仓库。
-
团队:为团队项目创建一个与项目同名的默认团队。
-
区域路径:为团队创建一个与团队同名的默认区域路径。团队的待办事项列表配置为显示分配给此区域路径的工作项。
-
迭代路径:为团队预先创建了一组迭代。
-
团队门户:团队门户允许团队成员连接到 TFS 以管理源代码、工作项、构建和测试工作。
-
团队房间:为团队创建一个与团队同名的房间。团队房间用于协作。
如果您的 Team Foundation Server 配置为支持 SharePoint 项目门户和报告,您将在 Team Explorer 中看到 文档和报告 中心。文档视图提供与 SharePoint 项目门户的深度集成。这允许您创建文档库并与团队成员组织和共享文档。报告视图为您提供了一组预先创建的 SSRS 报告,您可以使用它们来跟踪和管理团队工作进展:
分配许可证、添加用户以及审计用户访问
Scrum 团队由产品负责人、开发团队和 Scrum Master 组成。虽然您的利益相关者不是 Scrum 团队的一部分,但他们需要看到产品待办事项列表。Scrum 团队是跨职能的,具备覆盖设计、开发、测试和增量部署的技能。从工具的角度来看,团队中的每个成员可能不需要相同的 TFS 访问权限。
TFS 提供三种访问级别:利益相关者、基本和高级。所需的 TFS 许可证在此列出:
在过去的一年里,产品授权已经显著简化。TFS 2015 和现在的 TFS 2015 更新 1 引入了一些关键的授权变更:
-
TFS CAL 许可证已被更改,以包含更多 TFS 功能的访问权限:
-
敏捷规划:TFS 2015 Web 访问中的所有待办事项管理和冲刺规划功能现在对任何拥有 TFS CAL 的用户开放。
-
图表创作:图表创作功能及将图表固定/分享至项目主页的功能现在可以通过 CAL 使用。
-
团队房间:团队房间现在在 TFS 2015 中通过 CAL 可用。
-
测试中心:在 TFS 2015 中,基于 Web 的测试体验(用于用户验收测试,如场景测试)现在在 TFS CAL 中可用。
-
-
购买 Visual Studio Team Services、Professional 或 Advanced 许可证时,您将获得一个免费的 TFS CAL 许可证,适用于该命名用户。这带来了几个优势:
-
现在,您可以“租赁” TFS CAL。您无需一次性支付 499 美元(列价)的许可证费用,而是可以按月支付较低的费用,按需使用。
-
使用供应商/承包商的公司现在有了一种简单的方式来管理需要临时访问其 TFS 的人员。
-
CAL 是“始终保持最新”。因为它是订阅制,而非一次性购买,所以当新的 TFS 版本发布时,您无需处理购买/续订 CAL 的问题。与 VS Online 许可证捆绑的 CAL 可与任何 TFS 版本兼容,而传统购买的 CAL 仅支持特定 TFS 版本及其早期版本。
访问级别和角色是 TFS 中两个独立的概念。访问级别决定了您有权使用哪些功能,而角色决定了权限。例如,基本许可证的访问级别包括源代码管理权限;但是,如果您是只读角色,您将无法编辑源代码。
团队基础服务器的访问级别与软件项目中的典型角色及其所执行的活动密切相关。以下表格总结了特性与访问级别的映射关系。因此,项目支持人员只需一个利益相关者许可证,项目经理或开发人员需要一个基本许可证,测试人员或项目组合经理则需要一个高级许可证。
特性 利益相关者 基本 高级 查看和编辑所有工作项 是 是 是 标准功能 是 是 是 敏捷看板 是 是 是 基本的待办事项和冲刺规划工具 是 是 是 图表查看 是 是 是 图表创作 是 是 代码 是 是 构建 是 是 请求和管理反馈 是 基于 Web 的测试执行 是 是 基于 Web 的测试用例管理 是 团队房间 是 是 管理账户 是 是 高级主页 是 是 高级待办事项和冲刺规划工具 是 是 高级投资组合管理 是 是 分析测试结果并管理机器组 是 是 拥有利益相关者访问权限的用户可以创建和修改所有工作项,并在
我的查询
文件夹下创建并保存所有工作项的查询。(与有限访问权限不同,有限访问权限下用户只能创建和修改自己创建的工作项,并查询和查看自己创建的工作项。)此外,利益相关者还可以使用团队基础客户端(如 Microsoft Excel、Microsoft Project 和 Microsoft Feedback Client)创建和修改工作项。 -
-
标准功能包括访问首页和工作中心。
-
可以查看待办事项页面和看板,并通过快速添加面板(显示在列表底部)添加工作项,但不能在页面上移动项或使用其他功能。
-
可以查看冲刺页面和任务板,并添加工作项,但不能使用其他冲刺计划工具功能。
要在 TFS 中设置新用户,用户首先需要分配一个许可证,然后添加到一个团队中。在本篇教程中,你将学习如何分配许可证并添加成员到团队,同时还将学习如何审核 TFS 中的用户访问权限。
准备工作
在本篇教程中,我们将分配许可证和权限给 FabrikamTFVC 团队项目中的以下用户。
TFS2015\\JohnS
TFS2015\\BrianM
TFS2015\\AaronC
TFS2015\\WillyP
TFS2015\\AnnuA
TFS2015\\TomH
TFS2015\\ChrisW
若要将新用户添加到访问级别,你需要是集合管理员。要将新用户添加到团队项目中,你需要是项目管理员;如果你还不是管理员,请安排加入这些组。
如何操作…
分配用户许可证:
-
登录到团队门户并通过访问
http://tfs2015:8080/tfs/_admin/_licenses
浏览到访问级别管理界面: -
从左侧面板中,点击Stakeholder访问。在右侧面板中,点击添加按钮,并选择添加 Windows 用户或组。在添加新用户或组窗口中,输入用户详细信息为TFS2015\\JohnS,然后点击确定按钮:
重复此步骤,将所有用户添加到获取准备部分中指定的访问级别的用户表中。此时,你应该已经有一个 Stakeholder、三个 Basic 和三个 Advanced 用户。
向项目中添加用户:
-
有两种方法可以将用户添加到团队项目。第一种方法是通过浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_admin/_security
,导航到 FabrikamTFVC 项目的安全屏幕。在左侧面板中,点击贡献者组,在右侧面板中,点击成员标签,并点击添加…按钮以添加 Windows 用户或组。输入用户详细信息并点击确定: -
另一种方式是通过浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC
,导航到 FabrikamTFVC 项目主页。在成员小部件中,点击管理…,在管理 FABRIKAMTFVC 团队成员窗口中,输入用户详细信息并点击确定。重复这些步骤,以添加“入门”部分用户表中列出的其他用户。注意
在 TFS 中管理用户要简单得多,如果你为他们创建 Windows 或 Active Directory 组。如果你决定在 TFS 中使用 Active Directory 组,建议创建专门用于 TFS 用户管理的组。
审核用户访问
在接下来的几步中,您将学习如何提取审核日志,跟踪用户和组的最后登录时间及其访问类型:
-
通过浏览
http://tfs2015:8080/tfs/_admin/_licenses
,进入团队 Web 访问中的访问级别屏幕。 -
从左侧导航中,点击导出审核日志。打开下载的 CSV 文件;我们将在*如何工作…*部分中深入探讨。
如何工作…
默认的访问级别分配给通过团队项目安全或成员屏幕直接添加的用户。建议将默认访问级别设置为基础。如果用户被分配到多个访问级别,最高级别始终优先。
接下来,让我们查看审核日志,将data.csv
导入到 Excel 中。你应该能看到类似于以下截图的视图。**最后访问时间(UTC)**列告诉你用户是否访问过 TFS;对于没有访问过 TFS 的用户,你无需为其支付许可费用。
在团队项目中配置仪表板
团队门户主页传统上用于固定图表、工作项计数和构建状态小部件,以便团队成员和利益相关者可以一目了然地查看项目。由于主页具有硬编码的小部件,您被强制在页面上使用它们,因此这种方式效果不佳。此外,页面不支持小部件的分组或添加注释来补充小部件中的可视内容。在 TFS 2015 Update 1 中,主页被一个新功能仪表板取代。这个新功能提供了一个小部件库,可以用来为你的团队创建多个仪表板。在本教程中,您将学习如何使用小部件目录创建仪表板。
准备开始
要获得权限,你需要成为团队管理员才能创建仪表板。只有团队管理员才能创建、定制和移动仪表板上的小部件。查看仪表板不需要任何特殊权限。所有有权限访问团队门户的团队成员都可以查看和与仪表板进行交互。
团队门户主页已经被概览仪表板所取代。主页上的所有现有小部件都已迁移到概览仪表板中。要查看概览仪表板,请通过浏览http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_dashboards
进入 FabrikamTFVC 团队门户。
如何操作…
-
在 FabrikamTFVC 团队门户中,点击**+**图标以创建新的仪表板。为仪表板命名为
团队更新
: -
从页面的右下角,点击大绿色圆圈以启动仪表板小部件库。从小部件库中,添加代码小部件:
-
小部件添加到仪表板后,点击该小部件进行配置。将名称设置为
所有代码更改
,并将代码路径设置为$/FabrikamTFVC
。该小部件将显示过去 7 天内源路径$/FabrikamTFVC
下的代码更改计数。点击保存以提交配置更改: -
接下来,从小部件库中添加查询小部件。选择已阻止的任务查询,将查询结果映射到小部件中进行显示。如果计数大于或等于 1,请将背景颜色配置为红色:
根据工作项查询返回的工作项计数,格式化小部件的背景颜色
-
添加Markdown小部件。该小部件能够渲染 Markdown;小部件的大小可以调整为不同的尺寸。选择3 x 2大小,并添加如以下截图所示的注释:
-
画廊中有其他小组件,如工作项查询结果、新建工作项、团队聊天室、Sprint 容量、燃尽图等链接;这些也可以添加到仪表板中。目前没有用于图表的小组件。可以通过工作中心的图表视图添加图表,关于这一点将在 第三章的 使用工作项查询创建图表 章节中详细讲解。
它是如何工作的…
仪表板提供了一种很好的方式来创建信息辐射器,向团队成员和外部利益相关者共享信息。小组件在仪表板中呈现为瓦片,这些瓦片使用 TFS REST API 从 TFS 中检索信息。信息通过小组件提供的模板加载到瓦片中。瓦片可以在仪表板上移动,并调整大小。瓦片支持交互性,例如点击 查询 瓦片将直接进入 工作项查询 窗口。目前,瓦片之间尚不支持跨瓦片交互。虽然可以创建多个仪表板,但目前无法为单个仪表板应用访问权限。预计在长期内,更多的小组件将被添加到小组件库中,API 将开放,以扩展和创建新的小组件。
设置团队项目的欢迎页面
仅通过团队项目的名称或描述很难总结出其目标。软件团队通常会创建介绍文档或 README 文件来总结项目的目的,并提供其他有用的参考材料。传统上,团队会将这些文件存储在 SharePoint 中。当这些信息与团队项目的上下文结合起来时,它会更加有用。一种名为 项目欢迎 页面的新特性为此提供了完美的解决方案。在这个示例中,你将学习如何使用 markdown 文件设置欢迎页面。
准备工作
项目欢迎页面是通过一种非常简单的基于约定的方法创建的。欢迎页面仅渲染已检查入项目源代码管理的 markdown 文件。
注意
对于基于 TFVC 的源代码管理,readme.md
文件需要位于团队项目文件夹的根目录下。对于基于 Git 的源代码管理,readme.md
文件需要位于默认分支的仓库根目录下。
团队项目欢迎页面要求底层文件以 markdown 格式编写。Markdown 旨在便于阅读和编写,主要强调可读性。TFS 在团队门户中提供了一个 markdown 编辑器,帮助你编写欢迎页面。你也可以选择使用桌面编辑器编写 markdown 文件。
如何操作…
-
打开团队网页访问并导航到 FabrikamTFVC 团队项目
http://tfs2015:8080/tfs/DefaultCollection/Recipes
。 -
在首页中心,选择欢迎视图并点击编辑以开始编辑
readme.md
文件。 -
将 Markdown 片段复制到编辑器中:
# Welcome to the FabrikamTFVC----------The team project contains the resources for the Fabrikam Software & Services. ## Contacts---* Project Owner - Tarun Arora [@arora_tarun](https://twitter.com/arora_tarun)## Definition of Done All product backlog items need to abide to the definition of done before they can be marked done 1\\. All source code is checked in 2\\. All code passes CI & no failing unit tests 3\\. Business services code coverage of > 60% 4\\. All changes have been tested 5\\. Deployment script added & updated 6\\. Demo to Product Owner 7\\. All associated tasks must be completed ## Definition of Bug*Work in progress*
-
在最右侧的工具栏中,你会看到显示内容预览图标。点击预览图标,欢迎页面将会以 Markdown 形式呈现:
-
点击保存图标,将
readme.md
文件提交到版本控制系统。
工作原理…
TFS 支持常见的 Markdown 规范和 GitHub 风格的扩展。
提示
你可以在bit.ly/1jJjRlI
了解更多关于 Markdown 语法的内容。
你可以在bit.ly/1jJl38D
了解更多关于GitHub-Flavored-Markdown的信息。
为简化 Markdown 内容的创建和编辑,Team Foundation Server 允许你通过绝对路径和相对路径链接到其他 Markdown 文件。当 Markdown 渲染为 HTML 时,所有标题都会自动生成 ID,因此你可以使用以下约定通过标题 ID 链接到标题:显示文本。
TFS 还允许你引用一个尚不存在的 Markdown 页面;引擎足够智能,当你点击引用的链接时,会给你一个创建该页面的选项。你可以使用以下 Markdown 格式来实现:new page
。
创建和设置 Team Room
协作是任何项目交付成功的关键。虽然有很多方式可以与团队成员协作,但要将这些对话追溯到工作内容的上下文中是非常困难的。TFS 提供了一个名为 Team Room 的协作中心,使得追踪工作、项目更新和团队协作变得容易。在本教程中,你将学习如何创建、设置和使用 Team Room。
准备就绪
所需权限:项目管理员组可以创建并管理他们所创建的 Team Rooms。团队管理员只能管理他们所管理的 Team 的 Team Rooms。
访问 Team Rooms 需要许可证:只有 Basic 和 Advanced 许可证的用户可以访问 Team Rooms。Stakeholders 无法访问 Team Rooms,需要升级为 Basic 许可证才能参与 Team Rooms。
注意
Team 和 Team Room 是在创建 Team 项目的过程中一起创建的。Team Room 的名称与 Team 的名称相同。
如何操作…
-
通过浏览
http://tfs2015:8080/tfs/_home
访问 Team Web Access 主页。 -
在顶部面板中,点击Rooms标签,这将带你进入 Team Room 的中心。在此页面中,你将看到所有可用的 Team Rooms 列表。Team Room 是随着 Team 项目的创建而创建的:
-
点击新建按钮以创建一个新的 Team Room。输入名称为
FabrikamShipRoom
,点击确定以进入FabrikamShipRoom
: -
单击**管理事件…**链接以选择在
FabrikamShipRoom
中可见的哪些 TFS 事件: -
从代码更改选项卡中,添加一个团队项目。团队房间不是团队项目特定的,因此您可以选择多个团队项目。您还可以选择是否要所有更改或仅要特定于团队房间成员的更改。在这种情况下,请选择FabrikamTFVC,选择按房间成员,然后单击保存并关闭。
-
重复执行这些步骤以启用工作项、构建、代码审查和拉取请求的事件。
注意
通过取消选中FabrikamTFVC旁边的复选框,您可以停止在团队房间中接收此团队项目的警报。
-
单击管理用户…链接并选择添加 TFS 组以选择FabrikamTFVC。这将向
FabrikamShipRoom
添加所有 FabrikamTFVC 团队成员。要提交您的更改,请单击保存: -
在发帖消息文本框中,复制以下文本:
Welcome @Aaron Cook @Annu Arora @Brian Miller @Chris Wang @John Smith @Tom Hacker @Willy Peter to the #FabrikamShipRoom :)
:
它是如何工作的…
通过讨论进行中的工作、提出问题、共享状态和澄清出现的问题来提高团队生产力。您的团队房间为团队成员在近距离和远距离之间进行沟通和记录提供了一个空间。团队房间不限于团队项目集,因此您可以在团队房间中跟踪多个项目。团队房间允许您按日期查看对话,要查看历史对话,请单击团队房间顶部栏中的左箭头。您还可以从日历中选择日期。
管理事件使您可以访问以下各种事件:
-
构建事件:当任何以下构建定义完成时,在房间中将出现一个事件,指示构建的状态。
-
代码更改:当代码被推送或检入以下任一团队项目时,在房间中将出现一个事件。您可以选择将此范围仅限于团队房间成员或任何人。
-
工作项更新:当在以下任一区域路径中创建工作项或更改现有工作项的状态或分配时,将出现一个事件在房间中。
-
代码审查:当在以下任一区域路径中创建代码审查时,在房间中将出现一个事件。
-
拉取请求:当在以下任一存储库中创建、批准、拒绝或完成拉取请求时,将在房间中显示一个事件。
正如您在前面的截图中看到的那样,由于FabrikamShipRoom
订阅了工作项,当创建产品积压 ID 1 时,团队房间会发布警报。团队协作以找出根本原因并解决问题。
注意
通过在工作项 ID 前加上#
,TFS 会将其完全限定。在团队房间中点击**#3**,你将直接进入工作项 ID 3 的工作项表单。
通过点击右侧面板上的音频图标,你可以选择静音或取消静音团队房间中新消息的声音。团队房间的数据保存在 Team Foundation Server 中。可以通过 TFS REST API 获取团队房间数据,我们将在第八章,扩展和自定义 Team Foundation Server中详细介绍。
更多内容…
默认情况下,每当你创建一个团队或团队项目时,都会自动创建一个团队房间。团队房间可以被重命名,也可以删除。然而,一旦团队房间被删除,就无法恢复该房间或其中的任何对话。你可以在团队房间中心面板的左侧,点击团队房间名称旁的右键菜单,看到重命名和删除选项。
注意
想知道哪些团队房间最为活跃吗?最近访问的团队房间会显示在团队网页访问的登录页面上。
提示
可以对团队房间权限进行精细化管理。选择安全性…从FabrikamShipRoom的右键菜单中。可以在此设置聊天和管理权限为允许或拒绝。将聊天设置为拒绝会将用户限制为团队房间的只读参与者。
重命名团队项目
随着软件的演变,你可能会发现最初选择的团队项目名称已经不再适合你的项目目的。直到 TFS 2015,团队项目一旦创建,几乎无法重命名。团队项目重命名是 Visual Studio User Voice 网站上投票最多的功能,获得了超过 6000 票。TFS 2015 现在允许你重命名团队项目。虽然产品已经使得重命名团队项目变得非常简单,但这仍然是一个非常具破坏性的过程。在本指南中,你将学习如何重命名团队项目,并了解如何进行重命名以及在重命名过程中需要注意的细节。
准备开始
团队项目重命名会更新所有版本控制路径、工作项、查询以及其他团队项目的工件,以反映新名称。团队项目可以多次重命名,旧名称也可以重新使用。建议在非工作时间进行此操作,以尽量减少影响。需要考虑的事项如下:
-
为了重命名团队项目,你需要是项目管理员组的成员。
-
在重命名过程中运行的构建可能会失败。
-
所有用户都需要重新启动 Visual Studio。
-
Git 远程仓库需要更新为新的项目名称。
-
版本控制工作区需要通过运行最新的获取版本命令进行修正。
注意
如果团队中的个人使用本地工作区,建议升级到 Visual Studio 2013 更新 5 或 Visual Studio 2015(发布候选版或更新版本),以便在下次获取时自动修正工作区。如果他们继续使用早期版本的 Visual Studio,则需要将任何待处理的更改保存、创建新工作区,并恢复已保存的更改。
如何操作…
通过团队 Web 访问有两个入口点可以使用项目重命名功能。
选项 1
-
通过浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_admin/
进入团队项目的管理页面。 -
在左侧列出项目名称和描述的地方,你可以点击项目名称文本框来修改名称:
选项 2
-
通过浏览
http://tfs2015:8080/tfs/DefaultCollection/_admin
进入集合管理页面。 -
从上下文菜单重命名团队项目:
-
将项目名称从
FabrikamTFVC
更改为Fabrikam
并继续。你将收到一个项目重命名的警告信息。请仔细阅读警告信息,并确保团队项目的用户已知悉此重命名。注意
当团队项目被重命名时,任何打开该团队项目的浏览器可能会遇到一些错误。这些错误是由于浏览器中缓存的旧团队项目名称所导致的。
-
勾选复选框以确认警告,并点击 重命名项目。对话框将显示状态。重命名完成后,点击 关闭。
注意
任何在团队项目中创建的默认工件,如果它们与团队项目名称相同,将与项目一起重命名。这包括默认的团队、团队聊天室和 Git 仓库等工件。
它是如何工作的…
在本节中,我们将重点讨论在团队项目重命名完成后,团队需要执行的操作。
-
重启编辑器:你用来连接团队项目的编辑器需要重启。无论是 Team Explorer、Eclipse、Office、Microsoft Test Manager,还是任何其他使用 TFS 对象模型的客户端。
-
更新基于查询的测试套件:与工作项查询不同,基于查询的测试套件存储方式不同,并且在重命名后无法更新团队项目名称。如果你有任何基于查询的测试套件,请在浏览器中打开这些套件并更新查询以使用新的团队项目名称。
-
更新 SharePoint 团队站点和报告集成:SharePoint 和报告服务集成将继续工作,但一些报告在新的团队项目名称填充之前可能无法正常工作。在缓存更新为新名称之前,旧的项目名称仍然存在。报告和 SharePoint 服务器管理员可以手动运行这些作业,以立即填充新名称。
注意
如果仍然存在指向其的工作区映射,Team 项目名称将无法重复使用。这样做是为了避免工作区映射到两个项目时产生的歧义情况。您需要联系拥有这些映射的用户,删除它们或更新为使用新名称。
通过命令行创建新的 Team 项目
作为 Team Foundation Server 管理员,您会发现自己一遍又一遍地创建 Team 项目。多亏了 Team Foundation Server Power Tools,Team 项目创建过程可以进行脚本化。Team 项目是一个容器,可以托管多个团队,并简化各种工件(如流程、主任务列表、构建定义和代码工件)的共享。通常情况下,新的 Team 项目请求可能是由于请求者不完全理解多个团队如何在 Team 项目中容纳。始终有必要进行对话,以充分理解为何请求新的 Team 项目。在本教程中,您将学习如何使用命令行脚本创建新的 Team 项目。
准备就绪
Microsoft Visual Studio Team Foundation Server Power Tools 可通过 Visual Studio Gallery 获取。Power Tools 是一组工具、增强功能和命令行实用程序,可以提高 TFS 管理员的工作效率。通过浏览到bit.ly/1jJkEmt
下载并安装 Power Tools:
从 Visual Studio 扩展库下载 Microsoft Visual Studio Team Foundation Server 2015 Power Tools
安装 TFS Power Tools 会安装命令行实用程序Tfpt.exe。Tfpt.exe 是tf.exe的配套工具,提供额外的版本控制命令、工作项跟踪和 Team 项目操作。打开新的命令行并输入tfpt.exe /?
。如果没有看到以下截图中显示的可用命令列表,请验证安装是否正确。
如何操作…
-
在
C:\\ drive
中创建一个新文件夹TFSCookbook\\Chapter01
。在 Notepad 中复制以下文本并将其保存到C:\\TFSCookbook\\Chapter01
,命名为settings.xml
:http://tfs2015:8080/tfsC:\\TFSCookbook\\Chapter01 ScriptedTeamProject01 true true ScriptedTeamProject01 New Scrum
-
在命令提示符中运行以下命令:
tfpt createteamproject /settingsfile:\"C:\\TFSCookbook\\Chapter01\\settings.xml\" /validate /verbose
-
您应该收到一条消息,确认验证是否成功。如果没有,请根据设置文件中的信息检查错误消息:
-
要创建 Team 项目,请删除
/validate
开关并运行之前的命令。tfpt createteamproject /settingsfile:\"C:\\TfsCookbook\\Chapter01\\settings.xml\" /verbose
-
等待 Team 项目创建过程完成。
注意
请注意,
tfpt createteamproject
不支持使用 Git 作为源代码控制存储库脚本化新的 Team 项目。
工作原理…
Team 项目创建命令以settings.xml
文件作为输入;让我们回顾一下在settings.xml
中提供的信息:
-
TFSName
:此标签用于指定你希望创建新团队项目的 TFS 服务器的连接详细信息。 -
LogFolder
:此标签用于指定日志文件的文件夹目录。该路径应该存在于 TFS 应用程序层。 -
ProjectName
:团队项目的名称。如果你指定一个已存在的团队项目名称,团队项目创建过程将在验证过程中失败。 -
ProjectReportsEnabled
:某些默认的项目报告会在创建团队项目时生成。此标签接受布尔值;传入false
可以跳过添加默认报告。 -
ProjectSiteEnabled
:如果你的 Team Foundation Server 安装启用了 SharePoint 服务,你可以在此标签中传入true
值,以便为新团队项目创建一个 SharePoint 团队站点。 -
ProjectSiteTitle
:如果ProjectSiteEnabled
的值为false
,则此标签被忽略。此标签用于指定你选择在团队项目创建过程中作为 SharePoint 团队站点创建的名称。 -
SccCreateType
:如果在此标签中传入true
值,则会创建一个新的 TFVC 源代码管理;或者可以传入现有的 TFS 源代码路径,以便从指定的 TFS 路径的内容创建 TFVC 源代码管理。 -
ProcessTemplateName
:此标签用于传递团队项目应基于的过程模板的名称。注意
可以从过程模板管理器查看你团队基金会服务器上所有可用的过程模板。要访问过程模板管理器,打开 Visual Studio 并连接到 Team Foundation Server。在 Team Explorer 中选择 设置。在 设置 视图中,点击 过程模板管理器。
现在,让我们回顾一下 createteamproject
命令:
tfpt createteamproject /settingsfile:\"C:\\TFSCookbook\\Chapter01\\settings.xml\" /validate /verbose
/settingsfile
路径用于指定设置文件的位置。TFPT 解析设置文件并通过连接到 Team Foundation Server 来触发团队项目的创建过程,连接时使用设置文件中指定的详细信息。当使用 /validate
开关时,团队项目不会被创建;整个过程将作为验证运行,用于识别任何潜在问题。/verbose
标志用于记录此过程中执行的操作的详细信息。详细选项在排查问题时非常有用。
还有更多…
tfpt.exe
命令行工具还提供了许多其他有用的命令。值得一提的两个命令是 addprojectportal
和 addprojectreports
。
-
addprojectportal
:随着时间的推移,可能会意识到需要创建或移动项目门户。此命令支持在现有团队项目中执行这两种操作。tfpt addprojectreports /collection:http://tfs2015:8080/tfs /teamproject:\"Fabrikam\" /processtemplate:\"Scrum\" /webapplication:\"\" /relativepath:\"pathfromwebapp\" /validate /verbose
-
addprojectreports
:添加报告操作会在选择的团队项目中创建报告。如果报告已存在,则此命令会覆盖它们。tfpt addprojectreports /collection:\"http://tfs2015:8080/tfs\" /teamproject:\"Fabrikam\" /processtemplate:\"Scrum\" /validate /verbose
删除团队项目
删除团队项目会永久从数据库中删除与该项目相关的数据。这些数据无法恢复。因此,你应该保存可能需要以后访问的团队项目数据。在本教程中,你将学习如何使用 TFS 管理控制台和命令行删除团队项目。我们还将回顾这两种方法的区别。
准备工作
为了删除团队项目,你应该是以下组的成员:
-
团队基金会管理员组
-
SQL Server 管理员组
-
SharePoint 产品的农场管理员组(如果 TFS 已配置为与 SharePoint 集成,则需要此权限)
在本教程中,我们将回顾删除团队项目的两种可选方法。第一种方法是通过 TFS 管理控制台删除,另一种方法是通过命令行删除。当项目通过管理控制台删除时,任何关联的报告和 SharePoint 门户项目需要手动删除。TFSDeleteProject
命令行工具会删除所有工件。
如何操作…
选项 1
首先,让我们看看如何通过团队项目管理控制台删除团队项目:
-
登录到托管团队基金会应用程序层的服务器。
-
打开团队基金会管理控制台窗口,在左侧面板中点击团队项目集。点击团队项目标签页以查看默认集合中的项目:
-
选择Fabrikam团队项目并点击删除:
-
在删除团队项目窗口中,选择删除外部工件和删除工作区数据。点击删除按钮继续操作。
-
删除工作流被触发,切换到状态标签页以跟踪进度:
-
尽管所有指向项目门户的链接将从团队网页访问中删除,但作为门户的 SharePoint 网站需要从 SharePoint 中央管理手动删除。
选项 2
现在,让我们看看如何使用 tfsdeleteteamproject
命令行工具删除团队项目:
-
打开 Visual Studio 2015 命令提示符。或者,你可以打开命令提示符并将目录更改为
%programfiles(x86)%\\Microsoft Visual Studio 14.0\\Common7\\IDE
。 -
运行以下命令:
tfsdeleteproject /q /force /collection:http://tfs2015:8080/tfs/ Fabrikam
命令行工具提供了一些额外的参数:
-
/q
:这是一个可选参数;它启用静默模式,在删除过程中不会显示确认提示。 -
/force
:这是一个可选参数;即使某些组件无法删除,也会强制继续删除过程。 -
/excludewss
:这是一个可选参数。如果你不希望删除与团队项目关联的 SharePoint 网站,可以使用此参数。
它是如何工作的…
tfsdeleteproject
命令执行删除操作分为两个阶段。第一阶段删除项目数据,包括版本控制中的数据、构建和测试管理器、Team Explorer 中的团队项目组件、工作项以及仅属于该团队项目的工作项字段。第二阶段删除项目网站。这包括与该团队项目相关的任何报告以及 SharePoint 上的项目门户。
注意
如果你尝试访问一个已经被删除的团队项目,你可能会收到以下错误信息:TF200016: 以下项目不存在。请验证项目名称是否正确,并确保该项目在指定的 Team Foundation Server 上存在。
使用 tfsdeleteproject
时,以下数据可能会未被删除:
-
数据立方体中的团队项目信息:数据立方体中的团队项目信息只有在下一次重建时才会被移除。仓库的默认重建间隔为 2 小时。
-
构建产物文件和文件夹:构建二进制文件、构建日志文件以及包含测试结果的日志文件会在构建过程中发布。这些文件的位置不会被删除。这些文件需要从文件夹中手动删除。
-
共享工作项跟踪元数据:
tfsdeleteproject
不会删除在多个团队项目之间共享的工作项跟踪的任何元数据。 -
包含共享代码的版本控制暂存集:如果暂存集中的代码来自多个团队项目,则该版本控制暂存集不会被删除。
第二章:设置和管理代码仓库
在本章中,我们将介绍:
-
在现有的 TFVC 团队项目中创建一个 Git 仓库
-
启用代码分析检查策略
-
在 TFVC 中执行兄弟分支之间的无基础合并
-
在 TFVC 中重新调整分支的父分支
-
解锁其他人签出的文件
-
将在一个分支中创建的 shelve 集合还原到另一个分支
-
使用 .tfignore 和 .gitignore 忽略文件类型的提交
-
在 TFS 中进行代码审查
-
设置 Git 分支策略
-
在 TFS 中执行 Pull 请求
-
使用 TFS 分析服务立方体分析代码变化
介绍
代码仓库使开发人员能够更有信心地编写代码。现在,使用源代码控制的开发人员比以往任何时候都多。当多个开发人员共同协作开发时,代码仓库的最显著好处就能显现出来。更多的人参与意味着对版本的管理和理解有更大的需求。如果你需要为源代码控制辩护,那么需要提出以下问题:
-
你是否曾修改过代码,后来意识到这是一个错误并希望恢复?
-
你是否曾丢失代码或有一个过时的备份?
-
你是否曾需要维护多个版本的产品?
-
你是否曾想过查看你代码的两个(或更多)版本之间的区别?
-
你是否曾想过证明某个特定的修改是导致或修复了某段代码的问题?
-
你是否曾想过回顾某段代码的历史?
-
你是否曾想过向其他人的代码提交修改?
-
你是否曾想过分享你的代码或让其他人参与你的代码工作?
-
你是否曾想过查看到底是谁、何时、何地进行了哪些工作?
-
你是否曾想过在不干扰现有代码的情况下尝试一个新功能?
管理代码是应用生命周期管理的一个重要部分,这一过程广泛适用于各种编程语言和框架。源代码控制系统大致可以分为集中式和分布式两类:
集中版本控制系统(CVCS)在服务器仓库上保持一份源代码的单一“中央”副本。在使用集中版本控制系统时,开发人员将代码从仓库下载到本地工作空间。一旦在本地对代码进行了修改,就会提交到中央副本。对仓库的其他操作(如分支、合并、暂存等)也发生在服务器上,并且需要连接到服务器。
TFVC 是一个集中版本控制系统。在使用 Visual Studio 或 Eclipse 与 TFVC 一起工作时,IDE 与服务器保持频繁的通信。没有与服务器的活动连接,大多数常见操作是无法执行的。
分布式版本控制系统(DVCS)不一定依赖中央服务器来存储项目文件的所有版本。相反,开发者“克隆”一个代码库副本,并在自己的硬盘上拥有项目的完整历史记录。这个副本(克隆)包含了代码库中的所有数据——包括所有分支和提交历史。
Git 是一个分布式版本控制系统。除了推送和拉取操作外,大多数操作都可以在没有与服务器的活动连接时执行。
TFS 是唯一同时支持集中式(TFVC)和分布式(Git)源代码管理系统的平台。以下表格可以帮助你决定在何种情况下集中式版本控制比分布式更合适。关于两者差异的更多详细信息,可以参考 msdn.microsoft.com/en-us/Library/vs/alm/code/overview
。
-
支持非常大的代码库
-
精细级别的权限控制
-
允许使用监控
|
-
离线编辑支持
-
轻松编辑 Visual Studio 或 Eclipse 外的文件
|
-
完全离线体验
-
完整的代码库与可移植的历史记录
-
简化的分支模型
|
-
大型集成代码库
-
对源代码的控制和审计可达文件级别
|
-
中型集成代码库
-
在减少摩擦的同时实现精细控制的平衡
|
-
模块化代码库
-
与开源集成
-
高度分布式的团队
|
在 TFS 2015 之前,源代码控制类型的选择需要在团队项目创建时做出。在 Update 1 中,引入了一个新功能,允许团队在 TFVC 团队项目中创建 Git 仓库。这对那些在 TFVC 项目中已有大量投资,但又希望尝试 Git 的团队来说非常有用。这个功能及其优势在 在现有 TFVC 团队项目中创建 Git 仓库 章节中有详细讨论。对于任何来自 TFVC 背景并希望学习 Git 的用户,Git for TFVC 是一本非常有用的指南 (bit.ly/1RgboRk
)。
如今,市场和业务需求比以往任何时候都在发生变化。开发团队面临着更大的压力,需要更快地交付更高质量的软件。除非基础代码库的质量良好且有单元测试支持,否则这是不可持续的。一个好的源代码控制库可以显著提高软件质量,但仅仅拥有一个好的源代码库控制库是不够的,推动质量的因素远不止如此。
说到质量,缺乏代码审查、糟糕的 DevOps 实践、缺少单元测试、过多的战术实现,以及没有解决根本问题,都是技术债务的主要原因。技术债务不会在一夜之间爆发,它是一个缓慢而渐进的过程。与财务债务不同,技术债务非常难以察觉。技术债务会减慢你交付价值的能力。你是否注意到这些迹象?
本章的目标是向你介绍 Web Portal 和 Team Explorer 中的各种源代码管理操作,了解帮助将质量构建到代码中的功能,最后但同样重要的是,理解 TFS 仓库中可用的代码度量标准。在本章中,我们将使用 CodePlex 上提供的 Fabrikam Fiber 代码库(fabrikam.codeplex.com
)。按照以下步骤将代码设置到 FabrikamTFVC 和 FabrikamGit 团队项目中。
在 FabrikamTFVC 团队项目中设置 Fabrikam 解决方案
-
打开 Visual Studio,在 Team Explorer 中连接到 FabrikamTFVC 项目。点击超链接以配置你的工作区。接受默认的名称和位置,然后点击映射并获取。操作完成时会显示成功通知:
-
打开工作区位置,在本例中是
C:\\Users\\Tarun\\Source\\Workspaces\\FabrikamTFVC
。创建一个新的文件夹Main
;在Main
文件夹中,创建一个Source
文件夹并复制从 CodePlex 下载的 Fabrikam 代码库内容: -
打开 Visual Studio 中的源代码管理资源管理器,在菜单栏中选择将项目添加到文件夹图标。在添加到源代码管理窗口中,单击
Main
文件夹,然后点击下一步。接着,点击排除的项目,选择所有项目,然后点击包括项目图标。现在应该没有排除的项目了。点击完成,然后点击FabrikamTFVC项目并从上下文菜单中选择提交待处理更改: -
在源代码管理资源管理器中,右键单击
Main
文件夹,并在上下文菜单中的分支和合并子菜单下选择转换为分支…: -
打开
FabrikamFiber.CallCenter.sln
文件,路径为$/FabrikamTFVC/Main/Source/FabrikamFiber.CallCenter
。在解决方案资源管理器中右键单击解决方案,并从上下文菜单中选择添加解决方案到源代码管理…: -
接受警告并在 Team Explorer 的待处理页面上提交更改。Fabrikam 解决方案现在已成功设置到 FabrikamTFVC 团队项目的主分支中。
在 FabrikamGit 团队项目中设置 Fabrikam 解决方案
-
打开 Visual Studio,在团队资源管理器中连接到 FabrikamTFVC 项目。点击超链接以克隆此仓库。接受默认名称和位置并开始克隆。操作完成后会显示成功通知:
-
打开本地工作目录,在此案例中为
C:\\Users\\Tarun\\Source\\Repos\\FabrikamGit
。创建一个新的文件夹src
,并将从 CodePlex 下载的 Fabrikam 代码库内容复制进去: -
在团队资源管理器中,导航到更改页面。从未跟踪的文件部分,点击添加所有超链接,将所有最近复制到工作文件夹中的文件添加进来。点击提交按钮,将这些更改提交到仓库:
-
当提交操作成功完成后,会提示同步更改。点击同步,然后在外发提交(1)部分点击推送,将更改推送到远程服务器:
-
在团队资源管理器中,导航到分支页面。master 分支以及 remotes/origin 分支都会显示出来:
现在,Fabrikam 解决方案已成功设置在 FabrikamGit 团队项目的主分支中。
在现有的 TFVC 团队项目中创建 Git 仓库
传统上,只能使用 TFVC 作为源代码控制库。从 TFS 2013 开始,TFS 支持将 Git 作为源代码控制。Git 为分布式团队提供了许多好处,尤其是那些跨同一代码库协作的团队;你可以在这里阅读有关 Git 好处的更多信息:git-scm.com/about
。那些渴望尝试 Git,但由于迁移现有投资所需的重做工作而无法尝试的 TFVC 团队,现在有了解决方案。TFS 现在支持混合团队项目。在这个教程中,你将学习如何在现有的基于 TFVC 的团队项目中设置 Git 仓库。
准备就绪
在 Team Foundation Server 2015 更新 1 中,你需要是项目管理员组的成员才能将现有的 TFVC 或 Git 项目转换为混合项目,这种项目同时托管 TFVC 仓库和多个 Git 仓库。用户需要使用 Visual Studio 2015 更新 1 来处理混合项目。使用旧版本的 Visual Studio,包括 2015 RTM,用户将看到项目仍然是最初创建时的类型。
如果您的 TFVC 项目是在 TFS 2015 Update 1 之前创建的,项目管理员需要在创建第一个存储库后应用一些项目级别的权限。进入版本控制管理页面并选择树形结构中的 Git 存储库 节点。要设置与任何默认过程模板(敏捷、Scrum 和 CMMI)相同的组权限,请添加以下 TFS 组并授予以下权限:
-
[项目名称]\\读者
-
- 允许:读取
-
- 未设置:其他所有人
-
-
[项目名称]\\贡献者
-
- 允许:分支创建、贡献、注释管理、读取和标签创建
-
- 未设置:其他所有人
-
-
[项目名称]\\构建管理员
-
- 允许:分支创建、贡献、注释管理、读取和标签创建
-
- 未设置:其他所有人
-
同样地,当在 TFS 2015 Update 1 之前创建的 Git 团队项目中创建 TFVC 存储库时,需要修改以下文件夹级别的权限。
进入版本控制管理页面并选择树形结构中的 $/_ 项目名称 _
节点。要设置与任何默认过程模板(敏捷、Scrum 和 CMMI)相同的组权限,请添加以下 TFS 组并授予以下权限:
-
[项目名称]\\读者
-
- 允许:读取
-
- 未设置:其他所有人
-
-
[项目名称]\\贡献者
-
- 允许:签入、签出、标签、锁定、合并和读取
-
- 未设置:其他所有人
-
-
[项目名称]\\构建管理员
-
- 允许:签入、签出、标签、锁定、合并和读取
-
- 未设置:其他所有人
-
如果您的团队项目是在 TFS 2015 Update 1 后创建的,那么这些权限已经为您应用,无需其他操作,只需创建存储库。
如何操作…
-
通过浏览
http://TFS2015:8080/DefaultCollection/FabrikamTFVC/_versionControl
,进入 FabrikamTFVC Web 门户的代码中心。 -
如下图所示,点击 FabrikamTFVC 以展开 选项 菜单。要创建新的 Git 存储库,请从 选项 菜单中点击 新建存储库…。命名存储库为
FabrikamFeature1
并点击 创建:注意
请注意,同一个团队项目内不支持创建多个 TFVC 存储库,但支持创建多个 Git 存储库。
-
创建操作将把您重定向到 Git 入门页面。该页面允许您生成存储库的克隆和命令行凭据,创建一个 README 文件以描述您的存储库,并提供设置 Git 存储库以便与 Xcode、Eclipse 和 Visual Studio 配合使用的命令。点击 在 Visual Studio 中克隆 以开始在 Visual Studio 中工作:
-
由于此操作,存储库已在 Visual Studio 中克隆:
它是如何工作的…
许多客户积极使用 TFVC 仓库,并且在他们的团队项目中有丰富的工作项历史记录和自定义。为了方便这些团队开始使用 Git,TFS 中的团队项目模型已被修改以支持多个源代码控制仓库。混合项目允许在 TFVC 项目中创建任意数量的 Git 仓库。该模型现在还支持在 Git 项目中创建 TFVC 仓库。
Team Explorer 在 TFS 更新 1 中进行了增强,以支持操作混合团队项目。正如以下图所示,Team Explorer 中的连接管理页面列出了团队项目中的所有源代码控制仓库。Team Explorer 中的工作流会根据你连接的仓库类型进行调整。
Web 门户还允许在代码中心之间切换 TFVC 和 Git 源代码控制。与源代码控制相关的工作流会根据选择进行显示。例如,选择 Git 后,你可以看到拉取请求(Pull requests)选项,而在 TFVC 的上下文中,你会看到 shelvesets 选项。
还有更多…
最近的关于 Team Foundation Server 和 Visual Studio Online 中 Git 体验的投资路线图提到了对 Team Explorer 中拉取请求(Pull requests)的支持,以及对 Git 大文件存储(Git Large File Storage)和 GitFlow 的支持;你可以在 bit.ly/1RXQRS1
了解更多信息。
启用代码分析检入策略
许多组织建议在将代码提交到源代码控制之前进行某些检查。修复坏代码的成本会随着时间的推移增加。在代码问题早期发现并修复的过程中有激励措施。我们在上一章讨论了完成的定义;可以将其视为检入的定义。在 TFS 中,检入策略是在检入操作期间执行的规则,用以确保所选的变更集可以提交。检入策略存储在服务器上,并在检入时在客户端机器上执行。检入策略仅在 TFVC 项目中受支持。虽然 TFS 有一些预配置的检入策略,但 TFS Power Tools 添加了几个其他的检入策略。在本章节中,你将学习如何配置代码分析检入策略。代码分析检入策略要求在检入之前运行代码分析。
准备工作
要完成本章节,你需要:
-
一个名为 FabrikamTFVC 的 TFVC 团队项目。有关如何创建 TFVC 团队项目的说明,请参考 第一章中的 使用 Scrum 模板创建团队项目 章节,团队项目设置。
-
为了配置检入策略,你需要将编辑项目级别信息的权限设置为允许。添加自己。如果你是项目管理员或项目集管理员组的成员,你将已经拥有此权限。
注意
使用 Team Explorer everywhere 定义的提交策略仅在使用 Eclipse 的 Team Foundation Server 插件或 Team Foundation Server 的跨平台命令行客户端提交时适用。如果使用其他客户端,如 Team Portal 或 Visual Studio 中的 Team Explorer,这些策略将不适用。同样,使用 Team Portal 或 Visual Studio 中的 Team Explorer 定义的策略在使用 Eclipse 的 Team Foundation Server 插件或 Team Foundation Server 的跨平台命令行客户端提交时不会应用。
如何操作…
-
在 Visual Studio 中,打开 Team Explorer 并点击设置。导航到设置视图后,点击源代码管理超链接。在源代码管理设置窗口中,选择提交策略标签页。点击添加按钮,选择代码分析,然后点击确定。
-
在代码分析策略编辑器窗口中,从规则集下拉框中选择Microsoft 推荐的托管规则,然后点击确定:
-
选中强制提交仅包含当前解决方案中的文件。此选项允许你阻止提交任何不属于当前解决方案的文件。启用此选项是一个不错的选择,因为开发人员可能会不小心将文件提交到源代码管理中,而没有将该文件与解决方案关联。这可能会导致构建问题。
注意
代码分析规则集的定义存储在
C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Team Tools\\Static Analysis Tools\\Rule Sets
文件夹中。 -
从 FarbikamTFVC 项目中,打开
FabrikamFiber.CallCenter.sln
: -
在FabrikamFiber.Web的
Controllers
中,打开HomeController.cs
: -
将以下代码复制到
HomeController.cs
中的Index()
函数:try{}catch(Exception ex){}
-
从 Team Explorer 中,导航到待处理更改窗口,并将代码更改提交到 TFS。由于没有运行静态代码分析,系统发出了策略警告:
-
双击警告信息查看详细信息:
-
在 Visual Studio 的分析菜单中选择在解决方案上运行代码分析来触发代码分析:
-
代码分析发现了新添加代码中的问题。如果没有运行代码分析,开发人员可能会错过这个问题。代码分析策略确保在代码提交之前运行代码分析:
-
由于现在已经运行了代码分析,提交代码时将不会发出提交策略违规的警告信息。
如何操作…
提交策略用于强制执行强制的软件开发实践。策略在提交过程中执行。由于 TFVC 提交在服务器上处理,提交请求会被拦截,以强制在客户端执行提交策略。如果用户试图进行违反策略的提交,提交将被阻止。
可以指定四种 Team Project 提交策略(要使用提交策略,必须连接到 Team Foundation Server):
-
构建:这要求在新提交之前,必须修复在构建过程中出现的任何破坏性构建问题。
-
代码分析:这要求在提交代码之前,必须运行代码分析。
-
测试策略:这要求在提交代码之前,必须完成测试。
-
工作项:这要求在提交代码时,必须关联一个或多个工作项。
提交策略可以通过点击覆盖警告超链接来覆盖;在提供覆盖理由后,你可以继续提交代码:
注
你可以通过在 Team Explorer 中使用不覆盖策略的服务器端插件来关闭策略覆盖选项。更多细节请阅读以下博客文章 bit.ly/1jUhZ9y
。
还有更多…
到目前为止,我们讨论了 TFVC 项目的提交策略。通过 TFS API,可以为 Git 项目创建自定义提交策略。服务器端插件会监听 Git 推送事件时触发的PushNotification
。关于如何为 Git 仓库创建服务器端提交策略,以验证提交信息是否与推送关联,请参考 bit.ly/1OabagX
。
在 TFVC 中执行无基础的兄弟分支合并
当多个团队共同向同一个仓库贡献代码时,管理源代码可能会变得具有挑战性。你是否已经熟悉 TFS 中可用的分支和合并工具?如果没有,我建议你阅读 ALM Rangers 版本控制指南 bit.ly/1He8pmL
。该指南详细讲解了各种分支策略及其优缺点。
来自 ALM Rangers 版本控制指南的摘录,展示了不同的分支策略
随着时间推移,TFVC 中的分支管理可能会变得复杂;而 Git 中的分支则轻量且路径独立。在 Git 中,许多开发人员为他们正在编码的每个新特性创建一个分支,有时是按日创建。Git 允许你快速切换不同的分支,在代码库的不同变体之间进行切换。在使用 Git 时,你可以创建仅存在于你的开发机器上的分支,并在你准备好时与他人共享。考虑根据工作流评估你的源代码控制需求,访问 bit.ly/1P7UMvO
;你可能会发现 Git 更适合你的需求。
在本示例中,你将学习如何在两个无关的 TFVC 分支之间执行合并操作,这些分支通常被称为兄弟分支。
准备工作
在你的 TFVC 基础团队项目中,创建如下图所示的分支结构。你可以使用 TFS Community Branch Tool 扩展来自动化创建分支,如下图所示 (bit.ly/1LZR2bx
):
在这个示例中,我们将处理以下场景。正在开发 Dev 分支的开发人员发现了一个关键问题,并通过代码提交解决了该问题。QA 分支已经被另一位开发人员用于进行一些无关的工作。为了将 Dev 分支的修复发布到生产环境,开发人员决定在 Dev 和 Prod 分支之间执行无基础的合并。
要执行合并操作,你的用户帐户需要具备合并权限。项目管理员组已授予此权限;但是,该权限也可以直接在单个用户和组上设置为允许:
如何操作…
-
在 Visual Studio 中,打开团队资源管理器并导航到源代码控制资源管理器。对 FabrikamTFVC 团队项目执行 获取最新版本 操作:
-
为了模拟在 Dev 分支上进行修复,打开
$\\Dev\\FabrikamFiber.CallCenter\\FabrikamFiber.Web\\Controllers\\HomeController.cs
文件,并将以下注释放入Index
方法中:在团队资源管理器的待提交更改视图中提交对该文件的代码更改:
-
现在关键更改已经在 Dev 分支中,我们来看看将此更改从 Dev 分支无基础合并到 Prod 分支所需的步骤。在源代码控制资源管理器中,右键单击 Dev 分支,然后在 分支和合并 子菜单下选择 合并…:
-
合并 向导中不会显示 Prod 分支在 目标分支 下拉菜单中。无关的分支只能通过 浏览… 按钮选择。点击 浏览… 并选择 Prod 分支,然后点击 确定:
-
在目标分支旁边会出现一个警告标志,表示所选分支无关且会导致无基合并:
-
点击下一步进入下一屏幕:
注意
如果选择从所有更改更改为选择的更改集,则两个分支之间并未建立合并关系。尽管您仍然可以合并更改,但无法可视化该合并。
-
保持下拉框中的最新版本选项,并点击下一步:
-
合并操作完成后,您将被导航到解决冲突窗口。点击在合并工具中合并更改,然后检查并点击接受合并:
-
在合并完成后,解决冲突窗口将清除所有冲突。在 Team Explorer 中查看待处理更改,检查待处理更改并提交:
-
在源代码管理资源管理器中,右键点击Prod分支,选择查看历史记录。检查所有分支并点击可视化。从 Dev 到 Prod 的虚线表示无基合并。
它是如何工作的……
当进行无基合并时,将在两个兄弟分支之间建立关系。无基合并用虚线表示:
要查看更改的时间线,点击屏幕顶部的时间线跟踪视图:
在 TFVC 中重新设置分支的父节点
Team Foundation 版本控制提供了一个选项,可以将分支从给定层级中的某个位置修剪出来,并在同一层级的其他位置重新附加。如果您在设置分支结构时出现了问题,或者在扩展过程中原有结构停止工作,可以考虑使用这种方法。在本教程中,您将学习如何在 TFVC 中重新设置分支的父节点。
注意
重新设置父分支的移动是逻辑上的而非物理上的,可以在不停止开发人员工作的情况下完成。然而,建议让开发人员将更改暂存。您还应尽力使新父分支的内容与旧父分支尽可能接近,以避免合并冲突。
准备工作
要重新设置分支的父节点,您的用户帐户需要具有管理分支权限。项目管理员组和项目集合管理员组已授予此权限;不过,您也可以直接在单个用户和组上设置此权限:
管理分支权限允许您执行以下操作:
-
将文件夹转换为分支
-
执行以下操作
-
编辑分支属性
-
重新设置分支父节点
-
将分支转换为文件夹
-
在您的 TFVC 项目中,创建一个分支结构,如左图所示:
|
当前的分支结构
|
所需的分支结构
|
本教程中我们将处理的场景,如左侧图示所示,是开发团队从Main分支发布;Release 1.1是从Release 1分支出来的。如右侧图示所示,团队希望将Release 1.1直接移到Main分支下,这样更改就不需要通过Release 1进行合并到Release 1.1。
要将Release 1.1分支从Release 1重新设置为Main,需要在这两个分支之间建立关系。这只能通过对两个分支执行无基础合并来完成。请参阅在 TFVC 中对兄弟分支执行无基础合并教程,了解如何执行无基础合并。
本教程假设Main分支与Release 1.1分支之间已建立合并关系。在前面的图中,虚线表示这两个分支之间的关系。
如何操作…
-
导航到源代码控制资源管理器,右键点击Release 1.1分支,然后从分支和合并子菜单中选择重新设置父分支…:
-
在重新设置父分支窗口中,你将看到与Release 1.1有直接或间接关系的所有分支的列表。选择Main,然后点击重新设置父分支。选择无父分支将使Release 1.1成为一个独立的分支:
-
重新设置父分支操作发生在服务器上。你不会看到重新设置父分支操作带来的任何待处理更改。重新设置父分支操作后的分支层次结构如下:
它是如何工作的…
一旦重新设置父分支操作完成,你可以通过右键点击Release1.1分支,并选择属性,从高级子菜单中查看更新后的分支层次结构:
从左侧菜单点击关系选项卡,以查看分支关系。
解锁其他人签出的文件
在分布式团队中,开发人员经常有待处理的更改,这些更改会与共享的代码文件发生冲突。你是不是讨厌当某个开发人员请假时,文件仅被他们自己签出,或者某个开发人员离开组织时,文件仍然被签出?当文件被独占锁定时,必须移除锁定才能对文件进行提交。在本教程中,你将学习如何解锁其他用户签出的文件。
准备就绪
要撤销其他用户工作区中的待处理更改,你必须具有管理工作区权限,并将其设置为允许:
如何操作…
-
开发者 A 在 FabrikamTFVC 项目中以提交锁定类型检出了
$/FabrikamTFVC/Main/Source/FabrikamFiber.CallCenter/FabrikamFiber.Web/Web.config
文件。因此,尽管其他用户可以检出Web.config
文件,但在开发者 A 解除此锁之前,任何人都无法提交该文件:在下图中,
Web.config
被选中并且具有提交锁。此状态在 待处理更改 列中显示为 锁定: -
现在,开发者 B 检出
Web.config
并向配置文件中添加一个新部分。为了提交更改到版本控制,开发者 B 尝试提交该文件。提交失败,显示以下消息。注意
在提交过程中遇到了以下问题:
无法对 $/Fabrikam/Main/…/Web.config 执行操作。项目 $/Fabrikam/Main/ …/Web.config 在工作区 TFS2015;DeveloperA 中被锁定。
-
开发者 B 打开 “Visual Studio 2015 开发者命令提示符” 并运行以下命令以撤销开发者 A 的更改:
tf undo /workspace:TFS2015;\"Developer A\" /recursive $/FabrikamTFVC/Main/Source/FabrikamFiber.CallCenter/FabrikamFiber.Web/Web.config\" /collection:\"http://tfs2015:8080/tfs\"
当提示是否确认撤销时,输入 Y。你也可以在上述命令中使用
/silent
开关来跳过提示:开发者 B 现在可以通过 Visual Studio 的待处理更改窗口成功提交文件。
注意
虽然开发者 A 对
app.config
的锁已被移除,但开发者 A 在其机器上的配置文件中可能仍有待处理的更改。因此,开发者 A 可以执行get
操作以获取开发者 B 的更改,并根据需要合并并继续操作,而不会丢失任何信息。
还有更多内容…
TFS Power Tools 提供了一个选项,可以在 Visual Studio 内直接撤销其他用户的待处理更改。如果你没有安装 TFS Power Tools,请参考第一章中的通过命令行创建新的团队项目一节,了解更多内容,团队项目设置。
右键单击你想要撤销的文件或文件夹。在上下文菜单中,选择 查找状态…,位于 源代码管理 子菜单下的 查找 中。你可以通过指定通配符和用户名来缩小搜索范围。搜索结果会显示在 源代码管理 窗口中的 查找 视图:
只需选择文件,并在上下文菜单中选择 撤销… 来撤销待处理的更改。
将一个分支中的 shelveset 还原到另一个分支
在使用 TFVC 时,你会发现 shelvesets 非常有用。Shelvesets 允许你将本地的更改备份到服务器上。开发者几乎总是在进行多任务操作;你可能会在一个分支上开始编码某个更改,然后意识到该更改实际上需要应用到另一个分支。在本配方中,你将学习如何在一个代码分支中暂存更改,然后将这些更改迁移到另一个分支,而无需将更改提交到源代码管理。
准备工作
FabrikamTFVC 项目有三个分支,Dev、Main 和 Prod,如下面的图所示。在本配方中,我们将从 Dev 分支中的待处理更改创建一个名为 shelvesetDev1
的 shelveset,并将待处理更改迁移到 Prod 分支,而无需将待处理更改提交:
本配方需要使用 tfpt
命令行工具。此工具随 TFS Power Tools 一同安装。如果你没有安装 TFS Power Tools,请参考第一章中关于通过命令行创建新的团队项目的配方,团队项目设置。
在 Dev 和 Prod 分支上执行 get latest
操作,确保它们是最新的。确保 Prod 分支中没有待处理的更改。如果分支不是最新的,在执行 unshelve 操作时可能会出现以下错误消息:无法确定工作区
。
如何操作…
-
在 Team Explorer 中,打开源代码管理资源管理器并签出
$\\Dev\\FabrikamFiber.CallCenter\\FabrikamFiber.Web\\Controllers\\HomeController.cs
文件,然后复制Index
方法中的以下注释:// 假设这是对该方法的关键修复:
-
在 Team Explorer 中,导航到 Pending Changes 视图并点击 Shelve 超链接。输入 shelveset 名称
shelvesetDev1
,然后点击 Shelve 按钮: -
打开 Visual Studio 开发者命令提示符,并将工作目录更改为目标分支的工作区目录。在此示例中,目标分支为
Prod
: -
运行以下命令将 shelveset 从 Dev 分支迁移到 Prod 分支:
tfpt unshelve /migrate /source:\"$/FabrikamTFVC/Dev\" /target:\"$/FabrikamTFVC/Prod\" \"shelvesetDev1\"
-
在 Shelveset Details 窗口中,点击 Unshelve 按钮以继续:
-
如果 TFS 认为它能够解决合并冲突,合并按钮将启用。如果 TFS 需要手动解决冲突,则 Resolve 按钮将启用。点击 Auto-merge All 按钮以继续:
-
一旦自动合并操作完成,命令提示符中将发布确认消息:
-
在源代码管理资源管理器中,导航到 Prod 分支。从
$\\Prod\\FabrikamFiber.CallCenter\\FabrikamFiber.Web\\Controllers
打开HomeController.cs
。在 Dev 版本中的HomeController.cs
文件所做的更改将反映到 Prod 分支中的HomeController.cs
文件:
使用 .tfignore
和 .gitignore
忽略提交文件类型
传统上,TFS 仅支持服务器工作区。局部工作区在 TFS 2012 中推出。局部工作区允许你在不连接服务器的情况下进行工作。所有核心版本控制操作都可以在没有服务器连接的情况下执行。局部工作区监听文件系统上的变化,从而推断正在执行的操作。例如,在文件系统中直接创建的新文件会显示为待提交更改。使用过 Subversion 源代码控制的用户会对局部工作区有所了解。你可以在 msdn.microsoft.com/en-us/library/bb892960.aspx
阅读有关局部工作区工作原理的更多信息。
许多与 Visual Studio 协同工作的工具和扩展会在本地工作区目录中生成临时文件。例如,ReSharper,一个用于 Visual Studio 的开发者生产力扩展,生成 _Resharper.[SolutionName]
文件,这些文件(默认情况下)会包含在待提交更改中。这些临时文件对版本控制没有任何帮助,应当被忽略;.tfignore
和 .gitignore
允许你做到这一点。可以在 .tfignore
和 .gitignore
中指定要忽略的文件类型;这些规则用于自动排除指定的文件类型不包含在待提交更改中。在本教程中,你将学习如何创建 .tfignore
和 .gitignore
文件,以自动排除某些文件类型。
准备就绪
为了按照本教程操作,你需要创建一个本地工作区。按照以下指示在 FabrikamTFVC 项目中创建本地工作区:
-
在本地磁盘中创建一个文件夹
Wks
。本教程假设该文件夹为C:\\Wks
。 -
打开 Visual Studio 中的 Team Explorer 并连接到 FabrikamTFVC 团队项目。
-
从 Visual Studio 菜单中,导航至 文件 | 源代码控制 | 高级 | 工作区:
-
在 管理工作区 窗口中,点击 添加。在 添加工作区 中,创建一个名为
TFS2015_99
的工作区,从$/FabrikamTFVC/Main
映射到C:\\Wks
。点击 高级>> 按钮,确认工作区位置是否设置为 本地。然后,点击 确定: -
点击 确定 后,接受提示执行最新获取操作,将源代码下载到新的本地工作区。
如何操作…
执行以下步骤来设置基于 TFVC 的源代码控制的 .tfignore
文件:
-
打开
C:\\Wks
并创建一个新文件ThisIsAFakeClass.txt
。 -
在 Team Explorer 中,导航至 FabrikamTFVC 项目的 待处理更改 视图。在 排除的更改 部分,检测到的数量显示为 1。
-
点击 检测到的项目 超链接。在 提升候选更改 窗口中,右键点击
ThisIsAFakeFile.txt
并选择 按扩展名忽略 (*.txt):.tfignore
文件会自动为你创建,并出现在 待处理更改 视图中。打开.tfignore
文件;扩展名*.txt
已被添加为需要忽略的项目。将以下内容复制到.tfignore
文件中,以忽略所有 ReSharper 生成的文件:######################################*.txt# Ignore Reshaprer files*_ReSharper.**.DotSettings
-
将
.tfignore
文件提交到版本控制中;此规则集将在所有开发者工作站上评估,以忽略该.tfignore
文件中指定的所有文件。注意
-
TFVC 支持多个
.tfignore
文件,其中项目范围内的.tfignore
文件可以覆盖解决方案级别的.tfignore
文件中的忽略规范。 -
TFVC 接受排除规则,例如,要忽略所有 TXT 文件,除了
help.txt
,可以使用!help.txt
。
-
执行以下步骤为基于 Git 的源代码管理设置 .gitignore
文件:
-
在 Team Explorer 中,打开 FabrikamGit 项目并导航至 设置 视图。点击 仓库设置 超链接。然后,点击 添加 来创建一个
.gitIgnore
文件: -
点击 编辑 超链接以编辑
.gitignore
文件。将以下内容复制到.gitIgnore
文件中:# User-specific files*.suo*.user*.sln.docstates# Specific files *.txt# Build results[Dd]ebug/[Rr]elease/
-
在 Team Explorer 中,导航至 更改 视图并提交
.gitIgnore
文件。点击 同步 超链接,将更新后的.gitIgnore
推送到仓库。现在,所有开发者工作区将忽略该.gitignore
文件中指定的文件扩展名。
注意
Git 支持多个 .gitIgnore
文件,其中项目范围内的 .gitIgnore
文件可以覆盖解决方案级别的忽略规范文件。
还有更多……
tfpt
命令行工具是与 TFS Power Tools 一起安装的,其中提供了两个非常有用的开关:scortch
和 treeclean
。scortch
和 treeclean
允许你将工作区镜像到服务器状态,并移除工作区中的任何不需要的杂乱文件。了解更多关于 scortch
和 treeclean
的信息,请访问 adamprescott.net/2011/09/12/clean-tfs-workspaces-with-scorch-treeclean
。
在 TFS 中进行代码审查
在本章的介绍中,我们简要讨论了技术债务以及它如何影响团队的生产力。使用良好的工程实践有助于解决可能导致技术债务的问题。业界普遍认同,代码审查是一种有效且实用的方法,可以在软件开发生命周期的早期发现代码不一致和潜在缺陷。
Forrester Consulting 进行的一项关于代码审查的价值和重要性的研究突出了以下被认为是代码审查好处的内容:
来源 - www.klocwork.com/getattachment/08c47c41-053c-4fe8-bbf7-91b95734747c/The-Value-and-Importance-of-Code-Review-Forrester?sitename=Klocwork
TFS 提供两种代码审查解决方案,一种通过 Team Explorer,另一种通过 Team Web Access。Team Explorer 中的代码审查解决方案首次在 TFS 2012 中引入,但因不支持迭代审查而受到批评。另一方面,Team Web Access 中的轻量级代码评论解决方案支持迭代审查,但不支持集成的 Visual Studio IDE 体验。你可以在www.visualstudio.com/en-us/get-started/code/get-code-reviewed-vs
了解有关 Team Explorer 中可用代码审查解决方案的更多信息。在本教程中,你将学习如何在 Team Web Access 中使用轻量级代码评论进行代码审查。
准备就绪
在本教程中,我们将处理以下场景——Aaron 是 FabrikamTFVC 团队的开发人员。他正在FabrikamFiber.CallCenter.sln
开发代码库中为服务票务仪表板显示 CreatedBy
列的一个新功能。Aaron 已经提交了他的更改(这创建了变更集 27),现在他希望 Tarun 对这些更改进行代码审查。Aaron 通过点击 Team Web Access 中的共享变更集图标将变更集发送给 Tarun:
通过点击变更集视图中的电子邮件图标发起代码审查
提示
下载示例代码
你可以从你的账户中下载示例代码文件,访问www.packtpub.com
,下载你所购买的所有 Packt 出版书籍的代码文件。如果你在其他地方购买了本书,可以访问www.packtpub.com/support
并注册,文件将直接通过电子邮件发送给你。
如何操作…
-
Tarun 收到一个反馈请求的电子邮件。点击超链接变更集 27会在审查模式下打开变更集,突出显示比较模式中的代码更改。也可以通过点击文件名超链接,在并排比较模式中查看更改:
通过点击变更集超链接,启动代码比较窗口,在此情况下为变更集 27
-
浏览
Index.cshtml
时,Tarun 发现了几个问题。他选择了有问题的代码并添加了内联评论: -
Tarun 使用变更集顶部的添加评论按钮对变更集进行总体评论:
-
Tarun 通过点击Sharechangeset按钮提交反馈。电子邮件中包含所有评论的列表。
-
Aaron 逐一修复了 Tarun 指出的问题。Aaron 认为 Tarun 关于分页和过滤器的评论应该作为一个通用功能来构建。Aaron 从代码评论中创建了一个产品待办事项,并将其添加到团队的待办事项列表中:
如何运作…
轻量级代码评论是 Team Web Access 中的基于浏览器的代码评论解决方案。它为对整个文件或单个更改进行评论提供了良好的内联体验。代码评论使关于代码的互动或延时对话成为可能。代码评论是在浏览器中完成的,因此,除了其他功能外,它可以在任何地方工作——包括在您的手机上。
评论存储在 Team Foundation Server 中,与代码相关。如果代码或相关的代码文件被删除,关联的代码评论将自动删除。从评论中创建的工作项包括回到评论的引用;这有助于保持可追溯性:
还有更多…
尽管大家一致认为代码审查很重要,但业内对代码审查应该在提交前还是提交后进行意见分歧。请参考以下博客文章,讨论这两种方法的优缺点:
geekswithblogs.net/TarunArora/archive/2012/09/18/vs-2012-code-review-ndash-before-check-in-or-after.aspx
在 Git 中设置分支策略
在代码质量主题的基础上,如何帮助防止技术债务,分支策略是 TFS 中的一项新功能,它有助于提高进入 Git 仓库的代码质量。在本食谱中,您将学习如何在主分支上配置代码审查和门禁提交策略。
准备就绪
要在分支上配置分支策略,用户需要对该分支具有管理员权限。要为整个仓库应用分支策略,用户需要对仓库具有管理员权限。
为 FabrikamGit 团队创建一个持续集成构建;请参阅第四章中的《创建持续集成构建定义》食谱,构建您的应用程序。
场景:FabrikamGit 团队希望通过只允许通过 Fabrikam CI 构建并且已被团队中至少两个人进行代码审查的提交来保护主分支。如果正在更改的代码属于/src/FabrikamFiber.CallCenter/FabrikamFiber.Web
区域,则必须由 Brian Miller 进行审查。
如何做…
-
打开 FabrikamGit 团队管理页面
http://tfs2015:8080/tfs/DefaultCollection/FabrikamGit/FabrikamGit%20Team/_admin/
。进入版本控制标签并选择主分支。要访问分支策略,点击分支策略标签: -
分支策略页面允许你配置限制性提交和代码审查的策略。
-
在自动构建拉取请求部分,勾选两个选项并从下拉菜单中选择FabrikamGit CI构建定义:
-
在代码审查要求部分,勾选要求代码审查,并将最小审阅者人数设置为
2
: -
点击添加新路径超链接。添加路径
/src/FabrikamFiber.CallCenter/FabrikamFiber.Web/*
和审阅者Brian Miller
: -
点击保存更改按钮以保存并应用限制性提交和代码审查策略。
工作原理…
分支策略会在提交时在服务器上进行评估。启用主分支的分支策略后,不能直接将代码提交到主分支。直接将代码提交到主分支时,会出现以下错误消息。
推送时报告了以下错误:
refs/heads/master, TF402455: Pushes to this branch are not permitted; you must use pull requests to commit changes.
还有更多…
有时可能会有绕过策略的正当理由。TFS 提供了这一功能。通过将免除策略执行权限设置为允许,用户或组可以绕过策略:
此权限可以作用于整个项目、一个仓库或一个单独的分支。如果你被授予免除策略执行的权限,你将不会收到警告,也不会被阻止直接推送或合并到分支。因此,正如人们常说的那样……拥有巨大权力的同时,也需要承担相应的责任。
在 TFS 中进行拉取请求
在本章前面,你已经学习了如何限制未经审查的代码进入主分支。拉取请求是将代码从主题分支(也称为功能分支)推送到主分支的方式。拉取请求使得在主题分支工作的开发人员能够在提交代码到主分支之前,获取其他开发人员对其更改的反馈。在本篇中,你将学习如何进行拉取请求,以接受来自主题分支的更改到主分支。
准备就绪
我们将在这个示例中演示的场景是:Brian 是 FabrikamGit 团队的开发人员。他正在开发一个功能,在服务仪表板上添加一个名为 problem type
的下拉菜单。Brian 创建了一个包含问题类型列表的枚举,并希望获得对此列表的反馈,并将他的更改合并到主分支。
-
打开 Visual Studio 并将其连接到 FabrikamGit 团队项目。从 Team Explorer 中心,点击分支。在分支视图中,右键点击master并在上下文菜单中选择从…新建本地分支。输入新分支的名称为
Brian/Feature1
,然后点击创建分支按钮: -
从主题分支中,打开
FabrikamFiber.CallCenter.sln
。在FabrikamFiber.Web项目中,添加一个新文件夹并命名为Common
。添加一个新类并命名为ProblemTypeEnum.cs
。编辑该类并创建一个枚举,如截图所示: -
从 Team Explorer 中,导航到更改视图。通过输入提交信息并点击提交按钮来提交待处理的更改。同步并发布分支:
-
通过访问
http://tfs2015:8080/tfs/DefaultCollection/_git/FabrikamGit/branches
,导航到 Team Web Access 中的分支视图页面。主题分支会在这里显示,突出显示它比 master 分支多了一次更改: -
验证 master 分支是否已设置强制检查和代码审查策略。如果没有,请按照在 Git 中设置分支策略的步骤进行操作。
如何操作…
-
通过访问
http://tfs2015:8080/tfs/DefaultCollection/_git/FabrikamGit/pullrequests
,导航到 Web 门户中的拉取请求页面。您将看到一个提示,要求您从先前发布的分支创建拉取请求。或者,点击左侧面板中的新建拉取请求按钮: -
创建拉取请求页面显示了更改的列表,并提供了文件级别的对比。目标分支被选择为 master,因为它已设置为默认分支。可选地,点击更多选项超链接以添加描述和额外的审核组:
-
评估 master 分支策略,FabrikamGit CI 构建会自动启动,并发出代码审查请求。引擎评估更改并确定合并操作不会发生冲突。由于代码更改位于
/src/FabrikamFiber.CallCenter/FabrikamFiber.Web/
,因此也会向 Tom Hacker 发出代码审查请求: -
现在,Tom Hacker 登录 Web 门户,查找分配给他的拉取请求。他对该拉取请求进行了代码审查。Tom 建议对枚举进行一些更改,并将拉取请求标记为已批准并附有建议:
-
Brian 根据建议进行了更改,并将更改提交到主题分支。点击刷新以更新拉取请求中的更改:
-
分支策略会重新评估——触发的检查构建会运行,合并会被评估。一旦所需的审阅者批准了 Pull 请求,请求就准备好合并。点击 完成 Pull 请求 按钮将更改合并到主分支,并创建一个新的变更集:
-
现在,点击 删除源分支 按钮以删除
feature1
分支。这样做是一个良好的做法,因为保留不需要的分支会导致混乱。Pull 请求已完成;更新的状态反映在 Team Portal 中。
工作原理…
从 Team Explorer 中心,点击 同步 页面,获取并拉取传入的更改。在 分支 视图中,点击 master 分支,并从上下文菜单中选择 查看历史记录。合并到主分支已作为 Pull 请求的一部分完成;这现在在分支历史中有所反映:
使用 TFS 分析服务立方体分析代码变动
TFS 分析服务立方体计算大型数据集,帮助用户回答关于软件项目的问题。TFS 数据仓库使用户能够连接各种数据集,并理解代码变动、代码覆盖率、构建、错误等趋势。在本教程中,您将学习如何将 Excel 连接到 TFS 分析服务立方体,并分析 FabrikamTFVC 项目中的代码变动。
准备就绪
为了通过 Excel 连接 TFS 分析服务作为数据源,您需要在 TFS 数据仓库中授予 Windows 帐户权限。或者,使用已经具有访问权限的 Windows 用户名和密码。
如何操作…
-
打开 Excel,在 数据 标签中点击 来自其他来源,然后选择 来自分析服务。在数据连接向导中,输入 TFS 分析服务器的连接详情,然后点击 下一步 按钮:
注意
如果您不确定仓库的连接详情,可以通过 TFS 管理控制台中的 报告 标签进行检查和验证。
-
在数据库下拉列表中选择 Tfs_Analysis,选择 代码变动,然后点击 下一步 按钮。修改 列表示每个立方体和视角的最后处理数据时间。在下一个屏幕中,点击 完成:
-
根据以下截图设置数据透视报告:
工作原理…
选择这些字段后,会生成如下输出。数据按年、月和周分组,显示代码库中的总行数,以及修改行数、删除行数、添加行数和总变动:
注意
如果你对构建质量指标报告感兴趣,TFS 已经提供了这个报告。该报告显示了指定构建定义的测试覆盖率、代码变化量和缺陷数量。你可以参考msdn.microsoft.com/en-us/library/dd380683(v=vs.120).aspx
教程,了解更多关于这个报告的信息。
还有更多…
将数据透视表中的字段更改为下图所示。现在,让我们将版本控制层次结构和构建细节加入到方程式中,并像这里的截图一样更新数据透视表中的字段:
在值部分,添加“总行数”、“修改行数”、“新增行数”和“总变化量”。
这将导致按年份、周和日期以及版本控制层次结构进行透视。正如你在这里的截图中看到的,输出显示了分支的变化。你可以进一步钻取到特定的项目和类:
现在,将文件层次结构更改为过滤器,并将文件扩展名添加为行。在.asax
、.config
和.cshtml
的文件扩展名过滤器中,输出将显示这些文件类型随时间的代码变化量。
可能性是无限的。一旦你掌握了分析报告的基础,你就可以开始探索数据仓库中其他维度,以将数据关联起来,发现更多关于你的软件项目的有趣趋势。
第三章:规划和跟踪工作
本章将涵盖以下内容:
-
选择在团队门户上显示的待办事项级别
-
映射、分配和跟踪多个团队共享的工作项
-
向看板添加额外的列
-
自定义看板上显示的卡片
-
为冲刺设置团队的能力和活动
-
按标签查询工作项
-
使用工作项查询创建图表
-
使用服务钩子与 Trello 看板集成
-
在 TFS 中永久删除工作项
-
使用 Microsoft Feedback 客户端提供反馈
介绍
传统上,企业将技术视为业务成本;如今,企业将技术视为做更多生意的机会。用于关键决策的软件系统的使用正在比以往任何时候都增加。领先的公司已经意识到进入数字生态系统的好处,并正在利用技术作为竞争优势。为了跟上市场变化的步伐,软件系统也需要改变。
实施了但从未使用的需求,或者那些仅用于识别的需求,无法满足用户的需求,导致浪费、返工和不满。无论你是采用 Scrum、瀑布式还是其他交付方法,良好的需求管理是软件项目成功的基石。
在 TFS 中,工作项用于记录和跟踪工作。流程(正式称为流程模板)用于协调交付框架术语和工作流。虽然 TFS 预装了 Scrum、敏捷和 CMMI 流程模板,但 TFS 支持自定义现有流程并创建新流程,以最佳方式满足团队的需求。TFS 中的计划和跟踪工具是基于 Web 的,这意味着你可以在任何平台和设备上访问它们。
我们先介绍一些关键概念,以更好地理解 TFS 中的计划和跟踪工具。本章中的所有实例都基于 Scrum 流程模板。
-
工作项:用于记录工作。TFS 为不同类型的工作提供不同类型的工作项。任务、产品待办事项、功能、缺陷、测试用例和反馈响应是 TFS 中可用的不同工作项类型之一。请参考
bit.ly/1WWDPuB
了解更多关于工作项的信息。 -
待办事项(Backlog):这是按优先级排列的工作项列表。TFS 为不同的规划级别提供不同的待办事项。在本章中,您将学习到关于史诗(Epics)、功能(Features)和待办事项(Backlog Items)的内容。TFS 中的待办事项允许您添加新项、优先排序、可视化不同待办事项之间的关系,并查看现有待办事项的状态。现在,您可以配置是否让 BUG 显示在待办事项中。TFS 中的待办事项视图还包括团队速度和累计流量的图表。有关待办事项的更多信息,请参阅
bit.ly/1RZT9Qw
。 -
区域路径(Area Path):这允许您为工作项添加分组维度。区域路径可以按团队、产品或功能区域对工作项进行分组。在团队项目中使用多个团队配置时,区域路径用于将工作项映射到一个团队。区域路径还支持按权限限制对工作项的访问。有关区域路径配置的更多信息,请参阅
bit.ly/1j4baRr
。 -
迭代路径(Iteration Path):这允许您为工作项添加时间维度。迭代路径可以用于将工作项按冲刺、发布或其他事件特定的里程碑进行分组。有关迭代路径配置的更多信息,请参阅
bit.ly/1NAbyQh
。 -
看板(Kanban board):这是一种通过交付工作流程可视化待办事项的方式。TFS 中的每个待办事项都带有一个看板。看板在规划和跟踪待办事项中的工作项时非常有用。
-
冲刺看板(Sprint board):这是一种可视化分配给某个迭代的工作项的方式。冲刺看板可以按待办事项或人员进行可视化。现在可以配置冲刺看板来显示或隐藏 BUG。
-
过程(Process):这定义了在团队项目中遵循的交付框架。工作项类型、状态、工作流、查询和报告都反映了该过程及其术语。有关 TFS 中可用的不同过程的更多信息,请参阅
bit.ly/1Sy1v1D
。
在本配方中,我们将使用 FabrikamTFVC 团队项目。如果您还没有 FabrikamTFVC 团队项目,请通过参考第一章中的使用 Scrum 模板创建团队项目配方来创建一个团队项目。
选择在团队门户上显示的待办事项级别
团队项目中的默认配置仅为每个团队提供两个待办事项级别。在 Scrum 模板中,这两个级别被称为功能(Features)和待办事项(Backlog Items)。
提示
史诗(Epics)是非常高层次的需求,代表着大量的工作。它们被拆解为功能(Features),并在多个冲刺中进行处理。根据bit.ly/1H5j1Kt
,它们也是安全实现所需的。
在本示例中,您将学习如何从团队管理控制台激活史诗积压。
准备工作
要创建新的团队,您需要是项目管理员组的成员。要更改团队设置,您需要是团队管理员。如果您尚未拥有这些权限,请按照bit.ly/1MS1Xn9
上的说明操作。
场景:FabrikamTFVC
团队项目有两个团队,即 FabrikamFeature1 团队和默认的 FabrikamTFVC 团队。
-
FabrikamTFVC 团队:产品负责人、利益相关者和最终用户在史诗和特性积压上进行了大量协作。
-
FabrikamFeature1 团队:开发团队正在按照 FabrikamTFVC 团队优先级制定特性。
FabrikamTFVC 团队负责管理 Fabrikam 的史诗和特性工作项。FabrikamFeature1 团队负责处理由 FabrikamTFVC 团队分配给他们的特性工作项。FabrikamTFVC 团队只希望在其门户中看到两个层级的积压,即史诗和特性。FabrikamFeature1 团队希望在其门户中只看到一个层级的积压,即待办事项。
要创建 FabrikamFeature1 团队,请通过浏览到http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_admin
导航到 FabarikamTFVC 项目控制面板。点击新建团队按钮,输入团队名称为FabrikamFeature1 团队
,然后点击创建团队按钮:
作为团队创建过程的一部分,创建了一个新的区域(FabrikamFeature1 团队),并映射到该团队。所有分配到区域路径 FabrikamFeature1 团队的工作项将显示在 FabrikamFeature1 团队的积压中。
操作步骤…
-
通过浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/FabrikamTFVC%20Team/_admin
导航到 FabrikamTFVC 团队控制面板。点击设置导航到团队设置页面: -
在团队设置页面的积压部分,选中史诗并取消选择待办事项:
-
导航到 FabrikamFeature1 团队控制面板。在团队设置页面的积压部分,取消选择特性:
-
根据以下截图中显示的设置更新团队的积压视图。左侧的FabrikamTFVC团队只有史诗和特性的积压;FabrikamFeature1 团队只有待办事项的积压:
工作原理…
每个团队可以配置在团队门户中显示哪些积压。这使得团队可以专注于他们管理的积压,而不会被他们不使用的积压层级分散注意力。
还有更多内容…
团队设置页面还允许配置工作日。如果一个团队每周只工作 4 天,或者每周的星期一休息,而不是星期天休息,则可以通过更改工作日设置来进行配置。工作日用于计算团队的总容量,并在燃尽图中显示。这样做的目的是避免在燃尽图中显示团队的休息日,以免产生没有工作完成的错误印象。
Bug 工作项类型在积压项和看板上的行为也可以通过团队设置页面进行自定义:
Bug 在积压项和看板上的行为是可配置的,可以在积压项和看板上同时显示需求、在积压项和看板上同时显示任务,或者完全不出现在积压项和看板上。
这些设置都有强有力的论据;你可以在 bit.ly/1PL7SzD
找到一些优缺点。
映射、分配和跟踪多个团队共享的工作项
在一个团队项目中托管多个团队可以帮助你共享工作项、积压项以及其他工件,如代码、构建、测试和发布。在选择在团队门户上显示的积压级别这一食谱中,你学习了如何激活在团队门户上显示的积压级别。在这个食谱中,你将学习如何映射、分配和跟踪分配到多个团队的工作项。
准备工作
场景:FabrikamTFVC 团队项目有三个团队。FabrikamTFVC 团队专注于管理史诗和功能;另外两个团队负责管理他们所拥有的功能的产品积压项:
史诗 1 工作项被拆分为多个功能和产品积压项。FabrikamTFVC 团队希望在将这些工作项分配给不同的团队之前,先进行映射。FabrikamTFVC 团队希望跟踪各团队在史诗 1上的进展。
要设置这个场景,在 FabrikamTFVC 团队项目中创建一个新的团队 FabrikamFeature2 团队
:
接下来,进入 FabrikamTFVC 团队门户并创建以下工作项:
操作方法…
-
打开 FabrikamTFVC 团队的团队网页门户并导航到功能积压项。点击列选项图标,并将区域路径添加为选中的列:
-
切换父项开关为显示。所有孤立的功能(未关联到史诗类工作项的功能)将显示在名为未关联功能的标题下:
-
切换映射开关为开启:
将功能 1拖到史诗 1。这将把史诗 1映射为功能 1的父项。功能待办板会更新,以反映这一变化:
重新父化也可以通过拖放来完成。将功能 3拖到史诗 1下,以将其重新父化为史诗 1:
将功能 3 从未关联功能部分拖到史诗 1 史诗工作项下。
拖放也可以用于层次列表中,以重新排序项的优先级。在以下截图中,功能 1被拖动到最上方,表示它的优先级高于功能 2:
通过简单地拖放,功能 1可以被优先于功能 3。
现在,按准备工作部分所示,映射其他功能和产品待办事项。多选拖放也得到支持:
如准备工作部分所示,映射其他功能和产品待办事项。
-
将产品待办事项分配给FabrikamFeature1和FabrikamFeature2 Team,如准备工作部分所示。通过将区域路径更改为相应团队的区域路径,可以更改团队分配。
-
一旦待办事项的分配发生变化,未分配给 FabrikamTFVC 团队的工作项会在其前面显示一个空心矩形。这简化了跟踪团队拥有的和未拥有的项目:
它是如何工作的…
显示父项允许团队独立于工作项分配给哪个团队来跟踪工作项的完整层次结构。待办事项中的工作项,如果该团队没有拥有,前面会显示一个空心矩形。
总结来说,你学会了如何使用故事映射功能来映射工作项;这还有助于识别未关联的工作项。你还学会了如何在待办事项中拖放工作项,以重新排序待办事项中的工作项优先级。你学会了如何通过启用显示父项开关来查看工作项层级结构。最后但同样重要的是,你还学会了如何识别分配给不同团队的工作。
还有更多…
让我们来看看在待办事项视图中工具栏窗口中的一些有用选项:
-
新建:启动添加新工作项小部件。当你想将一个想法记录到待办事项中时,这非常有用。
-
展开全部:这将展开所有折叠的嵌套待办事项。
-
折叠全部:这将折叠所有展开的嵌套待办事项。
-
创建查询:通过复制用于生成此操作触发的待办事项视图的查询来创建新的工作项查询。
-
列选项:用于在待办事项视图中添加或移除列。此设置是针对每个用户的,您所做的更改不会影响其他用户的视图。
-
电子邮件:此选项会将您在待办事项中看到的视图通过电子邮件发送给您。如果您过滤了项,然后点击电子邮件,它只会显示过滤后的视图中的电子邮件。
-
筛选器:此文本框可在待办事项视图中进行文本搜索。这对于通过搜索关键字来缩小待办事项项的范围非常有用。
注意
TFS 2015 Update 1 提供了对多选拖放分配、重新排序、重新归类、多重编辑、移动到迭代和移动到位置的支持。
向看板添加额外的列
TFS 中的看板提供了待办事项的可视化表示。该看板可以根据贵组织中使用的交付工作流进行建模。在本教程中,您将学习如何向看板中添加额外的列并配置工作流。
提示
“Kanban”(看板)这个名称源自日语,粗略翻译为“告示牌”或“广告牌”。在软件开发的背景下,看板可以指一种可视化的过程管理系统,告诉你该生产什么、何时生产以及生产多少量(bit.ly/1j4bT57
)。
准备工作
您需要是团队管理员或团队项目管理员组的成员,才能自定义看板。
场景:FabrikamFeature1 团队为每个待办事项使用开发、测试和发布工作流,然后标记为完成。团队为周期中的每个阶段设有退出标准。FabrikamFeature1 团队的测试能力有限。为了限制测试中的项,已为开发中的项设置了限制:
如何操作…
-
通过浏览到FabrikamFeature1 Team门户并点击待办事项项待办事项中的看板,导航到 FabrikamFeature1 团队的看板:
-
点击页面右上角的齿轮图标。此图标用于启动设置窗口。齿轮图标左侧的图标是搜索图标,可以用于在待办事项中执行文本搜索。齿轮图标右侧的图标用于将看板视图最大化为全屏模式:
-
在设置窗口中,从看板部分选择列。这将显示现有列的配置。可以为Bug和产品待办事项项(这些是需求类别中的默认工作项类型)配置设置:
通过使用设置窗口添加新列来配置看板
-
点击绿色加号图标添加新列。将列命名为
精化
,设置 WIP 限制为20
并将列拆分为进行中和完成。将此列映射到工作项状态已批准。添加完成定义,如下图所示(完成文本框中写入的文本可以使用 Markdown 格式化): -
将已批准列重命名为
开发
,将状态映射更改为已承诺,将 WIP 限制设置为3
,勾选将列拆分为进行中和完成复选框,并添加完成定义,如下图所示: -
将已批准列重命名为
测试
,设置 WIP 限制为2
,保持工作项状态为已承诺,勾选拆分列为进行中/已完成,并添加完成定义。 -
点击绿色加号图标添加新列。将列命名为
发布
,设置 WIP 限制为5
,不将列拆分为进行中和完成。将此列映射到工作项状态已承诺。添加完成定义。点击保存并关闭返回到待办事项看板。 -
看板板现在已经配置为 FabrikamFeature1 团队用于交付其产品待办事项的交付工作流:
它是如何工作的…
看板板可以在团队级别进行配置,这使团队能够定义并遵循最适合他们的流程。每个待办事项列表可以配置一个看板板。因此,如果团队有史诗、功能和待办事项,则团队将有三个看板板,可以自定义并用于管理工作。
传统上,流程需要自定义以在工作项中添加额外的状态。2013 年,产品中引入了一种新的扩展性模型——WIT 扩展。WIT 扩展允许创建新的工作项字段,并将其关联到工作项状态,而无需对工作项进行任何自定义。有关 WIT 扩展如何在运行时动态更新工作项定义的更多信息,请访问bit.ly/1N7FAAt
。
在我们在此配方中所涉及的场景中,Dev、Test和Release字段都与已承诺状态相关联。当工作项从Approved转换为Committed时,它会出现在Dev / Doing列中。负责该工作项的人员可以在更改完成且符合完成定义后,将工作项提升到Dev / Done列。工作项的状态将继续显示为Committed。当负责测试的人员准备好测试更改时,工作项可以拉入Test / Doing列。工作项的状态将继续显示为Committed。当更改经过测试并符合完成定义时,可以将工作项提升到Test / Done列。工作项的状态将继续显示为Committed。一旦团队准备好安排发布,工作项可以拉入Release列。工作项的状态将继续显示为Committed。
一旦更改成功发布,工作项可以移至Done列。这将更新工作项的状态,从Committed变为Done:
工作项状态转换历史
工作项字段转换历史,显示从 Dev\\Done 列到 Test\\Doing 列的转换
将列拆分为Doing和Done可以更好地展示工作的进展。看板上的工作项字段用于生成累积流图。该图提供了每列花费时间的可视化表示。这对于识别价值流动和交付过程中的潜在瓶颈非常有用:
累积流图
注意
累积流图上的日全食可以用来定制图表的开始日期。
看板还让你监控在制品(WIP)的数量。例如,如果Test列中的在制品数量超过 3 个限制,WIP 会变成红色,表示违反限制。
点击列名旁的信息图标可以显示完成定义,如下图所示:
点击信息图标显示完成定义
看板还支持折叠New和Done列。看板也可以最大化为全屏视图。
还有更多…
任务可以直接从看板中添加到产品待办事项中。看板还会显示工作项卡上的已完成任务数与总任务数的对比:
可以直接从产品待办事项卡片中添加任务到看板。
看板还支持横向泳道。最常见的用法是创建“加急泳道”,用于紧急工作,可以跳过队列并抢先处理其他工作。泳道可以从设置窗口配置;可以通过点击看板上的齿轮图标来启动设置窗口:
配置窗口允许配置泳道的顺序。在此情况下,加急泳道会显示在默认泳道上方。泳道可以折叠。工作项可以在泳道之间移动,泳道的移动也会在工作项历史记录中进行跟踪。
在 TFS 2015 Update 1 中,新增了三个字段:Board Column、Board Column Done 和 Board Lane,用于在看板上查询工作项。以下截图演示了如何查询 FabrikamFeature 1 团队看板上默认泳道中的所有工作项,且这些工作项被分配到测试 / 进行中列:
看板列现在可以进行查询、图表分析和提醒。有关使用案例和设置操作指南,请参考bit.ly/1MS3QA8
。
自定义显示在看板上的卡片
看板有助于可视化、跟踪和共享待办项的进展。另一方面,冲刺看板帮助可视化、跟踪和共享团队在冲刺中的进展。Web 门户中的这两个看板都是有用的信息发布器,有助于工作计划和跟踪。工作项以卡片形式显示在看板上。在 TFS 2015 及 Update 1 版本中,看板新增了多个功能,使得卡片更加可操作。在本指南中,您将学习如何自定义卡片,显示附加的工作项字段,并根据规则对卡片进行样式化。
准备工作
您需要是团队管理员或团队项目管理员组的成员,才能自定义团队设置。
本指南中的场景:FabrikamFeature1 团队希望在所有待办项卡片上显示工作项 ID、标签、创建者、工作量、优先级和价值领域字段。该团队仅希望在 Bug 卡片上显示创建者、分配给和标识于字段。该团队希望所有优先级为 1 的项目卡片使用粗体标题和灰色背景。
如何操作…
-
在 FabrikamFeature1 团队门户中,通过浏览
https://tfs2015:8080/tfs/FabrikamTFVC/FabrikamFeature1%20Team/_backlogs/board/Backlog%20items
进入待办事项视图。 -
导航到看板视图并点击齿轮图标以启动设置窗口。在设置窗口中,从卡片部分选择字段。
-
在产品待办项标签页中,勾选所有核心字段:
-
从附加字段中添加价值领域、创建者和优先级字段:
-
默认情况下,如果工作项卡片中的字段没有值,则该字段会被隐藏。你可以选择通过勾选显示空字段复选框来更改此行为:
-
切换到Bug标签页,并选择所有核心字段。在附加字段中,添加识别于字段。
-
在设置窗口中,从卡片部分下选择样式。添加一个新的样式规则,并将规则命名为
Priority 1
。将卡片颜色更改为灰色,并将卡片标题设置为粗体。在规则标准中,设置规则标准为priority = 1。一个规则标准中可以添加多个字段:注意
请注意,每个看板和冲刺板的样式规则可以单独配置。
-
点击保存并关闭。看板中的工作项将刷新,并根据规则显示额外的工作项字段和样式。样式规则使得包含重要信息的卡片更为突出。当一个工作项符合多个规则时,将使用第一个规则。
卡片上的所有工作项字段可以直接在卡片内更新,这使得卡片更加具有操作性。
设置团队的容量和活动以进行一个冲刺
在本章前面的配方中,你了解了产品待办事项。如果产品待办事项是工作的需求,那么冲刺待办事项则是完成这些工作的计划。为了规划冲刺的工作,团队需要了解总的可用容量。直到 TFS 2015,团队容量功能仅限于每个成员每个冲刺一个活动。在本配方中,你将学习如何为每个团队成员在冲刺中输入多个活动和容量。
准备工作
场景:FabrikamFeature1 团队将在明天开始为期两周的下一次冲刺。团队由八名成员组成,其中几位成员在此期间有计划的假期。团队希望了解本次冲刺的总可用容量。
要添加一个新的冲刺并配置冲刺的开始和结束日期,请通过浏览http://tfs2015:8080/DefaultCollection/FabrikamTFVC/FabrikamFeature1%20Team/_admin
导航到 FabrikamFeature1 团队的控制面板,并切换到迭代标签页。点击新建子项按钮,在 FabrikamTFVC 下添加一个新的迭代;双击该迭代以设置日期:
如何操作…
-
通过浏览
http://tfs2015:8080/DefaultCollection/FabrikamTFVC/FabrikamFeature1%20Team/_backlogs
,导航到 FabrikamFeature1 团队工作中心。新添加的冲刺将在此页面的左侧显示。点击Sprint 1并转到容量标签页: -
点击添加缺失的团队成员图标(如图中所示),以添加所有缺失的团队成员:
-
设置活动和每天的小时数,如以下截图所示。使用行末的省略号为个人添加多个活动:
-
John 在本次冲刺中无法参与团队工作。通过点击行末的省略号并在上下文菜单中选择删除该用户,将 John 从列表中删除:
-
点击团队休假日旁边的日期超链接,以更新团队的休假日,如以下截图所示:
个人的休假天数可以通过点击休假日列中的日期超链接来更新,这有助于使团队容量更加准确。
-
点击保存图标保存团队的容量。团队的总容量、按活动划分的团队容量和每个团队成员的容量会在工作详情面板中更新。
如何操作…
在选择在团队门户上显示的待办事项层级的教程中,你了解到团队的工作日是通过团队设置窗口进行配置的。团队的工作日用于推算冲刺的总工作小时数。任何团队或个人的休假天数都会从总工作小时数中扣除;这有助于我们得出团队在冲刺中的可用容量。在工作详情部分,活动和个人会影响团队容量。
团队容量在规划冲刺活动时非常有用;在跟踪进度和在团队成员之间平衡工作时同样有用。要查看工作详情面板的操作,拖动产品待办事项 1到冲刺 1。使用产品待办事项旁边的**+**符号创建一些任务,如以下截图所示:
现在,切换到冲刺板,并通过更改卡片上的分配给字段将这些任务分配给团队成员。你可以选择性地将冲刺板上的按人分组字段从待办事项改为人员,这有助于你按个人查看任务分配。现在,切换回待办事项视图;工作详情部分会更新,反映出按活动和个人的工作分配情况:
任务可以直接分配给工作分配面板中的个人。如以下截图所示,PBI 1 – 任务 2被通过拖动任务到 Chris 的工作分配面板中,分配给了 Chris:
当团队、活动或个人分配的工作超过可用容量时,工作分配面板中的容量条会变红。
还有更多…
Sprint 燃尽图帮助你识别冲刺中的工作完成趋势,并展示冲刺中剩余的工作量。Web Portal 中的 Sprint 燃尽图还显示了可用的工作容量和理想燃尽量。关于 Sprint 燃尽图的更多信息可以参考bit.ly/1MiMTlm
。
速度代表团队在一次冲刺中完成的总工作量。一旦团队完成了几个冲刺,你就可以开始看到已完成工作的趋势。这些数据对于预测未来冲刺的工作量非常有用。关于速度计算的更多信息可以参考bit.ly/1H5nkoU
。
通过标签查询工作项
工作项标签是将关键词与工作项关联的好方法。这些关键词作为元数据帮助你对工作项进行分组、搜索和过滤。在本教程中,你将学习如何通过标签查询工作项。
Getting ready
所有项目有效用户组成员都有权限创建标签。利益相关者的访问级别不允许创建标签。利益相关者只能使用已有标签标记工作项。
场景:FabrikamTFVC 团队有一个功能待办事项列表,他们希望通过发布预计将要发布的功能来进行标记。尚未审核的功能需要标记为Pending Review。产品负责人希望创建一个工作项查询,查询标签为发布版本 1(排除任何标记为阻塞的工作项)的工作项,并将查询结果与利益相关者共享。
可以通过打开工作项表单并点击添加图标来为工作项添加标签。从列表中选择现有标签或添加新标签:
在 FabrikamTFVC 功能待办事项中,将需要在版本 1 中发布的功能标记为R1,版本 2 中发布的功能标记为R2,尚未审核的功能标记为Pending Review:
将需要在版本 1 中发布的功能标记为 R1,版本 2 中发布的功能标记为 R2,尚未审核的功能标记为 Pending Review。
How to do it…
-
若要查看预计将在R1中发布的工作项,请导航到 FabrikamTFVC 团队门户中的功能待办事项。点击漏斗按钮加载标签工具栏;标签工具栏按计数显示标签列表:
-
点击R1,筛选出标记为 R1 的功能待办事项。其中一个标记为R1的项目也被标记为Blocked。点击All以移除标签筛选条件:
-
从工作中心导航到查询页面。点击New图标,从下拉菜单中选择新查询。在查询编辑窗口中,添加一个标签的过滤条件,如下图所示:
-
如果你希望在不保存查询的情况下复制此查询的 URL,可以点击复制查询 URL按钮:
-
从弹出窗口按Ctrl + C复制。将此 URL 通过电子邮件发送给利益相关者。该 URL 将直接显示工作项结果。该临时 URL 将在 90 天后自动过期:
还有更多…
看板板块支持通过标签进行样式设置。此自定义可以在待办视图中的团队设置窗口中进行。若为一个标签指定了多个样式规则,则第一个匹配规则优先。在下面的截图中,标签R1已设置为黄色:
使用工作项查询创建图表
工作项查询(WIQ)提供了根据具体需求筛选工作项的方法。WIQ 使用一种名为工作项查询语言(WIQL)的自定义语言;该语言的复杂性被隐藏在工作项查询编辑器之后。WIQ 返回工作项列表,有时你可能需要可视化工具来分析结果。数据可视化工具有助于发现那些可能被忽略的趋势。团队门户中的轻量级图表功能允许你使用 WIQ 创建图表。在这个教程中,你将学习如何使用 WIQ 创建并共享图表。
准备开始
利益相关者访问级别不允许创建图表。需要基础或高级访问级别才能创建图表。
场景:FabrikamFeature1 团队希望追踪过去 12 周应用程序中未解决的 BUG 趋势。
以下截图展示了如何使用筛选条件创建新的 WIQ。点击列选项图标,将状态列包含在查询结果中:
将查询保存为FabrikamFeature1 Bugs - Open
并存入我的查询
文件夹:
如何操作…
-
在查询页面,打开FabrikamFeature1 Bugs - Open查询并点击图表标签:
-
点击**+图标以启动新图表窗口,从趋势部分选择区域**,并将图表命名为
Feature1 Bugs 12 Weeks - Trend
。将范围更改为 12 周: -
你可以通过点击图表并从颜色选择器中选择颜色来编辑图表的颜色。点击图表并选择红色。点击确定关闭:
-
新图表已加载到图表标签中:
-
如果你点击图表右上角的日蚀图标,你将看到编辑或删除图表的选项。为了与团队分享图表,首先需要共享基础的工作项查询。将工作项查询从
我的查询
拖动到共享查询
文件夹中:将工作项查询从“我的查询”拖动到“共享查询”
-
现在图表中的“日食”图标让你可以将图表分享至某个仪表板。选择技术债务仪表板(仪表板可以自定义;请参考第一章中的配置团队项目仪表板配方,团队项目设置):
-
图表被添加到技术债务仪表板:
它是如何工作的……
在 Web 门户中可以创建两种类型的图表:快照图表和趋势图表。快照图表只是将工作项查询的结果表示在图表上。趋势图表使用 TFS 中的数据,计算所选时间段内的查询结果。趋势图表可以显示最多过去一年的趋势。
图表是使用事务数据库中的工作项数据计算得出的。当工作项更新时,图表会立即反映更新。只有平面工作项查询可以用于创建图表。如果你尝试使用其他查询类型创建图表,将显示以下警告消息:
使用服务钩子集成 Trello 看板
传统上,依赖于 TFS 数据的应用程序会不断轮询 TFS 以检查更新。服务钩子是 TFS 2015 中引入的新功能,提供了将 TFS 中的事件级联到另一个应用程序的方式。当一个应用程序在 TFS 中注册事件通知时,会在 TFS 与该应用程序之间创建一个安全队列。当该应用程序注册的事件在 TFS 中发生时,它会立即发布到应用程序。这消除了应用程序需要轮询 TFS 以检查更新的需求。
如果你不熟悉 Trello,它是一个非常棒的基于 Web 的工具,帮助你设置几乎所有任务的看板。许多组织使用 Trello 看板进行产品规划。你可以在 trello.com
了解更多关于 Trello 的信息。
在本配方中,你将学习如何创建一个服务钩子,将来自 TFS 团队门户的新功能工作项安全发布到 Trello 的看板上。
准备工作
权限:要配置服务钩子,你需要是团队项目管理员组的成员。
在接下来的几步中,我们将配置一个 Trello 看板,用于后续发布数据:
-
通过浏览
trello.com/signup
进入 Trello 注册页面。输入你的详细信息并点击创建新账户按钮。 -
使用你的帐户登录 Trello,并创建一个新团队。将团队命名为
Fabrikam
: -
创建一个新的看板并命名为
Feature Tracker
:点击“看板”以创建 Fabrikam 团队的新看板,并将看板命名为 Feature Tracker
-
导航至Feature Tracker看板,添加待办事项、进行中和已完成列表:
如何操作…
-
通过浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_admin/_servicehooks
导航到 FabrikamTFVC 服务钩子,进入团队管理控制台:为项目创建第一个订阅
-
点击为该项目创建第一个订阅超链接,并从新订阅窗口中选择Trello。点击下一步以进入触发器窗口。
-
在触发器窗口中,将选择更改为工作项创建事件,设置区域路径为FabrikamTFVC,工作项类型为功能。点击下一步:
-
在设置窗口中,选择立即获取超链接以获取授权令牌。该令牌由 Trello 发放,允许 TFS 访问你的 Trello 看板:
-
点击登录并使用 Trello 登录信息进行身份验证:
-
复制 Trello 发放的授权令牌:
-
在服务钩子触发器配置窗口中,输入如下截图所示的详细信息:
-
点击测试以使用配置触发测试:
-
点击完成以完成配置。
-
要尝试 TFS 和 Trello 之间的集成,浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_backlogs#level=Features
导航到 TFVC 功能待办事项。向待办事项中添加一个新功能,如下截图所示: -
现在,导航到 Trello 看板。此功能也已在 Trello 中的Feature Tracker看板中创建:
如何运作…
当 TFS 中发生事件时,项目中所有启用的订阅都会被评估。对于所有匹配的订阅,都会执行消费者动作。在这种情况下,Trello 的订阅被执行,结果是在 Feature Tracker 看板的待办事项列表中生成一张新卡片。
团队管理控制台中的服务钩子配置屏幕显示了 14 天内每个订阅的流量情况:
服务钩子配置窗口允许你配置卡片标题和描述的格式。向导支持占位符表达式。在以下截图中,卡片标题被配置为工作项类型 #工作项编号: 工作项标题
格式:
使用服务钩子将数据从 TFS 发布到其他系统时,有一点非常重要,那就是 TFS 权限不会级联到其他系统。例如,FabrikamTFVC 团队有四个成员;但是,如果 Trello 看板是公开的,那么工作项卡片将对任何人可见。
还有更多…
TFS 还提供了其他的服务钩子。可以在bit.ly/1l0OZgi
找到支持的服务钩子完整列表。
永久删除 TFS 中的工作项
工作项用于在 TFS 中捕获、规划和跟踪工作。工作项中的 历史 标签提供了对该工作项所做更改的完整审计跟踪。创建一个后续决定不再需要的工作项是常见的做法。可以通过将工作项状态更改为 已移除,从待办事项中排除该工作项;但是,工作项并未被删除。目前,用户界面中没有永久删除工作项的功能。在本食谱中,您将学习如何使用 witadmin
命令行工具永久删除工作项及其所有历史记录。
提示
使用witadmin
命令删除工作项会将工作项永久从 TFS 数据库中移除,无法恢复或重新激活。
准备工作
要使用 witadmin
命令删除工作项,您需要是该集合中项目管理员组或团队基础管理员组的成员。
如何操作…
-
以提升权限打开 Visual Studio 开发人员命令提示符并运行以下命令。导航至
Common7\\IDE
文件夹: -
运行以下命令以永久删除工作项 ID:
15
、16
和17
:witadmin destroywi /collection:http://tfs2015:8080/tfs/DefaultCollection /id:15,16,17
-
当提示时,按 Y 以确认此操作不可恢复:
工作原理…
witadmin
命令行工具集包含一系列命令和开关,允许您在团队项目中导入、导出和管理工作项。在本食谱中,我们使用了detroywi
命令,它会永久删除命令中指定的工作项。
由于工作项 ID 在整个集合中是唯一的,因此无需提供团队项目名称;/collection
开关用于指定工作项所属的团队基础集合。/id
开关用于指定一个或多个工作项 ID。/noprompt
开关可以选择性地用于禁用确认提示。
使用 Microsoft Feedback Client 提供反馈
与利益相关者保持持续的反馈循环有助于软件开发团队生产更好的软件。有时,来自利益相关者的反馈会丢失,因为它是口头的,或者根本没有被跟踪。开发团队与利益相关者之间的反馈循环可以通过使用简化反馈捕捉和跟踪的工具来改进。在本食谱中,您将学习如何使用 Microsoft Feedback Client 提供反馈。
准备工作
本食谱要求您安装 Microsoft Feedback Client。可以从bit.ly/1H5osc8
下载独立安装程序。
提示
提交反馈不需要许可证。由于 TFS 中没有匿名用户的概念,反馈只能从 TFS 中已设置的用户请求。所有拥有相关权限的利益相关者可以通过响应反馈请求或选择性地通过 Microsoft Feedback Client 提交反馈。不过,请求反馈和查看已提交的反馈需要高级许可证。
在接下来的几个步骤中,您将学习如何从团队 Web 门户中提出反馈请求:
-
转到 FabrikamFeature1 团队的 Web 门户。在“其他链接”部分,点击请求反馈:
注意
如果您看不到请求反馈超链接,说明您的访问类型设置不正确。请将自己添加到高级访问类型中。
-
这将启动反馈请求窗口。反馈请求表单包括一个部分,用于提供有关如何启动应用程序的信息,一个部分,用于指定反馈应关注的内容,最后但同样重要的,是一个部分,用于指定您希望征求反馈的用户列表。按照以下截图所示填写反馈请求表单。
-
输入您希望请求反馈的人员的姓名:
注意
您不能请求没有 TFS 访问权限的用户提供反馈。
-
指定用户如何访问应用程序。可用的选择有Web 应用程序、远程机器和客户端应用程序。这将生成一个可操作的链接,用户可以点击该链接直接从反馈请求启动应用程序:
-
通过指定您希望收到反馈的区域来提供方向。可以通过点击添加反馈项超链接添加多个反馈项:
-
点击预览图标以预览反馈请求:
-
点击发送后,反馈请求将发送给 John 和 Tom。
如何做…
-
利益相关者收到反馈请求电子邮件。可以通过点击电子邮件中的开始反馈会话超链接来启动反馈会话。当会话开始时,您会注意到反馈请求表单中填写的说明会加载到反馈会话中:
-
Microsoft 反馈客户端允许屏幕和语音录制,并且在反馈捕获过程中可以包含截图和附件,以及评论:
-
也可以在反馈响应中添加总体评分:
-
一旦反馈响应完成,团队门户中的反馈响应瓷砖将反映这一变化:
反馈响应
它是如何工作的…
反馈响应记录在工作项中。如下面的截图所示,工作项包含了通过 Microsoft Feedback Client 捕获的所有详细信息。作为工作项的反馈响应,能为你提供工作项的所有优势。我们已经在本章中介绍了其中的一些功能,例如跟踪、标记、固定、仪表板和报告:
反馈响应记录在工作项中。工作项的状态部分显示了反馈项的创建者、分配对象、状态和总体评分。
第四章:构建你的应用程序
TFS 在 TFS 2015 中推出了一种新的构建系统,叫做 TFBuild。在本章中,你将学习以下内容:
-
配置 TFBuild 代理、池和队列
-
使用无人值守安装设置 TFBuild 代理
-
在 TFBuild 中创建持续集成构建定义
-
将构建徽章固定到团队门户的欢迎页面
-
使用基于角色的访问管理构建资源
-
使用构建保留策略自动删除构建
-
使用用户能力识别池中的构建代理
-
在构建输出中使用构建号版本化 DLL
-
使用 TFBuild 扩展框架创建新构建任务
-
将 SonarQube 与 TFBuild 集成以管理技术债务
-
使用 TFBuild 构建 GitHub 代码库
介绍
作为开发人员,编译代码并运行单元测试可以确保你的代码更改不会影响现有的代码库。将代码更改集成到源代码控制库中,能够让其他用户验证他们的更改是否与你的更改兼容。作为最佳实践,团队通常每天将更改多次集成到共享库中,以减少引入破坏性更改或更糟糕的情况——互相覆盖的风险。
提示
持续集成(CI)是一种开发实践,要求开发人员每天多次将代码集成到共享的代码库中。每次提交都会通过自动构建进行验证,从而帮助团队及早发现问题。
作为 CI 过程的一部分运行的自动化构建通常被称为 CI 构建。关于 CI 构建应该做什么并没有明确的定义,但最基本的要求是编译代码并运行单元测试。在非开发者的远程工作区上运行 CI 构建,有助于发现那些可能被忽视的依赖关系,避免它们进入发布流程。我们可以无休止地讨论 CI 的好处;关键是它使你能够随时拥有潜在的可部署软件。
提示
可部署的软件是客户最为看重的实际资产。
从概念到应用,在本章中,你将学习如何利用 TFS 中的构建工具来设置一个以质量为中心的持续集成(CI)过程。但首先,让我们简单了解一下 TFS 中的构建系统。下图展示了 TFS 中构建系统的三代演变:
TFS 经历了三代构建系统。最初的是使用 XML 配置的 MSBuild;接下来是使用 Windows Workflow Foundation 配置的 XAML;现在是使用 JSON 配置的 TFBuild。基于 XAML 的构建系统将在 TFS 2015 中继续得到支持。XAML 构建系统无法自动迁移到 TFBuild,这通常是因为这两种构建系统架构的差异。
TFS 中的新构建系统称为 Team Foundation Build(TFBuild)。它是一个可扩展的基于任务的执行系统,具有丰富的 web 界面,允许创建、排队和监视构建。TFBuild 完全支持跨平台,底层构建代理能够在 Windows 和非 Windows 平台上原生运行。TFBuild 提供开箱即用的集成,支持集中版本控制(如 TFVC)以及分布式版本控制(如 Git 和 GitHub)。TFBuild 支持构建 .NET、Java、Android 和 iOS 应用程序。本章中的所有示例都基于 TFBuild。
TFBuild 是一个任务协调器,允许你运行任何构建引擎,如 Ant、CMake、Gradle、Gulp、Grunt、Maven、MSBuild、Visual Studio、Xamarin、XCode 等。TFBuild 支持工作项集成、发布构建产物和将测试执行结果发布到 TFS,与所选择的构建引擎无关。构建代理是可直接复制的,无需任何安装。代理会自动更新,因此无需更新基础设施中的每个代理:
TFBuild 提供了丰富的基于 web 的界面。它不需要 Visual Studio 来创建或修改构建定义。从简单到复杂,所有构建定义都可以轻松地在 web 门户中创建。该 web 界面可以在任何设备和任何平台上访问:
可以直接从 web 门户编写构建定义
构建定义是任务的集合。一个任务就是一个构建步骤。构建定义可以通过拖放任务来组成。每个任务都支持 启用、遇到错误继续执行 和 始终运行 标志,使得随着任务列表的增长,构建定义的管理变得更加容易:
构建系统支持调用 PowerShell、批处理、命令行和 shell 脚本。所有开箱即用的任务都是开源的。如果某个任务不满足你的需求,你可以从 GitHub 下载该任务:github.com/Microsoft/vso-agent-tasks
并进行自定义。如果你找不到某个任务,你也可以轻松创建一个。在本章中,你将了解更多关于自定义任务的内容。
构建定义的更改可以保存为草稿。构建定义在历史标签中保持所有更改的历史记录。还可以进行更改的并排对比。更改构建定义时输入的评论会显示在更改历史记录中:
构建定义可以保存为模板。这有助于在新的构建定义中标准化某些任务的使用:
现有的构建定义可以保存为模板
同一个构建可以设置多个触发器,包括 CI 触发器和多个定时触发器:
基于规则的保留策略支持设置多个规则。保留可以按“天”或“构建数量”来指定:
构建输出日志会在 Web 门户中实时显示。即使构建完成后,构建日志也可以从控制台访问:
构建报告经过改版,提供了更多关于构建执行的可见性,除此之外,测试结果现在可以直接从 Web 界面访问。.trx
文件不需要下载到 Visual Studio 中查看测试结果。我们将在第五章,测试你的应用程序中详细介绍这一点:
旧的构建系统对每个构建控制器的团队项目集和每台构建机器的控制器有限制。TFBuild 取消了这一限制,支持在多个团队项目集之间重用队列。以下图示展示了新构建系统的架构:
在前面的图中,我们观察到以下内容:
-
可以在一台机器上配置多个代理
-
来自不同机器的代理可以被分组到一个池中
-
每个池只能有一个队列
-
同一个队列可以在多个团队项目集之间共享
为了演示 TFBuild 的功能,我们将使用 FabrikamTFVC 和 FabrikamGit 团队项目。如果你还没有这些团队项目,可以按照第一章,创建一个使用 Scrum 模板的团队项目的食谱操作。
配置 TFBuild 代理、池和队列
在本食谱中,你将学习如何配置代理并创建池和队列。你还将学习如何在多个团队项目集之间使用队列。
准备工作
场景:在 Fabrikam,FabrikamTFVC 和 FabrikamGit 团队项目需要各自的构建队列。FabrikamTFVC 团队的构建过程可以在 Windows 服务器上执行,而 FabrikamGit 团队的构建过程需要同时支持 Windows 和 OS X。团队希望在 Windows 服务器上设置三个构建代理,在 OS X 机器上设置一个构建代理。团队还希望将两个 Windows 代理分组到一个 Windows 池中,供 FabrikamTFVC 团队使用,并将一个 Windows 代理和一个 Mac 代理分组到另一个池中,供 FabrikamGit 团队使用:
权限:要配置构建代理,您应该属于构建管理员组。
在 Windows 系统上设置构建代理的前提条件如下:
-
构建代理应安装支持的 Windows 版本。支持的版本列表可以在
msdn.microsoft.com/en-us/Library/vs/alm/TFS/administer/requirements#Operatingsystems
中找到。 -
构建代理应安装 Visual Studio 2013 或 2015。
-
构建代理应安装 PowerShell 3 或更高版本。
如果您选择保留 Configure the build service to start automatically 选项,构建代理将在 TFS 服务器安装过程中为您配置:
在本例中,我们将从头开始配置代理。通过导航到 TFS 管理控制台中的 Agent pools 选项 http://tfs2015:8080/tfs/_admin/_AgentPool
来删除默认池或您创建的任何其他池:
如何操作
-
登录到您希望设置代理的 Windows 机器。通过浏览器访问
http://tfs2015:8080/tfs/_admin/_AgentPool
,在 TFS 管理控制台中导航到 Agent pools。点击 New Pool,将池名称设置为Pool 1
,并取消勾选 Auto-Provision Queue in Project Collections: -
点击 Download agent 图标。将下载的文件夹复制到
E:\\
并解压到E:\\Win-A1
。您可以使用任何驱动器,但建议使用非操作系统驱动器: -
以管理员身份运行 PowerShell 控制台,并将当前路径更改为代理所在的位置,这里是
E:\\Win-A1
。在 PowerShell 控制台中调用ConfigureAgent.ps1
脚本并按 Enter 键。这将启动构建代理配置工具: -
按照以下截图所示输入配置详细信息:
提示
建议将构建代理安装为服务;但您也可以选择将代理作为交互式进程运行。如果您想调试构建或临时将机器用作构建代理,这个选项非常有用。
配置过程会创建一个 JSON 设置文件,并创建工作和诊断文件夹:
-
在 TFS 管理控制台中刷新代理池页面,新的配置代理将在池 1下显示:
-
重复步骤 2 到 5 以在池 1中配置Win-A2。重复步骤 1 到 5 以在池 2中配置Win-A3。值得注意的是,每个代理都从各自的文件夹中运行:
-
现在,登录到 Mac 机器并启动终端:
-
通过运行这里显示的命令来全局安装代理安装程序。你将需要输入机器密码以授权安装:
这将在用户配置文件中下载代理,如下所示:
下载代理时执行的操作摘要
-
运行以下命令以在用户配置文件中全局安装代理安装程序:
-
运行以下命令将为代理创建一个名为
osx-A1
的新目录;在该目录中创建代理: -
代理安装程序已从用户配置文件复制到代理目录,如下所示:
-
传递以下显示的参数以配置代理:
-
这完成了在 Mac 上配置 xPlatform 代理的过程。在 TFS 管理控制台中刷新代理池页面,查看代理是否出现在池 2中:
-
构建代理已在团队基础服务器级别进行配置。为了将构建代理用于团队项目集合,必须在构建代理和团队项目集合之间建立映射。这是通过创建队列来完成的。要配置队列,请通过访问
http://tfs2015:8080/tfs/DefaultCollection/_admin/_BuildQueue
,导航到集合管理控制台。在构建选项卡中,点击新建队列;此对话框允许你将池作为队列引用: -
将池 1映射为队列 1,将池 2映射为队列 2,如下所示:
-
现在,TFBuild 代理、池和队列已经准备好使用。管理控制台中代理名称和队列前面的绿色条表示代理和队列处于在线状态。
它是如何工作的…
要测试该设置,请通过访问http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_build
,导航到 FabrikamTFVC 团队项目构建中心,创建一个新的构建定义。点击添加新建构建定义图标。在常规选项卡中,你会看到队列出现在队列下拉菜单中。这确认队列已正确配置,并可以在构建定义中进行选择:
池可以跨多个团队项目集合使用。如以下截图所示,在团队项目集合 2 中,点击 新队列… 会显示现有的池已经在默认集合中映射:
使用无人值守安装设置 TFBuild 代理
新的构建框架允许通过脚本注入一组参数值来无人值守地设置构建代理。此技术可用于启动新的代理,并将其附加到现有的代理池中。在本配方中,您将学习如何通过脚本配置和卸载构建代理。
准备工作
场景:FabrikamTFVC 团队希望能够通过脚本直接安装、配置和卸载构建代理,而无需通过团队门户进行此操作。
权限:要配置构建代理,您需要属于构建管理员组(Build Administrators Group)。
按照之前的配方 配置 TFBuild 代理、池和队列 下载构建代理。将该文件夹复制到E:\\Agent
。脚本会引用这个Agent
文件夹。
如何操作…
-
以提升权限模式启动 PowerShell,并执行以下命令:
.\\Agent\\VsoAgent.exe /Configure /RunningAsService /ServerUrl:\"http://tfs2015:8080/tfs\" /WindowsServiceLogonAccount:svc_build /WindowsServiceLogonPassword:xxxxx /Name:WinA-10 /PoolName:\"Pool 1\" /WorkFolder:\"E:\\Agent\\_work\" /StartMode:Automatic
提示
请相应地替换用户名和密码的值。
执行脚本将产生以下输出:
-
该脚本通过名称为WinA-10的代理作为 Windows 服务运行,服务帐户为
svc_build
。该代理被添加到Pool 1: -
要卸载WinA-10,请在提升权限的 PowerShell 提示符下运行以下命令:
.\\Agent\\VsoAgent.exe /Unconfigure \"vsoagent.tfs2015.WinA-10\"
提示
要卸载,脚本需要从
Agent
文件夹的范围之外执行。从Agent
文件夹范围内运行脚本将导致错误信息。
工作原理…
新的构建代理本身支持通过脚本进行配置。未来的 TFS 2015 更新将发布一种新的功能,称为个人访问令牌(PAT)。PAT 允许您为特定范围生成个人 OAuth 令牌;它取代了将密码输入配置文件的需求。
在 TFBuild 中创建一个持续集成构建定义
在本配方中,您将学习如何编写一个持续集成构建定义。
准备工作
场景:FabrikamTFVC 团队希望设置一个在每次代码提交时执行的构建定义。团队希望使用Pool 1来运行此构建定义,该池已安装所需的框架来编译代码并执行单元测试。
要创建新的构建定义,您需要拥有构建定义作者或构建者的权限。可以通过将自己添加到构建管理员安全组中来授予此权限。
如何操作…
-
通过浏览到
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_build
,导航到 FabrikamTFVC 团队门户中的构建中心。点击**+图标以创建新的构建定义。在定义模板窗口中选择Visual Studio**:这将加载一个名为New Visual Studio definition 1的空构建定义:
-
导航到常规标签,按照以下截图中的示例设置各字段:
构建作业超时允许你输入构建作业需要执行的最短时间,在此时间之前服务器会取消该构建。此字段中的空值或
0
值表示无限超时。构建作业授权范围的默认值是项目集合。只有当构建定义需要访问团队项目范围外的资源时,才应使用项目集合。
构建号格式的默认值为
$(date:yyyyMMdd)$(rev:.r)
。作为开发最佳实践,建议始终在构建输出的 DLL 文件中打印构建号。此方法不适用于默认的构建号格式。将构建号格式更改为程序集版本格式,例如1.0.$(date:yyyyMMdd)$(rev:.r)
。有关构建号宏的完整列表,请访问msdn.microsoft.com/en-us/library/hh190719.aspx
。 -
导航到代码库标签。它允许你为构建指定源代码控制设置。按照以下截图中的示例设置各字段。清理字段会强制每次构建都重新创建服务器工作区。通常,在构建之前清理工作区会使构建时间更长。如果只想将增量变更拉入构建工作区,请将该值设置为false。标签源会标记构建定义构建的代码版本。此处指定的标签格式字段将创建标签名称,格式为
BuildDefinitionName_BuildNumber
: -
导航到触发器标签并勾选 CI。按照此处截图中的示例配置过滤器。批量更改设置允许将为同一构建排队的多个提交合并成一个单一的 CI 构建:
配置 CI 时需要应用至少一个过滤器。在设置为包含的路径下所做的任何检入都会触发构建定义。排除过滤器用于排除指定路径下的检入,避免触发构建定义。在这种情况下,任何在
$/FabrikamTFVC/Main/Source/lib
文件夹下的检入都不会触发此构建定义。导航到选项选项卡并按下图所示设置字段。多配置允许你在同一次构建过程中构建多个配置。如果构建的代码具有平台依赖性,建议将多个配置作为同一构建定义的一部分进行构建。选中并行后,多个配置的构建可以并行执行: -
现在,导航到构建选项卡。新的构建引擎以协调者的形式出现。需要在构建选项卡中指定协调的步骤。正如你在构建选项卡中看到的那样,四个构建步骤——Visual Studio Build、Visual Studio Test、索引源并发布符号以及发布构建工件——会通过所选模板预先添加给你。点击Visual Studio Build并更新下图所示的字段:
构建选项卡包括 Visual Studio Build、Visual Studio Test、索引源并发布符号,以及发布构建工件任务。这些任务在使用 Visual Studio Build 模板创建新构建定义时会自动添加。
-
选择你希望编译的解决方案的路径。将其保持为默认值
**/*.sln
将会构建Repositories选项卡中指定路径下的所有解决方案。 -
MSBuild 参数文本框允许你传递额外的 MSBuild 参数。MSBuild 参数的完整列表可以在
msdn.microsoft.com/en-us/library/ms164311.aspx
找到。 -
你会注意到平台和配置已预先配置了一个变量。变量使你能够集中管理值,而不是将它们硬编码到构建定义中。变量还允许你在运行时覆盖这些值。这些变量的值在变量选项卡中指定;你可以选择导航到变量选项卡以覆盖模板注入的默认值。
-
选中恢复 NuGet 包复选框允许构建系统在构建执行期间下载任何依赖的 NuGet 包。
提示
自动恢复 NuGet 包是一个非常有用的功能;它可以避免你将依赖包检查到 TFS 中。
-
高级设置允许你指定特定版本的 MSBuild 或 Visual Studio 来编译代码。默认是 x86。
-
控制选项文本框允许您禁用特定的构建定义;此选项还允许您指定构建错误时的行为。您可以选择在遇到第一个构建错误时停止构建过程。
-
接下来,点击Visual Studio 测试步骤;您将看到左侧面板上的可配置变量列表。与构建步骤类似,此步骤还允许您选择用于执行测试的 VS Test Runner 版本。高级部分还允许您指定自定义测试适配器的路径。如果您计划使用非 VS Test Runner 执行测试,这将非常有用。勾选启用代码覆盖率复选框,其他字段保留默认值:
勾选代码覆盖率启用复选框,其他字段保留默认值
-
测试程序集:测试程序集字段应指定您希望 VS Test Runner 执行的测试项目的路径。此字段接受通配符;根据默认设置,所有输出为
*test*.dll
的项目将被测试运行器选择执行。 -
测试筛选条件:此字段允许您使用特定筛选器运行选择性的测试。可以在运行设置文件字段中传递一个运行设置文件。如果开发团队希望在开发者机器和构建服务器上使用相同的测试设置执行测试,这将非常有用。可以通过覆盖测试运行参数字段覆盖测试设置文件中指定的测试运行参数。
-
-
接下来,点击索引源并发布符号。在源代码编译过程中,构建引擎生成了符号文件。符号文件是与特定程序集匹配的
.PDB
文件,并包含调试工具使用的信息。对于 .NET 程序集,符号文件包含源文件名、行号和局部变量名。构建定义能够将符号发布到符号服务器。开发人员可以在 Visual Studio 中指向该符号服务器;这将在调试时自动下载正确的符号。如果您尚未拥有符号服务器,可以按照此处的说明设置基于文件共享的符号服务器:msdn.microsoft.com/en-us/library/windows/hardware/mt146873(v=vs.85).aspx
。将构件名称设置为 Symbols_$(BuildConfiguration)
最后,导航到发布构建工件任务。此任务允许您指定构建工件发布的位置。选择用于存储构件的服务器,此选项在大多数情况下是最佳和最简单的:
在发布构件中,将构件类型设置为服务器
-
点击保存并为构建定义命名;添加一个注释,如以下截图所示:
-
点击队列构建以手动触发该构建定义的新构建。构建输出控制台开始实时显示构建代理的活动:
它是如何工作的…
正如你所注意到的,选择 Visual Studio 模板后,默认体验会为你预配置大部分设置,使你能够几乎立刻设置好 CI 流程。
还有更多…
在新的构建框架中,构建输出也进行了重构。如以下截图所示,构建输出包含了测试结果和代码覆盖率结果。输出还包括一个单独的视图,便于查看时间线和工件:
将构建徽章固定到团队门户中的欢迎页面
构建徽章是一个动态生成的图像,显示某个构建定义的最新构建状态。在本指南中,你将学习如何将构建徽章固定到团队门户中的仪表板。
准备工作
要修改构建定义,你需要拥有构建定义作者或构建者的权限。通过将自己添加到构建管理员安全组,可以授予此权限。
如何操作…
-
导航到构建中心,进入 FabrikamTFVC 团队项目;浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_build
。 -
在左侧面板的构建定义菜单下找到构建定义FabrikamTFVC CI,然后选择编辑该构建定义。
-
导航到构建定义的常规标签页,并勾选启用徽章选项:
-
点击保存以更新更改,从而启用徽章构建定义。保存更改后,徽章启用字段旁会出现一个新的超链接显示 URL…。点击**显示 URL…**超链接并复制该超链接:
-
浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_welcome
,进入团队门户中的 FabrikamTFVC 团队的欢迎页面。 -
编辑
README.md
并粘贴构建徽章的 URL。保存更改。在以下截图中,当前 FabrikamTFVC 构建的状态以红色显示为失败。通过的构建以绿色显示,部分成功的构建则以橙色显示:
它是如何工作的…
Team Foundation Server 构建 API 暴露了一个公共端点,用于显示最后一次构建的状态。通过传递构建定义 ID,URL 会调用该端点,要求将构建定义状态呈现为徽章_apis/public/build/definitions/94fb1544-b441-45f5-a54d-466fc5d66817/4/badge
。
还有更多
现在,构建定义支持将更改保存为草稿。这可以通过选择保存为草稿选项来完成,如截图所示:
构建定义,也可以保存为草稿,支持队列构建功能。由草稿构建定义生成的构建,其构建名称中包含DRAFT
关键字:
这为你提供了一种在广泛共享之前验证构建定义更改的好方法。
使用基于角色的访问管理构建资源
旧的构建资源权限模型是扁平化的,这意味着你只能授予某人管理所有或不管理任何构建资源的权限。在新的构建系统中,安全性是一个合理的层次结构,因此你可以按队列或池的基础来控制权限。该构建系统提供了“基于角色的访问控制”,而不是直接暴露底层权限。在这个教程中,你将学习如何在池和队列级别上为构建资源设置权限。
准备就绪
场景:要管理所有池的成员资格,你需要是团队基础管理员组的成员。要管理单个池的权限,需要是团队项目集合管理员组的成员。为了管理队列的权限,你需要是项目集合构建管理员组的成员。构建定义管理需要是构建管理员组的成员。
如何操作…
-
通过浏览到
http://tfs2015:8080/tfs/_admin/_AgentPool
,在帐户管理控制台中导航到代理选项卡。点击所有池并将你打算在 TFS 中全局使用的构建代理服务帐户添加到代理池服务帐户角色:要将服务帐户的作用域限制为Pool 1,点击Pool 1,选择代理池服务帐户选项,然后点击**添加…**以添加帐户:
-
通过浏览到
http://tfs2015:8080/tfs/DefaultCollection/_admin/_AgentQueue
,在默认项目集合作用域中,导航到代理队列选项卡。点击所有队列。从这里可以设置所有队列管理员、创建者和用户的角色成员资格:
在 Pool 1 级别,管理员、创建者和用户角色仅作用于 Pool 1 级别。这些权限可以通过点击Pool 1并将用户和组添加到相关角色来设置。
如何运作…
如下图所示,新的构建系统包含了一个基于角色的层次化访问控制模型。在接下来的部分中,我们将逐一介绍每个角色及其提供的访问权限:
-
所有队列:
-
代理队列管理员:该角色中的用户能够管理项目集合中的所有队列。
-
代理队列创建者:该角色的用户可以创建新队列。如果没有与队列同名的池,则会在队列创建时创建一个池,并将调用者添加为该队列和相应池的管理员。如果已经存在同名池,则调用者必须拥有池的管理权限(必须是池管理员),才能创建使用该池的新队列。
-
代理队列用户:该角色的用户可以使用整个集合中的所有队列。使用意味着他们可以将队列分配给构建空间中的定义。
-
-
单个队列:
-
代理队列管理员:与之前的角色相同,但权限仅限于特定队列。
-
代理队列用户:与之前的角色相同,但权限仅限于特定队列。
-
-
所有池:
-
代理池管理员:该角色的用户可以管理整个帐户中的所有池。
-
代理池服务账户:该角色的用户可以连接到池并接收有关构建作业的消息,包括控制消息,如“更新自己”和“取消此作业”。
-
-
单个池:
-
代理池管理员:与之前的角色相同,但权限仅限于特定池。
-
代理池服务账户:与之前的角色相同,但权限仅限于特定池。
-
使用构建保留策略来自动化构建删除
构建保留策略允许您使用一组规则删除旧的构建及其输出和相关工件。旧构建系统中的构建保留策略有两个缺点:
-
保留策略只能应用于每个构建定义
-
保留仅基于构建的数量
新的构建系统允许全局保留策略;这使得管理构建保留更加容易。新系统支持按构建的年龄进行保留,简化了创建有意义的保留规则。在本教程中,您将学习如何在团队项目集合级别和构建定义级别分别应用构建保留策略。
准备就绪
要管理集合的构建资源,您需要是项目集合构建管理员组的成员。
场景:Fabrikam 团队希望在默认团队项目集合中强制执行所有构建定义的默认保留策略,保留期为 20 天。FabrikamTFVC 团队只希望将 FabrikamTFVC CI 构建定义的构建保留 5 天。在 Fabrikam,所有超过 45 天且未标记为永远保留的构建都应被删除。
保留策略适用于所有团队项目集合中的构建。如果有些构建需要比全局策略规定的最大保留期更长时间保留,可以通过将构建标记为永久保留来实现。浏览到您希望从保留策略中排除的特定构建。然后,右键点击该构建,并设置该构建的 永久保留 标志:
如何操作……
浏览到默认项目集合的 构建 标签页,路径为 http://tfs2015:8080/tfs/DefaultCollection/_admin/_buildQueue
。
在 最大保留策略 部分,将 保留天数 文本框更新为 45
。这将强制所有构建的最大保留期为 45 天,排除那些标记为永久保留的构建。点击 保存更改 以应用更改:
在 默认保留策略 部分,将 保留天数 文本框更新为 20
天。此设置将级联到所有新创建的构建定义。点击 保存更改 以应用更改:
导航到 FabrikamTFVC CI 构建定义,然后进入 保留 标签页。将 保留天数 的值更新为 5
天。可以通过点击删除图标删除保留规则;也可以通过点击 添加新规则… 图标添加新的保留规则:
它是如何工作的……
TFS 有一组计划任务,用于管理 TFS 中的各种操作。构建保留策略由 TFS Agent 协调;只有那些标记为永久保留的构建才会被排除在删除过程之外。目前,无法更改删除构建记录和测试记录的全局设置,也无法应用分支筛选器。
在构建定义级别,可以更改作为保留策略一部分被删除的内容。删除测试结果 设置仅删除测试运行、结果和附件,手动测试结果不会被删除:
还有更多内容……
新的构建系统还提供了在单个构建中关联标签并使用标签筛选构建的功能。让我们从标记一个构建开始。打开一个构建并在 标签 部分添加一些标签,如下图所示:
在构建列表页面,输入您希望用来筛选构建列表的标签。如以下截图所示,构建列表通过 Bug#1291 和 Investigate 标签进行筛选:
使用用户权限识别池中的构建代理
为特定构建设置专门的构建代理并不罕见。例如,一个应用程序可能依赖于 SharePoint SDK。可以设置一个构建代理来处理具有这种依赖关系的构建。新的构建系统引入了能力的概念。能力,最基本的形式,是一组键值对,用于识别构建服务器的能力。需要特定能力来执行的构建,可以通过引用这些键值对,将其路由到相关的构建代理。构建代理支持系统能力和用户能力。系统能力是构建代理上已经可用的软件框架列表,由构建代理生成。用户能力可以手动添加到构建代理;这是为构建代理标记键值对的一种有用方式。在本教程中,您将学习如何向构建代理添加用户能力,以便在构建代理池中识别它。
准备就绪
场景:FabrikamTFVC 团队有一个解决方案,依赖于 SharePoint 2016 SDK。它已向 Pool 1 添加了一个附加的代理,该代理已安装 SharePoint 2016 SDK。虽然其他构建定义可以同时使用Win-A1和Win-A2,但所有来自 FabrikamTFVC CI 构建的构建请求需要仅路由到Win-A2:
例如,要修改构建代理的能力,您需要是构建管理员组的成员。
如何操作…
-
通过浏览
http://tfs2015:8080/tfs/_admin/_AgentPool
,导航到管理控制台中的Agent pools标签。 -
点击Pool 1并选择Win-A2。在USER CAPABILITIES部分,点击Add capability超链接。将
SharePoint.SDK
添加为键,2016
添加为值: -
导航到 FabrikamTFVC CI 构建,编辑构建定义,并浏览到General标签。在Demands部分,点击Add demand超链接。添加
SharePoint.SDK
并将比较符设置为equals,将Value字段设置为2016
。点击Save以将更改应用到构建定义: -
点击Queue build图标。在弹出的窗口中,点击Demands标签。你会看到新添加的
SharePoint.SDK
需求出现在此视图中。需求可以直接在此窗口中添加、删除或编辑。点击OK触发该构建定义的构建:
它是如何工作的…
构建框架扫描Pool 1以查找与构建定义中指定的需求列表匹配的代理。如果没有代理满足构建定义提出的需求,排队构建时会生成警告消息,指示没有可用的构建代理来处理构建请求。
以下截图显示,构建已通过匹配构建需求和代理能力成功路由到 Win-A2:
先前版本的 TFS 通过构建代理和构建定义标签允许构建路由。新的构建系统通过提供自动生成的系统能力列表以及使用比较符来创作构建定义中的需求,丰富了这一体验。
在构建输出中为 DLL 版本打上构建号
可追溯性在软件开发生命周期中非常重要。团队努力实现需求与测试用例、代码提交与构建、代码更改与测试运行之间的可追溯性。说到可追溯性,将构建输出中的二进制文件映射回构建是非常有用的。在此教程中,你将学习如何为构建输出中的 DLL 文件打上它们生成时的构建号戳。
准备就绪
场景:FabrikamTFVC 团队希望标记构建中使用的源代码,并使用构建号标记标签和构建输出:
下载课程材料中提供的 StampBuildNumber.ps1
脚本。将 StampBuildNumber.ps1
脚本检查入 script
文件夹,如下图所示:
权限:你需要编辑构建定义权限以执行此操作;你可以通过被添加到构建管理员组来获得这些权限。
如何操作…
-
通过浏览
http://tfs2015:8080/tfs/DefaultCollection/FabrikamTFVC/_build
导航到 FabrikamTFVC 团队项目中的 构建 中心,选择要编辑的 FabrikamTFVC CI 构建。 -
导航到 常规 选项卡,修改 构建号格式 字段为
1.0.$(Year:yy)$(DayOfYear).$(BuildID)
。 -
在构建定义中的 仓库 选项卡中,选择成功构建后 源代码标记 选项,并将 标记格式 字段修改为
$(build.buildNumber)
。 -
导航到 构建 选项卡,点击 添加构建步骤…,然后选择 PowerShell 任务:
-
更新 PowerShell 任务中的脚本文件路径,将其指向
StampBuildNumber.ps1
脚本的位置,在此案例中为$/FabrikamTFVC/Main/Source/script/StampBuildNumber.ps1
。该脚本期望构建号和代理工作区作为输入参数。这些值可以通过预定义变量$(Build.BuildNumber) $(Agent.BuildDirectory)\\$(Build.Repository.Name)
注入。可以在msdn.microsoft.com/Library/vs/alm/Build/scripts/variables
找到预定义变量的完整列表。 -
点击 保存 并输入评论,以应用对 FabrikamTFVC CI 构建定义所做的更改。排队一个构建来验证 DLL 中的构建号戳印:
构建 1.0.15289.68 成功执行了
StampBuildNumber.ps1
脚本;构建号匹配的构建源标签将在成功构建后生成。构建输出可以从 Artifacts 视图中下载。文件版本 和 产品版本 字段的值与构建号相同。这提供了构建号在不同构件中的端到端映射。
它是如何工作的……
为了成功地在 DLL 上戳上构建号,构建号需要使用程序集版本格式。关于语义化版本控制(Semantic Versioning),有一些有趣的建议,您可以在semver.org/
上阅读更多内容。
每个 C# 项目都包含一个 AssemblyInfo.cs
文件;如下图所示。此类包含 AssemblyVersion
和 AssemblyFileVersion
的属性。StampBuildNumber.ps1
脚本会将 AssemblyVersion
和 AssemblyFileVersion
字段覆盖为注入的构建号:
执行 StampBuildNumber
脚本的 PowerShell 任务需要在 Visual Studio Build 任务之前运行,以确保在编译过程中使用更新后的 AssemblyVersion
和 AssemblyFileVersion
属性值。
StampBuildNumber
脚本接受两个参数,如此处所示。这些参数通过构建定义中的预定义变量进行注入:
Set-AssemblyVersion
函数验证构建号值是否符合程序集版本格式。然后,在构建工作区中执行扫描以定位 AssemblyInfo.cs
类。接着,将 AssemblyInfo.cs
文件中的 AssemblyVersion
和 AssemblyFileVersion
属性替换为构建号的值:
以下截图展示了来自代理工作目录的处理过的 AssemblyInfo.cs
文件:
使用 TFBuild 可扩展性框架创建新的构建任务
新的构建系统提供了一系列预打包的构建任务。开箱即用的任务与流行的脚本引擎相辅相成。这有助于解决一些未被开箱任务直接覆盖的场景。新的构建系统从头开始架构,特别注重可扩展性。在本配方中,您将学习如何使用新构建系统中提供的可扩展性框架创建一个新的构建任务。
准备就绪
TFS 扩展命令行工具(tfx-cli
)需要用于构建任务管理。该工具基于 Node.js。作为使用 tfx-cli
的先决条件,需要从 nodejs.org/en/download
下载并安装 Node.js。扩展性命令行工具可以通过启动命令提示符并运行以下命令直接安装:
npm install -g tfx-cli
要与 TFS 进行身份验证,tfx-cli
工具仅接受 个人访问令牌(PAT)或备用凭据。由于 TFS 尚未发布对 PAT 的支持,因此需要使用备用凭据进行身份验证。有关如何设置备用凭据的指导,请参见 github.com/Microsoft/tfs-cli/blob/master/docs/configureBasicAuth.md
。
以下截图演示了如何通过传递团队项目集的连接详情以及备用凭据来使用 tfx-cli
进行身份验证:
为了验证你是否正确完成了设置,可以通过运行命令 tfx build tasks list
来尝试获取构建任务列表:
如何操作…
-
要创建新任务,运行命令
tfx build tasks create
,如下所示:一个模板任务已下载到工作文件夹,准备好供你开始编辑:
-
要将此任务上传到库中,请运行
tfx build tasks upload.\\MyTask
: -
导航到 FabrikamTFVC CI 构建定义,点击 编辑 来编辑构建定义。在任务列表中选择新添加的 MyTask,它会显示在 Utility 部分下。点击 添加 将此任务包含在定义中:
-
更新 消息 文本框中的消息并保存更改。排队一个新构建:
构建成功运行 MyTask,并在控制台输出中打印消息
Hurray! My First Build Task...
:
它是如何工作的…
执行 create new task
命令时,一组模板文件会被下载。task.json
文件包含有关任务的元数据。如以下截图所示,该文件包含任务元数据、代理依赖关系、任务特定属性和输出行为。例如,如果默认类别是 utility
,则可以通过更改类别的值来修改构建任务上传到的类别:
其他文件也有其重要意义:
-
sample.ps1
文件包含在 Windows 代理上运行时执行的 PowerShell 构建任务逻辑。 -
sample.js
文件包含在跨平台代理(如 OS X 或 Linux)上运行时执行的 JavaScript 构建任务逻辑。 -
icon.png
文件是默认图标,应替换为具有透明背景的自定义 32×32 PNG 文件。
如果你在寻找灵感,所有现有的现成任务都是开源的,可以直接通过 GitHub 上的贡献进行增强,链接在此:github.com/Microsoft/vso-agent-tasks
。
将 SonarQube 与 TFBuild 集成以管理技术债务
技术债务可以被定义为当前状态与代码库最佳状态之间的差距。技术债务通过使代码难以理解、易于破坏、难以验证,进而产生计划外的工作,最终阻碍进展,从而消耗生产力。技术债务是不可避免的!它起初微小,并随着仓促的更改以及缺乏上下文和纪律而逐渐增长。组织通常发现,他们的超过 50% 的能力都被技术债务所消耗。如 第二章《设置和管理代码库》中所讨论的,最大的问题是识别和管理技术债务。SonarQube 是一个开源平台,是理解和管理技术债务的事实标准解决方案。在本教程中,你将学习如何通过 TFBuild 集成 SonarQube 来分析基于 .NET 的应用程序。
准备工作
SonarQube 是一个用于管理代码质量的开放平台。因此,它涵盖了代码质量的七个维度,如下图所示。SonarQube 最初在 Java 社区中非常有名,现在已经支持超过 20 种编程语言。微软和 SonarSource 的联合投资使得 SonarQube 更容易与 TFBuild 集成,并且在分析基于 .NET 的应用程序方面表现更好。你可以在 www.sonarqube.org/resources/
阅读更多关于 SonarQube 提供的功能。
在本教程中,我们将使用 SonarQube 分析 FabrikamTFVC 代码库中的技术债务。如果你还没有 SonarQube 实例,可以通过访问 github.com/SonarSource/sonar-.net-documentation/blob/master/doc/installation-and-configuration.md
按照说明进行设置。
要完成本教程,你需要 Sonar 数据库连接字符串和用户帐户详细信息,以便从 TFBuild 连接到 SonarQube。本教程使用了前面提到的安装和配置链接中描述的单服务器设置:
Database Connection String - jdbc:jtds:sqlserver://TFS2015:1433/Sonar;instance=SQLEXPRESS;SelectMethod=CursorUserName - SonarUserPassword - SonarUser
如何执行…
-
通过浏览到 FabrikamTFVC 团队门户中的 Build 核心,导航到 FabrikamTFVC CI 构建定义。点击 Edit 超链接开始编辑 FabrikamTFVC CI 构建定义。
-
通过点击添加构建步骤来添加新任务。在构建类别中,选择SonarQube for MSBuild - 开始分析和SonarQube for MSBuild - 结束分析:
-
在 Visual Studio 构建任务之前组织开始分析任务,并在所有代码构建和测试任务执行完毕后组织结束分析任务:
-
在SonarQube 开始分析任务中,指定 SonarQube 实例的连接详细信息。SonarQube 端点需要通过端点管理器进行映射和添加,如下所示:
-
端点提供了类似于构建权限模型的基于角色的访问控制模型。用户和组可以通过此访问控制模型直接设置端点的管理和使用:
-
选择 SonarQube 服务端点并更新数据库设置:
-
更新项目设置,如下所示:
-
保存构建定义的更改并排队一个新构建。使用SonarQube 开始分析任务中的信息,构建代理将连接到 SonarQube 实例。它将使用 Sonar MSBuild 运行器处理代码,执行 .NET 和 JavaScript 代码分析、代码克隆分析、代码覆盖分析,并计算 .NET 和 JavaScript 的度量标准。这些结果将由SonarQube 结束分析任务发布:
它是如何工作的…
SonarQubeMSBuild 运行器用于从 TFBuild 调用 SonarQube 分析。让我们查看运行器执行的代码分析结果。通过浏览http://localhost:9000/
进入 SonarQube 仪表盘。主页显示Fabrikam CallCenter (Main) 项目,如下所示:
通过钻取Fabrikam CallCenter (Main) 项目的仪表盘,你可以看到各种分析的高级度量:
仪表盘为你提供代码、复杂性、重复、单元测试覆盖率和债务分析的高级总结
问题部分显示了使用 .NET 代码分析规则集在代码库中发现的所有问题的完整列表。可以在此视图中直接跟踪、抑制、分配问题并为发布计划做准备:
问题部分显示了在分析过程中识别出的代码库问题列表
还有更多…
新的构建框架提供了创建自定义变量的功能。变量提供了一种方式,可以在构建定义中的多个字段之间共享公共值。与值不同,变量可以在运行时动态更新。该框架还允许将变量标记为安全,这样它的值就不会显示在构建定义中,也不会在构建执行时记录。在本教程中,SonarQube 连接字符串和账户详情是直接传递给构建任务的。这些值也可以通过构建变量传递,如下图所示:
使用 TFBuild 构建 GitHub 代码仓库
新的构建系统提供与 GitHub 的无缝集成。在本教程中,您将学习如何使用 TFBuild 来构建 GitHub 中的仓库。
准备工作
如果您还没有 GitHub 仓库,可以从help.github.com/articles/create-a-repo
创建一个。
在本教程中,我们将使用位于github.com/visualstudiogeeks/
的VisualStudioGeeks
仓库。
如何操作…
-
从个人资料菜单登录到 GitHub 仓库,导航到设置,然后选择个人访问令牌。点击生成新令牌按钮以创建新的个人访问令牌:
-
指定令牌名称并选择访问范围。为了触发构建,需要选择
admin:repo_hook
访问级别: -
点击生成令牌按钮。复制访问令牌并将其保存在安全的位置。请注意,您将无法再次查看此令牌;如果丢失,必须重新生成一个新令牌:
-
导航到 FabrikamTFVC 团队项目并浏览到构建中心。点击**+图标以创建新的构建定义。选择 Visual Studio 模板,然后点击确定**。将构建定义保存为
VisualStudioGeeks
CI。 -
导航到仓库选项卡,并选择仓库类型为外部 Git。输入仓库名称、仓库 URL、用户名以及访问该仓库的个人访问令牌:
-
在触发器选项卡中,选择计划选项,并指定从此构建定义触发构建的计划。保存对此构建定义的更改并触发一个新构建:
如前图所示,
Build 20151020.5
成功地从仓库VisualStudioGeeks
同步了代码。
工作原理…
为 Visual Studio Geeks 仓库生成的个人令牌,具有 admin:repo_hook
范围,提供了对仓库钩子的完全控制权限。此访问权限允许监听器订阅代码更改提交到仓库时生成的提交事件。尽管 TFBuild 在 TFS 2015 中提供了构建 GitHub 仓库的功能,但目前尚不支持持续集成流程。如 TFS 功能时间表所示,持续集成构建工作流预计将在 TFS 2015 的未来更新中引入:www.visualstudio.com/en-us/news/release-archive-vso.aspx
。