Lab version:15.4

Last updated:11/10/2017

概述

在本实验中,您将了解Team Foundation Server 2018提供的版本发布管理功能,TFS自动化部署功能提供一系列发布和部署工具,这些工具可以实现跨桌面,服务器和云自动部署应用程序。Team Foundation Server 2018的发布管理功能可帮助开发和运营团队基于系统完美结合在一起,从而更轻松地配置自动化部署复杂流程应用到目标环境。开发团队还可以对其发布流程进行控制,在不过过程中对发布进行审批,同时在发布执行过程中也可以可视化实时发布状态。

登陆培训环境

  1. 打开实验室环境

  2. 点击右上角的登陆链接。

  3. 使用微信登陆,扫描二维码。

  4. 选择环境列表

   

  1. 选择TFS Labs

  2. 找到已购环境,点击进入

   

  1. 点击 远程连接 中的图标,连接到远程实验环境。

   

> **Note:** 实验环境默认登陆用户为系统账户**azureuser**, 实验中需要使用环境预制账户如:**Sachin Raj (Sachin)**。
  1. 如果实验中需要切换用户,可以点击远程连接页面下拉菜单中的用户切换,输入用户名以及密码,点击连接,就可以实现切换实验环境远程登陆账号。

   

 

  1. 如果实验中需要复制粘贴文档中的相关内容到虚机中可以使用labs自带的复制粘贴版进行操作

 

关于Fabrikam Fiber的项目背景

这套动手实验室使用一家虚拟的公司Fabrikam Fiber作为实验背景。Fabrikam Fiber向美国提供有线电视和相关服务。他们正在迅速增长,并且已经将产品部署到Windows Azure,产品包括允许用户在网站上自助购票的应用;还有为其客户经理管理客户订单的ASP.NET MVC应用程序。

在这套动手实验室中,您将参与许多Fabrikam Fiber团队的开发和测试场景。在实验中这个由8-10人组成的团队使用Team Foundation Server来管理他们的源代码,运行他们的生成,测试他们的产品,并管理软件研发计划和跟踪软件项目的开发过程。

先决条件

本实验需要安装和配置生成代理。在Team Foundation Build实验简介的第一个练习中介绍了这些步骤。先完成这些步骤(只需要一次),然后继续此实验。

练习1:持续发布管理

在本练习中,您将使用Team Foundation Server的发布管理功能来配置自动化部署方案。本练习将在每次签入代码改动后自动将其部署到开发团队的测试环境中。

任务1:配置连续生成

  1. 使用切换用户功能,切换登陆用户为 Sachin Raj (Sachin). 所有密码都是 P2ssw0rd

  2. 打开任务栏的 Internet Explorer ,点击收藏夹的 TFS FF Portal

  3. 选择Code选项卡。

  4. 您可以在浏览器上直接编辑服务器上的文件,当你只需要对代码进行较小调整时,这种方法非常有用。请不要关闭此标签页,您将在下面的实验中回到此标签页。

  5. 右键单击Build and Release | Builds选项卡并选择Open in new tab。因为本实验要在多个界面来回切换,因此不要关闭这些已经打开的标签页,这样方便以后的操作。

  6. 点击New definition来创建新的生成定义。

  7. 选择ASP.NET模板并单击Apply

  8. 将生成Name设置为“Fabrikam Development CI”并选择default代理队列。

  9. 选择Get sources任务。

  10. 更新Workspace mappings,使用Dev分支。

  11. 选择Build solution任务。

  12. 设置Visual Studio Version的值,选择Visual Studio 2017,并将MSBuild Arguments设置为以下文本。

     /p:OutDir=$(build.stagingDirectory)
    

  13. 选择Test AssembliesPublish symbols path任务,然后右键单击选择Remove selected tasks移除这两个任务。

  14. 选择Triggers选项卡并enable功能Continuous Integration

  15. 选择Save & queue | Save。在保存对话框中点击Save

  16. 在浏览器中选择已经打开Code菜单的标签页。

  17. 导航到下面的路径以打开共享布局文件,该文件用于配置网站统一外观。

     $/FabrikamFiber/Dev/FabrikamFiber.CallCenter/FabrikamFiber.Web/Views/Shared/_Layout.cshtml
    

  18. 点击Edit,直接在浏览器中编辑源代码文件。

  19. H2标签内找到“Support”文本(在第29行左右)。将其更改为“Support v2.0”

  20. 点击Check in以签入更改(使用默认注释)。签入将触发刚才配置的已经启用持续集成的生成。

  21. 切换回打开生成页面的浏览器标签页。选择Builds选项卡。

  22. 现在应该有一个正在进行的生成。点击它查看进度。

  23. 您无需等待生成完成即可继续下一步。

任务2:配置连续发布

  1. 现在已经配置了通过在页面上签入代码修改触发了一个自动生成。下面配置一个支持持续部署的发布定义,这样每当新的生成成功运行后都会触发一个新的部署。通过自动化部署再将生成的应用部署到指定环境。右键单击Release选项卡,然后选择Open in new tab。您现在应该打开三个选项卡:CodeBuildRelease。切换到Release标签页。

  2. 创建您的第一个发布定义,请单击New definition

  3. 您可以选择TFS默认提供呃模板,这样可以快速配置发布定义。不过,这个练习中我们只配置一个非常简单的发布流程,所以不需要使用现有模板。点击Empty process

  4. 首先将名称设置为“Fabrikam Release”

  5. 这个生成定义将把生成的结果发布到团队的开发环境。将Environment name设置为“Dev”

  6. 单击 Add artifact 以指定要部署的内容。

  7. 选择Fabrikam Development CI生成作为发布来源Source,然后单击Add

  8. 在新定义的Artifact工件上,单击Continuous deployment trigger按钮。生成定义的配置通过这种图形化展示可以帮助设置人员更清晰的了解部署过程的上下文。

  9. 使用该选项Enable触发器。这个设置会实现每次生成完成时自动触发此发布。

  10. 点击Dev环境中的Pre-deployment conditions按钮。

  11. 确保选择选择的是After release。这样设置可以实现上一步的发布被被自动触发后,对于Dev环境的部署紧跟着被触发。注意:上个步骤配置的是发布过程的自动化触发, 这里配置的是在发布启动后,对Dev环境部署的自动化触发。

  12. 现在已经定义了环境的基本设置,下面要对发布过程执行步骤进行配置。发布过程与生成过程一样,也是使用一系列的任务实现的,而且TFS为生成和发布默认提供了相同的TasksDev环境上的发布配置非常简单,因为它只涉及将文件从生成目录复制到IIS网站的本地目录中,而且在本实验场景,所有场景都在同一台计算机上。选择Tasks选项卡,然后单击Agent phase旁边的Add a task to this phase按钮。

  13. Utility选项卡下,单击Copy Files任务上的Add按钮,将此问题添加到发布任务列表中。您可以在添加任务视图中同时向任务列表中添加各种任务,因此在您点击Add后视图不会关闭。这里要注意只添加一次。

  14. 选择Copy Files任务。

  15. Copy Files任务有三个关键设置。首先,将Source Folder设置为下面的路径(下面的路径是一行,拷贝粘贴的时候注意是否完整)。

     $(System.DefaultWorkingDirectory)/Fabrikam Development CI/drop/_PublishedWebSites/FabrikamFiber.Web
    
  16. 接下来,将Target Folder设置为下面的路径。

     c:\FabrikamRM\WebSite\DEV
    
  17. 最后,展开Advanced并选中Overwrite设置可以覆盖目标上的现有文件。

  18. 现在发布就已经配置好了,点击Save。不需要修改弹出框中的内容,直接确定。

  19. 保存后,选择Releases选项卡,新建生成定义将显示在Release Definitions列表中,打开新创建的发布定义的功能菜单。TFS为发布定义提供了很多其他的配置功能,其中包括克隆定义以及导入的功能。

  20. 打开任务栏的 Internet Explorer ,点击收藏夹的 FF Dev,在浏览器中打开Fabrikam Fiber Dev站点。请注意,“Support”文本仍然只是“Support”,因为刚才的修改已签入并触发了生成,但生成结果未部署到Dev环境。

  21. 切换到浏览器标签页,打开生成页面(可能是第二个)。

  22. 从上个练习配置的生成定义功能列表中选择Queue new build。你也可以在代码页面再次修改源代码,签入后触发生成。

  23. 接受默认值并单击Queue。如果生成在新的浏览器标签页中打开,请关闭此标签页。

  24. 切换到浏览器中打开发布的标签页。

  25. 如果当前页面没显示新触发的发布,请每隔几秒刷新浏览器(或者按UI中的Refresh按钮)。生成应该很快完成,并自动启动新的发布。当新发布被创建并显示在当前页面时,请注意在Environments下有一个灰色条。这代表尚未开始部署的Dev环境。如果进度条是蓝色的,那么这意味着部署正在进行中,绿色则表示发布成功,红色表示发布失败。双击该发布查看详细信息。

  26. 点击Logs标签查可以实时查看发布过程, 如果您在发布定义中定义的是向多个环境中进行发布,在Log会显示多个环境的日志节点。

  27. 返回到Summary选项卡并使用TFS系统的Refresh按钮刷新视图,直到部署成功。

  28. 返回到浏览器中打开的Fabrikam Fiber Dev网站刷新它以确认已部署更改。

练习2:发布质量门控制

尽管自动化版本非常好,但有时您希望通过指定的人员对发布过程进行批准,来把控整体部署过程的质量。在本练习中,会为发布定义新加一个部署环境,QA环境,此环境对应的是最终用户验收测试和集成测试。同时在发布定义里设置必须在Dev环境部署成功后,才能向QA环境中进行部署。最终,QA环境部署通过后需要人员进行审核,生成通过后手动批准进行后续部署。

任务1:添加QA环境

  1. 在浏览器中返回到打开发布页面的标签页(可能是第三个)。

  2. 点击发布定义的名称打开发布定义概述页面。

  3. 点击Edit进入编辑界面。

  4. Dev环境下,单击Clone按钮。克隆出来的QA环境与Dev相同,只是在QA环境中要将生成文件拷贝到不同目录中。使用这种克隆方法可以节省大量的配置时间。

  5. QA环境在Dev环境之后添触发。这里的可是化视图可以帮助配置人员清楚的了解发布过程的配置,并且在可视化视图中也可以很方便的对发布管道进行修改。

  6. 将新环境的名称设置为“QA”

  7. 点击QA环境的Pre-deployment conditions按钮。

  8. 确保选定的是After environment触发器选项。一旦Dev发布成功,将自动启动此环境的部署。当然您也可以将其配置为生成完成后手动触发。

  9. Pre-deployment approvers中,指定Sachin对QA环境的部署进行审批。审批者会在发布进入到发布待审批阶段时得到邮件通知。请注意,这里有一个Timeout in minutes字段(以分钟为单位),指定等待发布审批超时的时长,0默认代表着30天。

  10. 将鼠标悬停在Tasks 选项卡上并选择QA,编辑在该环境发布过程中的任务。

  11. Copy Files任务中,将最终目标文件夹从”DEV”更改为”UAT”(“用户验收测试”的缩写)。确保您正在编辑Target Folder字段,而不是Display name

  12. 像之前一样保存发布。现在发布定义会有一些历史记录,您可以选择History选项卡打来记录列表,并在列表中与发布定义之前的版本进行比较(或恢复)。这里不要做恢复操作。

  13. 打开任务栏的 Internet Explorer ,点击收藏夹的 FF QA,在浏览器中打开Fabrikam Fiber QA站点。此时QA网站的显示文本没有变化。

  14. 返回浏览器中打开TFS代码视图(可能是第一个)的标签页,然后重复编辑过程,将“Support v2.0”文本更改为“Support v3.0”。像以前一样保存并签入更改。在自动化生成完成后会触发向DEV环境的部署,DEV环境部署后,会触发向QA还ing的部署。

  15. 返回到发布标签页查看发布记录。

  16. 现在发布记录的右边会有两个进度条。刷新界面,直到看到下面显示“awaiting approval”图标,点击它。

  17. 输入注释并单击Approve

  18. 刷新页面直到两个进度条都为绿色,这表示两个环境发布都成功了。

  19. 返回FF QA网站,并确认“v3.0”已完成。

Exercise 3: 发布到云

发布管理工具非常灵活。您不仅可以实现部署过程的自动化,还可以利用一些高级任务轻松执行复杂的流程,例如向Azure部署网站。

Task 1: 创建Azure网站和数据库

  1. 如果您还没有帐户,请在 http://azure.com 创建一个Azure帐户。

  2. 在新的浏览器标签页中,导航至 https://portal.azure.com

  3. 点击New并搜索“sql”。选择SQL Database,然后单击Create

  4. Database name输入“fabrikam”。选择一个订阅。Resource group选择Create new,然后输入资源组名称“fabrikam”。确保Select source设置为Blank database,然后单击Configure required settings

  5. 点击Create a new server

  6. Server name输入服务器名称,这里会自动检测名称的唯一性。输入您可以记住的管理员用户名。密码使用P2ssw0rd。点击Select

  7. 单击Create以创建数据库和服务器。完成需要一些时间,现在可以继续下一步。 Click Create on the first blade to create the database and server. It’ll take some time to complete, but you can move on to the next step while it works in the background.

  8. 点击New并搜索“web”。选择Web App并单击Create

  9. App name需要输入一个唯一的名称,与上一步选择相同的SubscriptionResource group。默认会创建App Service plan。点击Create

  10. 点击左侧菜单中的Resource groups选项卡。找到并单击早先创建的fabrikam组。

  11. 单击带齿轮图标的SQL Server类型的资源(不是database),然后在弹出的界面中单击Show firewall settings

  12. 您需要允许您的当前IP地址访问数据库,因此请单击Add client IP(默认为您的当前IP),然后单击Save

  13. Resources group中,单击您的 SQL database。在新界面中,单击Show database connection strings

  14. ADO.NET字符串复制到剪贴板,以便网站以使用此连接字符串连接到Azure的数据库。关闭此界面。

  15. 打开一个Notepad的新实例并将连接字符串粘贴到其中。

  16. 单击Overview选项卡,返回到数据库的仪表板。

  17. fabrikam数据库界面上,单击Delete,然后确认删除。您稍后将使用SQL Server Management Studio发布现有数据库。

  18. Resources面板中,等待Web应用程序创建完成,单击之前创建的Web应用程序(地球图标)。在打开的最右侧界面中,单击Application settings

  19. 在此界面上,您可以配置您的连接字符串。找到Connection strings部分,点击Add new connection string,名称输入“FabrikamFiber-Express”。 编辑记事本上的连接字符串(应该和下面的样例相似,但是服务器名称不一样),替换里面的“{your_username}”和“{your_password}”部分。然后复制连接字符串,回到azure网页,并在value上粘贴复制的字符串。按Enter完成。

     Server=tcp:fabrikam-johndoe.database.windows.net,1433;Initial Catalog=fabrikam;Persist Security Info=False;User ID={your_username};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
    

  20. 单击工具栏上的Save

  21. 打开SQL Server Management Studio

  22. Server name默认为 VSALM\SQLeXPRESS。点击Connect

  23. 右键单击FabrikamFiber-Express数据库并选择Tasks | Deploy Database to Microsoft Azure SQL Database

  24. Introduction页面上,单击Next

  25. 单击Connect,设置SQL Azure数据库连接。

  26. Connect to Server对话框中,输入Azure SQL Database的连接设置。所有设置都在之前的连接字符串中。例如,如果您的数据库名称是“fabrikam-johndoe”,那么服务器名称是“fabrikam-johndoe.database.windows.net”。完成后点击连接。

  27. New database name设置为“fabrikam”,然后单击Next

  28. 单击向导最后一页上的Finish部署数据库。

Task 2: 配置生成定义以生成网站部署程序包

  1. 打开的浏览器中的TFS网站的生成标签页。

  2. 从生成选项菜单中选择Edit

  3. 选择Build Solution步骤并在现有参数之后添加以下参数。确保新参数与之前参数中间包含一个空格。

     /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true
    

  4. 点击Save保存生成定义。

Task 3: 为Azure创建发布环境

  1. 打卡浏览器中的发布标签页。

  2. 点击其中一个发布定义进行编辑。

  3. 选择Add | New environment

  4. 选择Empty process选项,点击Apply

  5. Environment name设置为“Prod-Azure”

  6. 点击Pre-deployment conditions按钮,配置此环境在QA环境成功部署后进行部署。

  7. 选择After environment触发器并选择QA环境。

  8. 现在发布管道清楚地显示了我们想要的发布顺序。

  9. 与QA环境类似,我们也希望用户Sachin成为Pre-deployment approver。 Similar to the QA environment, we also want Sachin to be the Pre-deployment approver.

  10. 另外,我们希望Sachin在部署后评审此部署版本。点击Post-deployment approvers按钮。

  11. 像以前一样将Sachin配置为批准者。

  12. 由于我们从空模板开始,因此需要手动添加将生成部署到Azure的任务。选择Tasks | Prod-Azure

  13. 单击Agent phaseAdd task按钮。

  14. Deploy类别中,选择Azure App Service: Classic任务,然后单击Add。请注意,虽然此任务已被弃用,但是为了实验简便我们还是使用此任务。

  15. 选择新加的任务。

  16. 下一步是添加TFS服务器访问您的Azure订阅的链接,以便可以自动部署。点击Manage

  17. 选择New Service Endpoint | Azure Classic

  18. 选择Certificate Based并点击底部的publish settings file选项。这里将在浏览器自动下载包含完成此表单所需详细信息的Azure发布设置文件。

  19. 当浏览器提示时,选择Save As,将名称更改为“creds.txt”,并将其保存到桌面。请注意,浏览器可能会提示登陆Azure。

  20. 使用记事本打开“creds.txt”。

  21. 找到配置Azure连接所需的三个值。请注意,如果您有多个Azure订阅,则需要确保您正在使用先前用于创建SQL Server和Web站点的订阅。

  22. Connection名称设置为“Fabrikam Azure”,并使用creds.txt中的信息配置其余详细信息。请注意,Management Certificate中的内容全部在同一行上。点击Verify connection确认成功后,点击OK

  23. 连接创建后,关闭此标签页。

  24. 返回到发布标签页。点击订阅下拉菜单旁边的Refresh按钮。这将使您能够选择刚刚创建的Azure订阅连接。选择在Azure上创建Web应用时选择的Web App Location,然后手动输入Azure网站的Web App Name。这些信息可以登陆Azure,在刚才新建的资源组中找到Web App,点击链接查看相关信息。

  25. 设置*Web Deploy Package**为以下路径。

     $(System.DefaultWorkingDirectory)/Fabrikam Development CI/drop/_PublishedWebsites/FabrikamFiber.Web_Package/FabrikamFiber.Web.zip
    

  26. 点击Save保存发布定义。

Task 4: 修改代码触发自动化部署

  1. 在浏览器中打开代码标签页,并找到下面的路径。

     $/FabrikamFiber/Dev/FabrikamFiber.CallCenter/FabrikamFiber.Web/Global.asax.cs
    
  2. 单击Edit按钮并在Application_Start方法中注释掉Database.SetInitializer调用,这行代码会导致在Azure上报错,我们已经手动设置了数据库。

  3. 点击Check in保存更改。

  4. 返回到浏览器中的生成标签页,然后单击View releases

  5. 如果新发布过程在一分钟内未显示,请刷新窗口或使用刷新按钮。批准开始Azure部署的两个请求。

  6. 打开Azure站点的浏览器选项卡,确认部署完成,然后在浏览器上打开网站。例如,如果您将站点命名为fabrikam-johndoe,那么该URL将是 http://fabrikam-johndoe.azurewebsites.net。地址也可以在Azure上查看。

  7. 返回到发布标签页,批准此次部署,可选择输入消息,然后单击Approve

  8. 现在应用直接通过TFS发布管道直接部署到了Azure上。

Task 5: 使用Visual Studio向Azure部署

  1. 在实际的开发过程中, 开发人员可以直接在Viusal Studio中很方便的将应用发布到Azure进行测试。

  2. 从任务栏打开Visual Studio

  3. Start Page界面打开FabrikamFiber.CallCenter.sln

  4. 我们将继续使用支持版本号作为我们的更改示例。从Solution Explorer中,打开文件FabrikamFiber.Web\Views\Shared\_Layout.cshtml

  5. 找到h2标签,修改标签内的文本为 Support v4.0

  6. Solution Explorer中,右键单击FabrikamFiber.Web项目并选择Publish

  7. 由于这是第一次在Visual Studio中将此项目发布到Azure,因此我们需要设置发布配置文件。点击Create new profile

  8. 选择 Microsoft Azure App ServiceSelect Existing。点击OK

  9. 请点击下拉菜单中的Add an account, 添加Azure账户。

  10. 使用Azure订阅所关联的帐户登录。

  11. 选择先前创建的App Service,然后单击OK

  12. 发布配置文件创建完毕后,点击Publish

  13. 在Visual Studio底部查看Web Publish Activity窗格中的发布进度。

  14. 完成后,在VS中关联的浏览器将打开Azure网站的URL。请注意新的版本号,确认部署成功。

Task 6: 使用部署槽

  1. Azure应用服务提供部署槽功能,部署槽是应用程序部署的一个并行运行的副本。使用部署槽的最常见场景是:当需要发布新版本时,将应用先部署到新的部署槽上,测试通过后,通过交换,将测试部署槽切换到生产网站。当交换后出现问题,也可以很方便的切换回来。

  2. 返回到浏览器中打开的Azure门户窗口。

  3. 从左侧菜单中选择Resource groups选项卡。单击早先创建fabrikam组。

  4. 点击App Service

  5. 选择Deployment slots选项卡并单击Add Slot。请注意,生产网站部署在“默认”的槽中,这个槽是不可见的。

  6. Name输入“staging”,在Configuration Source选择现有部署(应该只有一个)。点击OK创建插槽。

  7. 回到在Visual Studio中,打开_Layout.cshtml文件。将版本文本更新为“5.0”

  8. Solution Explorer中,右键单击FabrikamFiber.Web项目并选择Publish

  9. 我们需要为向新部署槽中的部署创建发布配置文件。点击Create new profile

  10. 选择Microsoft Azure App ServiceSelect Existing。点击OK

  11. 展开并选择staging部署槽,然后单击OK

  12. 所有设置与默认的生产部署槽类似,只是在所有配置字符中加了“-staging”字符。访问新建部署槽网站应用的URL也添加了此字符串。例如,如果您的网站是“fabrikam-johndoe”开头,那么部署到槽“staging”的网站URL应该为“fabrikam-johndoe-staging”开头。单击Publish部署。

  13. 部署完成后,浏览器会打开新部署的应用,可通过更新的版本号文本进行验证。

  14. 但是,如果从URL中去掉“-staging”,然后按Enter键,则会发现生产站点仍是v4.0。

  15. 从Visual Studio的左侧展开Server Explorer

  16. 展开Azure节点,查看IDE内可访问的所有资源。生产槽是默认的,而staging槽位于Slots下方一个级别。您可以从服务器资源管理中执行很多操作,包括打开文件进行编辑(并保存回Azure),查看日志,管理WebJobs等等。

  17. 在浏览器中返回Azure门户标签页。单击槽界面中的Swap

  18. 默认选项即为交换生产和staging槽。点击OK。请注意,如果您的slot-level configuration settings进行了配置(例如连接字符串或标记为“slot”的应用设置),则工作进程将重新启动。如果您想在交换完成之前加载应用程序,则可以选择Swap with preview的交换方式。

  19. Visual Studio中打开的浏览页面右键选择Refresh。请注意,别使用F5,因为它会生成并运行解决方案。

  20. 现在production网站应该显示的是v5.0版本。

  21. 现在staging槽中的网站是v4.0版本。如果v5.0版本发生故障,您可以再次交换,进行部署回滚。

  22. 这个练习中,我们使用Visual Studio部署到staging槽,但您也可以在TFS中设置CI,CD以部署到staging槽。