2011年6月15日,星期三

SP2010持续集成–pt 1: Benefits

在背面 我的话 在SharePoint最佳实践会议上,这是有关实现自动生成(又名 持续集成)在SharePoint开发项目中–专门用于Team Foundation Server2010。实际上,该系列的其余部分可能会出现在Microsoft博客(或白皮书)上而不是本博客上,但是我和某些Microsoft同事仍在研究细节,我想至少讨论内容,然后在这里开始。通过这个特定的主题,我可以想象有些人会认为它与他们无关(并且不阅读本系列的任何内容),而实际上可能有一些作品对他们有用,并且可以很容易地实现。让’s be clear though –持续集成(CI)可能最适合具有以下特征的项目:

  • 以发展为导向–也许有超过3个Visual Studio项目
  • 多个开发人员
  • 运行时间相当长(例如>2-3个月;使团队有机会在实际交付成果的基础上实施CI

此博客系列/白皮书的原始计划(可能会因我本人而改变, 柯克·埃文斯(Kirk Evans)迈克·莫顿 演变)看起来像这样:

  1. CI的好处-为什么呢? (这个帖子)
  2. TFS 2010构建安装/配置
  3. 为SharePoint项目创建第一个TFS生成过程
  4. 实施程序集版本控制
  5. 使用PowerShell从构建输出中部署WSP
  6. 作为构建的一部分运行编码的UI双色球推荐一注
  7. 将SPDisposeCheck和代码分析等工具集成到构建中

持续集成的好处

尽管CI在普通的.Net世界中已成为相当标准的方法,但它’公平地说,SharePoint带来了一些其他注意事项(与往常一样),并且涉及的内容略多一些。考虑到在.Net中,输出通常是可执行文件或网站,通常可以使用XCOPY进行部署。但是,SharePoint具有解决方案和功能,以及所有逻辑结构(例如Web应用程序和网站集),并且通常非常繁琐“state-based”(例如,激活功能,然后创建网站,然后创建列表,依此类推)。所以CI 在许多情况下涉及更多的内容,但是我听到的所有反馈告诉我,越来越多的人希望采用它,这是正确的。我看到了其中的一些好处:

  • 一致的构建
    • 例如。没有人为错误导致调试(而不是发布)构建程序集
  • 自动版本化的程序集
  • 能够跟踪生产中的代码版本以在源代码管理中发布标签
  • 开发人员花在保持环境最新上的时间更少(仅此一项就可能是巨大的)
  • 通过构建通知使团队凝聚力
    • 每次构建时(例如,每次签入后),团队中的每个人都会在系统托盘中看到一个弹出窗口,让他们知道构建当前是否通过/失败
  • 自动化双色球推荐一注
    • 一旦部署了WSP,请运行一系列双色球推荐一注(例如单元双色球推荐一注/ UI双色球推荐一注/负载双色球推荐一注)以检查将部署到客户的内容
    • 同时对代码进行检查(例如代码分析,SPDisposeCheck),以掌握当天的所有代码气味

看起来像什么

不同‘styles’ of CI

一旦具备使用TFS Build的能力(请记住,’我将谈论拓扑结构/安装下一篇文章),第一步是确定您要’重新尝试通过CI实现。在我看来,持续集成有两种广泛的样式:

风格:

最适合:

“Rebuild everything” 直播前
“根据生产状态建立当前的冲刺” 实时发布(或频繁投放)

前者通常比后者简单,因此非常方便’s the style I’我专注于这个系列(尽管我’我真的在讨论适用于两种风格的核心机制)。就是说,让’讨论更复杂“对抗当前状态”打字片刻。如果您的解决方案已投入生产,但仍在不断发展,则此模型可能是最佳选择–毕竟,您是否真的想将所有精力都集中在双色球推荐一注“从头开始构建一切”何时仅在灾难恢复情况下才这样做?可能不会。显然,在此模型中,状态的概念非常重要,毫无疑问,处理此问题的最佳方法是使用虚拟机快照。想法是,构建过程的步骤1将目标计算机回滚到快照,该快照反映了当前的生产状态(相同的代码版本,解决方案/功能等)-从此处,构建过程将部署生成的WSP达到此目标,您将了解当前的工作是否将成功部署到生产中或在生产中运行。

Microsoft认为这是一个重要方案,因此‘Lab Management’TFS Build中的功能旨在提供帮助。它提供了特殊的‘activities’使构建工作流回滚/拍摄快照–这些可以放入工作流程中’在第3)条中讨论构建工作流程’也是一个向导UI,可帮助您选择可用的快照等。– obviously there’如今,已经有各种各样的虚拟化平台,而Microsoft只是在加倍努力以使其易于使用。特别是这需要Hyper-V与 系统中心虚拟机管理器。好消息是它不应该’在另一个平台上很难达到相同的结果–也许不太光滑,但使用 调用过程 调用命令行的活动(例如,类似 vmrum revertToSnapshot C:\ VMs \ MyVM.vmx MySnapshotName 对于VMWare)应该可以解决问题。

配置构建(快速概述)

To get started, you create a new build definition in Visual Studio Team Explorer, 和 configure which Visual Studio projects/solutions should be built. Many other settings 生活 here too, such as whether code analysis should be performed during the build:

BuildDef_Process

从那里,我们需要选择何时进行构建–手动,每次入住,每晚等:

BuildDef_Trigger 

在TFS 2010构建中,构建过程中发生的实际步骤(例如,从源代码管理中检索文件,进行编译,部署,双色球推荐一注等)被配置为.Net 4.0工作流程。对于SharePoint版本,我们需要对TFS随附的示例版本进行一些修改。–这可以解决一些问题,但我’ll将我的文章作为第3条的潜在起点‘自定义SharePoint构建的构建工作流’:

BuildDef_WorkflowZoomedIn 

至此,每个构建都将使用最新代码编译程序集,生成WSP程序包并将其复制到远程SharePoint框(假设您使用’re 不 using an ‘all-in-one’ topology). 现在,我们需要一些东西来在SharePoint中实际部署/升级WSP,并可能需要执行一些其他步骤,例如创建双色球推荐一注站点。–构建工作流将移交给PowerShell脚本来执行此操作。 I’在本系列的后面部分将提供我的PowerShell脚本,并讨论将数据从工作流传递到脚本以及收集成功/失败返回值的机制。– for now it’重要的是要意识到自动化构建的很大一部分只是您可能已经在使用的标准PowerShell,并且每个实现在这里都将有所不同,具体取决于您的用途’为您的客户重建。

所以到现在为止,我们将有一个可行的构建–WSP是自动构建和部署的,并且正在重新创建任何双色球推荐一注站点以检查构建的有效性。现在我们可以考虑一些自动化双色球推荐一注来帮助我们验证这一点。毕竟,我们也许可以部署WSP,但是实际功能是否正常运行,或者用户会在某个地方看到错误?在没有双色球推荐一注员每次构建完成时都手动检查的情况下,我们可以建立任何方法吗?

在构建过程中运行自动化双色球推荐一注(例如UI双色球推荐一注)

现在它’s 不 that I’反对单元双色球推荐一注或其他任何东西….heck,我们当前的项目中甚至还有一些!但绝对可以感觉到,SharePoint在这一领域仍然充满挑战,大多数项目都没有’做到这一点,例如由于对模拟框架的依赖。一世 ’越来越多的人认为Visual Studio 2010中的UI双色球推荐一注功能提供了绝佳的选择– 编码的UI双色球推荐一注 可以通过完全相同的方式使用页面上的控件(例如导航,按钮,表单等)来模拟网站上的用户。当然可以’不是单元双色球推荐一注,理想情况下您’d兼有,但似乎单元双色球推荐一注的进入门槛更低–并且通过一些双色球推荐一注,您可以很快获得良好的真实双色球推荐一注覆盖率。这里’看起来像什么–首先将双色球推荐一注记录在浏览器中(出现一个特殊的小部件):

CodedUITest_AddAssertion2

在按下一些按钮来模仿特定的用户操作(我要双色球推荐一注的东西)之后,然后添加一个断言以检查页面上是否存在某些内容。在这种情况下,我’按下已完成某项操作的功能区按钮,并且断言正在双色球推荐一注绿色状态栏是否可见并带有特定消息,表示操作成功。如果动作不是’如果成功,则绿色状态消息将不存在,并且双色球推荐一注将失败。什么’有趣的是’功能区按钮后面的s– it’为我们当前的客户开发的一些功能围绕着SharePoint的社交功能,并且正在发生很多事情。该按钮调用jQuery,该jQuery调用HTTP处理程序,该处理程序将调用自定义服务应用程序,该应用程序与数据访问层进行对话,然后将记录写入自定义SQL数据库。您了解我的意思是集成双色球推荐一注而不是单元双色球推荐一注吗?

但这确实意味着我可以用最少的精力双色球推荐一注很多代码。我需要注意一些事情–就像这样的事实,即用户界面在发生故障时可以返回正值,但可以缓解这一情况(除了简单地记录 许多 双色球推荐一注)是双色球推荐一注生成.Net代码的事实,这意味着我可以根据需要用其他检查来补充它。 当然,最酷的部分是它’将这些双色球推荐一注集成到自动化版本中非常容易 –如果像这样的双色球推荐一注每晚/每隔几个小时自动运行,那么您会很快发现回归错误。

获得回报-查找构建失败的原因

因此,如果我们拥有自动构建的功能,那么签入错误时会发生什么?我们如何发现?好吧,这可能取决于错误的细节以及您已进行的双色球推荐一注,但是让’通过示例进行工作。让’s say there’在上面使用的示例中,DAL中存在问题–我们可以想象那里’例如,存储过程参数不匹配,但为简单起见,我’我只是要向功能区按钮后面的方法添加一个虚拟异常:

抛出新的ApplicationException(“开发者做了一些愚蠢的事情”);

开发人员签入,因为一切都构建/打包良好,并且’知道,因为他/她一直在进行双色球推荐一注,并且 最后的改变不能’可能没有破坏任何东西!这样构建就可以运行-如果您’现在在办公室里(如果可能的话,你可能不在’设置为每晚运行),那么无论构建成功还是失败,团队成员都可以选择查看系统任务栏通知弹出窗口:

BuildNotificationFailure

主要入口是构建报告–这使我们可以查看任何构建警告/错误以及双色球推荐一注结果的摘要:

BuildResultsSummary

还有更详细的日志,如果包含UI双色球推荐一注,则您’会看到这些结果– 不e the ‘Error Message’以下部分显示了我们的一个断言在双色球推荐一注中失败:

CodedUITest_Result1

那’有用,但我们还需要更多详细信息来理解为什么有错误。根据构建的配置方式,我们应该在构建报告的底部看到指向某些文件的链接。

CodedUITest_Result6

让’依次浏览以下文件:

  1. .png文件–这是截图 双色球推荐一注失败时的用户界面外观。这非常有用,我们可以看到用户界面做了 显示绿色成功栏–因此,我们了解了该错误如何在UI中显现:

    AutomatedBuild_FailedUITest2 
  2. XML文件–这是双色球推荐一注失败时从Windows事件日志收集的数据。在很多情况下,这就是您的方式’找到实际的错误–我们可以清楚地看到问题发生的类/方法和堆栈跟踪:

    CodedUITest_Result3
    请注意,这确实要求您在代码中’重新向事件日志报告异常– we’re using the SharePoint模式& Practices libraries 去做这个。您可以推断SharePoint世界可能需要的是ULS数据收集器– I’ve向Microsoft提到了这一点,人们似乎同意这可能是个好主意。无论如何,我们现在都有失败的双色球推荐一注和事件日志数据的屏幕快照,可以找到我们的错误woohoo!。但这不’t stop there –捕获的其他文件包括…
  3. iTrace文件–这是Visual Studio 2010’s incredible 智能跟踪 特征。 智能跟踪是‘historical debugger’,即使开发人员不在,开发人员也可以进入调试会话’在开始时就在那里。在这种情况下,’从双色球推荐一注结果中使用–下图没有’不能完全显示出来,但是我可以选择在UI双色球推荐一注(或其他任何类型的双色球推荐一注)期间发生的异常,然后按a‘Start debugging’按钮。这将带我进入‘live’调试会话,其中所有变量都将具有它们在双色球推荐一注期间所做的值,我可以逐行逐步进行。尽管有这样一个事实,即该双色球推荐一注是在一夜之间从凌晨3点开始运行的–因此,不用担心开发人员将无法重现构建遇到的问题:    

    AutomatedBuild_IntelliTrace
  4. .vsp文件–这是代码分析会话的结果,其中评估了在双色球推荐一注期间执行的代码的性能。下面的第一张图片显示了我‘hot paths’在代码库中,即我们花了很多时间,因此可以考虑优化:

    CodedUITest_Result7

    这告诉我,我们的WeatherWebPart类和ActivityFeedSubscription命名空间中的一些代码可能会受益于某些注意。向下钻取,我们可以看到一些单独方法的图形表示:

    CodedUITest_Result9

更进一步–构建中可能包含的内容

最后一个区域,代码概要分析,当时’与识别错误有关的事情不外乎是对我们代码库中任何新警报的每日检查。进一步扩展该主题,请考虑以下内容,因为我们可以很容易地将这些内容包括在自动构建中:

  • 单元双色球推荐一注(当然)
  • SPDisposeCheck
  • 代码分析(FxCop)
  • 文档版本
  • 从构建/双色球推荐一注失败创建TFS工作项
  • 等等。

真的,天空’s的限制,因为您可以在构建过程中使用PowerShell或命令行。

概要

尽管在.Net世界中相当普遍,但是进行自动构建的SharePoint项目却非常少见-可以说是由于SharePoint开发带来的其他复杂性。与以前的Microsoft堆栈相比,Team Foundation Server 2010使构建自动化比以前更容易实现,并且与相关的Visual Studio功能(如双色球推荐一注)具有出色的集成。实施这些技术可以对SharePoint开发项目产生很大的影响。尽管这篇文章提供了最终结果的概述,但我和一些Microsoft同事正在研究详细的内容(大致遵循开头列出的文章系列)–当我知道此内容的最终归宿(博客/白皮书)时,我’会及时通知您,并会通过适当的链接修改此帖子。