ALM Rangers

Visual Studio ALM Rangers: Rise of the VM Factory

**Willy-Peter Schaub
Brian Blackman
Paul Meyer

下载代码示例

在本文中,我们深入了虚拟机厂 (VM),探索其理念和优势。

这篇文章是一系列的 Visual Studio ALM 护林现状的指导,帮助您解决复杂的、 真实的环境中存在的问题的一部分。 我们的目标是帮助您提高一致性和您的解决方案与您整个应用程序生命周期管理 (ALM) 过程的质量。

重述一遍,护林是一组的专家们解决缺少的功能,通过促进 Visual Studio 产品组、 Microsoft 服务和微软最有价值专家 (MVP) 社区之间的合作,删除通过受体阻滞剂和发布的最佳做法和指导,基于现实世界的经验。

虚拟机厂 (rangersvsvmfactory.codeplex.com) 是参考实现的软件解决方案和相关的指导,可以自动创建虚拟环境几乎完全自动化的、 一致的工厂的策略。 VM Factory 的目的是发展围绕虚拟化,特别是对于 Visual Studio、 团队基础服务器 (TFS)、 实验室管理和相关的系统必备组件的说明性指导。 主要的目标,如中所示 (与相应的数字)图 1,是: (1) 灵活的架构驱动的自动化 ; (2) 简单的一次单击虚拟机 (VM) 的创作方案 ; (3) 可重用的工厂能够自动安装和配置的物理和虚拟环境 ; (4) 一致且可重复的环境 ; (5) 能够重复使用预配置的环境。

VM Factory Objectives
图 1 虚拟机厂目标

VM 工厂目标不追求什么是生成和配置的时间减少。 这被称为反模式。

VM 厂虽远更有效率和纪律比人类的对应,环境生成时间大部分是实际安装的时间,不能明显减少自动化组成。 摆脱游侠的生态系统,它的范围内操作的分布式、 断开连接和往往较低的带宽环境制约因素而著称的 VM 厂倡议 (参阅 2011 年 9 月,"Visual Studio ALM 巡警 — — 虚拟团队,思考"在 msdn.microsoft.com/magazine/hh394152)。 尽管共享和下载互联网上的虚拟机是可行的是普遍接受的做法,它可以是带宽昂贵和稀缺资源的位置的一个挑战。 投资几天,甚至几个星期,而不是下载一个虚拟机,虚拟机厂允许相同的图像,重新创建远程利用本地资源。 本地资源可能有局限性,尽管这些重新创建的图像传送最少或无需用户干预

提供一致的映像是另一核心优势,我们常常忘记,更不用说,但护林使用 VM 工厂的主要原因之一。 意象图式流版本,这意味着当我们要解决的问题,那么另一个生成包含一个新的软件版本 (v2) 创建一个新的版本 (1.1 版),我们知道该修补程序和新的软件将流向后续版本。 这在下一个版本 (v3) 可能不会生成的几个月甚至数年时特别有用。 时,很多时间间隔版本之间,不同的团队可能分配给该项目。 如果一致的映像是到位,配置虚拟机厂任务序列和结构安装程序行为作为生活文档的新团队可以工作。

最后但并非最不重要的是,VM 工厂允许点播形象塑造。 关于拉从存储的图像是否是最新的图像,这减少了对台式机和笔记本电脑,以及"焦虑"的磁盘存储要求。

在实验室管理中的虚拟化提供构建、 部署和测试软件的自动化工作流程。 创建这些虚拟环境需要大量的手动操作。 你目前已建立的虚拟机和模板库为微软系统中心虚拟机管理器 (VMM)。 另外,您必须在实验室管理拓扑内工作。

使用 VM 工厂大大降低创建虚拟机和虚拟机所需的模板。 更重要的是,虚拟机厂使容易更改操作系统或应用程序,用于虚拟机或虚拟机模板。 VM 工厂很容易,因为你只需要更改任务序列,然后再执行图像自动的重建。 在 VM 工厂,这些被称为黄金图像和源虚拟机实验室的管理功能。

当您创建虚拟机时,系统会提示您选择要执行的任务序列。 我们提供两个任务序列 Visual Studio ALM 巡警实验室的管理,这两个我们将更详细地以后。

工厂建筑一瞥

如中所示 (与相应的数字) 图 2,VM 工厂建筑可以主持 (1) 任何 Windows 平台,具有最小的必备条件,如最小的 1 GB 的 RAM 和 100 GB 的可用磁盘空间专用于 VM 工厂。 体系结构基于 (2) Microsoft 部署工具包 (MDT),Microsoft 解决方案加速器之一 (bit.ly/tp5QX4)。 工具箱中提供了 (3) 的共同管理控制台和综合工具和指导,定义和管理部署操作系统和应用程序。 我们使用 (4) 任务序列,定义所需部署操作系统和应用程序如 Microsoft Office 和 Visual Studio,(5) 使用的自定义脚本如 Windows PowerShell 的脚本,后来在这篇文章,和 (6) 的引用的操作系统和应用程序来使用的媒体包括安装和配置步骤的顺序。 目前,虚拟机厂假定所有媒体都是身在 VM 工厂。 然而,我们正在研究的选项,将允许我们引用其他媒体来源,如 MSDN 下载,以提供更大的灵活性和重复使用现有的资源。

VM Factory Architecture
图 2 VM 工厂体系结构

每个虚拟机厂附带 (7) Litetouch CD 启动 ISO 映像。 这允许您启动新的安装和连接到部署共享托管的虚拟机的工厂。 在引导和安装过程中,(8) 的适当任务序列处于选中状态。 任务序列定义软件、 配置和引导的 Litetouch 在安装过程中应用于 (9) 目标机器的脚本。

Visual Studio ALM 巡警 VM 厂是一个具有预定义的工厂任务序列的 prepopulated 的 MDT 实例。 这些任务序列生成新机部署的 MDT 任务序列模板的顶部。 他们定义从裸机创建一台新机器所需的所有步骤 (或裸露虚拟金属 VM Factory 的情况下)。 从开始格式化硬盘并安装操作系统,步骤继续达 (并包括) 的应用程序的安装。

在 VM Factory 中包括的任务序列由每天用于生成图像的示威,证明的概念、 动手实验室和测试的目的。 以下是这些任务序列的说明:

  • 团队的基础服务器基本映像任务序列定义包容各方的 Visual Studio 图像包含这两种 TFS 的客户端和服务器功能。 也包括在 Word 2007,Excel 2007、 PowerPoint 2007 和 Microsoft Office SharePoint 服务器 (MOSS) 2007年可选)。 X 86 (基于 Windows Server 2008) 和 x 64 (Windows Server 2008 R2) 任务序列都包括在 VM 工厂。
  • 实验室管理动手实验室图像任务序列定义全演示环境实验室的管理。 它具有基于 x64 TFS 基本图像,但也包含 Active Directory、 DHCP 和 VMM。 DHCP 是完全配置,但出于安全考虑禁用。 VMM 和 Visual Studio 实验室管理都完全配置,只需要添加到默认主机组加入域的 HYPER-V 主机 VMM 中。
  • 实验室管理基础映像任务序列可用于创建图像来测试您的软件使用 Visual Studio 实验室管理。 它定义了基于 Windows Server 2008 R2 的图像,并安装 Visual Studio 测试代理、 Visual Studio 测试控制器、 Visual Studio 实验室管理代理和视觉工作室团队基础建设。 大多数测试配置将需要这些代理的组合。

当您设置了自己的工厂时,可以修改您的需要的这些序列或他们用作您自己的自定义任务序列的基地。 有关如何执行此操作的详细信息,请参阅本文后面的"管理"部分。

与 Windows PowerShell 自动化

VM 工厂包含游侠工厂自动化安装,主动为开发的 Windows PowerShell 脚本配置和调整的 Visual Studio ALM 护林基础图像。 除了对 Windows PowerShell 脚本和 CMD 文件,我们充分利用其他 Microsoft 服务或产品应用程序如 ntrights.exe、 stsadm.exe、 psconfig.exe 和 iisreset.exe。

初始工厂规划要求只有 Windows PowerShell 脚本。 但是,我们通过 MDT Visual Studio ALM 护林基础图像厂和调用 Windows PowerShell 脚本来执行特殊的配置,优化和调整的基于 MDT 的安装程序。 我们将介绍一些重要的说明和几个快照的脚本,指导您的完整源 VM 工厂。

要成功运行的 Windows PowerShell 脚本,您必须安装的 Windows PowerShell。 脚本被设计为在 Windows Server 2008 或更高版本上运行。 因为没有登录脚本,而提升的权限要对系统进行更改,您必须运行 Windows PowerShell 命令"集 ExecutionPolicy 不受限制"。

如果您使用 PowerGUI powergui.org,这是 Windows PowerShell GUI 和脚本编辑器,从脚本不会运行在调试模式下。 在适当的 Windows PowerShell 中或通过使用 Alt + F5 在使用 PowerGUI 时,您必须运行它们。 1-Pre.ps1 脚本最后,需要 NTRights.exe,这从 Windows Server 2003 资源工具包安装。 NTRights.exe,没有你要禁用脚本函数 createTFSAccounts 和手动设置为 TFSSERVICE 和 TFSBUILD 的服务帐户的交互式登录权利的最后几行的呼叫 (请参见图 3)。 您可以下载从 Windows Server 2003 资源工具包工具: bit.ly/fbafh.

图 3 使用的 Windows PowerShell Script 中的 NTRights.exe

function createTFSAccounts
{
  blankline
  "Creating the 5 TFS accounts.
Namely TFSREPORTS"
  ", TFSSERVICE TFSBUILD,WSSSERVICE & SQLSERVICE with"
  " all their passwords set to P@ssw0rd"
  createUser "TFSREPORTS" "P@ssw0rd"
  createUser "TFSSERVICE" "P@ssw0rd"
  createUser "TFSBUILD" "P@ssw0rd" $true
  createUser "WSSSERVICE" "P@ssw0rd"
  createUser "SQLSERVICE" "P@ssw0rd"
  $currentLocal = Get-Location
# Set-Location 'C:\Program Files (x86)\Windows Resource Kits\Tools\'
  ./ntrights.exe +r SeInteractiveLogonRight -u TFSSERVICE
  ./ntrights.exe +r SeInteractiveLogonRight -u TFSBUILD
  Set-Location $currentLocal
}

前和 post-factory 的安装的 Windows PowerShell 脚本包含几个功能,使用各种对象和类型的适配器,如中所示的活动目录服务接口 (ADSI) 类型适配器图 4

图 4 使用 Windows PowerShell ADSI 类型适配器

#Creates a user and sets the password to never expire
function createUser([String]$accountName, [string]$password, [bool]$delegated = $false)
{ 
  $computer = [adsi] "WinNT://$hostname" 
  $user = $computer.Create("User", $accountName)     
  $user.SetPassword($password)
  $flags = 65536 -bor 64
  if ($delegated)
  {
    $flags = $flags -bor 1048576
  }
  $user.put("UserFlags",$flags)
  $user.SetInfo()                                                       
}

Windows PowerShell ADSI 类型适配器用于创建用户帐户设置密码、 设置管理员密码为永不过期。 有自由使用集合的 item 属性和新-item 属性 Windows PowerShell cmdlet VM 工厂,如启用预取、 设置程序优先级和禁用 Windows Server 2003 的可靠性功能的一些操作注册表。 在这些更改注册表最大限度减少所需实现自动化的好处,如中所示的手动配置任务图 5

图 5 操作关闭事件跟踪程序

function ShutdownEventTracker
{ 
  new-item 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability'
    -erroraction silentlycontinue
  Set-ItemProperty –Path
    'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability'
    -name "ShutdownReasonOn" -Value 0
  Set-ItemProperty -Path
    'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability'
    -name "ShutdownReasonUI" -Value 0
}

正如我们刚才所说,我们建议您浏览的完整代码,以便您可以了解我们如何使用 Windows PowerShell 自动执行许多其他任务如禁用屏幕保护程序、 禁用入站的防火墙、 启用远程桌面、 禁用 IE 增强的安全性、 启用超级读取和更改服务器名称。

政府

管理虚拟机厂是简单的。 VM 厂基本上是一个 prepopulated 的 MDT 部署共享,因为 MDT 的一切可能性是随时倾听您的定制或扩展。 MDT 部署股管理的主要工具是部署工作台。 帮助主题的文档部署工作台很好,但准备印刷文档可以从下载 go.microsoft.com/?linkid=9707467。 我们将为您快速入门的简短说明。

显示与熟悉的管理控制台的用户界面出来当你开始部署工作平台时,如图所示,在图 6。 在左窗格中,展开部署股份的节点。 如果您遵循指示指导 CodePlex 上正确,"VSTS 巡警部署共享"应该是可用的。 如果没有,您现在可以打开它在最右边的窗格中使用相应的操作。

Deployment Workbench Administration Interface
图 6 部署工作台管理界面

让我们看看图 6。 通过扩展 VSTS 巡警部署共享,您可以浏览该部署共享的内容。 这是磁盘上的 XML 文件的部署共享目录控件目录中的用户友好的视图。 应用程序、 操作系统和任务序列是我们感兴趣的要点。 每当您的部署共享设置进行更改,则应选择更新部署共享。 这将重新生成用于启动的任何任务序列的启动映像。

应用程序定义描述在应用程序的源文件中部署共享的位置以及如何安装应用程序使用安静安装命令,如图所示,在图 7。 该命令不需要任何用户交互,以完成安装。 有时,这需要您准备通过无人参与的安装脚本创建的安装程序。 如有需要,护林已经为虚拟机厂中的应用程序。

Task Sequence Task Details
图 7 任务序列任务详细信息

为操作系统定义,MDT 是可以从操作系统安装源提取所有必要的信息。 通常情况下,一组源文件将包含文件的多个版本的操作系统。 所有不同的版本将列出在操作系统下,可以选择要安装的任务序列。

VM 工厂,较早前,描述中包括的任务序列位于任务序列节点下。 查看任务序列的属性允许您修改任务序列本身。 图 8 任务序列的节目分为几个阶段。 安装阶段,这将安装操作系统,重要的阶段,状态恢复的阶段,而处理所有操作系统后安装。 工具栏提供选项来添加或删除任务序列的步骤。 MDT 提供几个不同的步骤。 图 8 还显示安装的应用程序任务的属性。

Task Sequence Properties
图 8 任务序列属性

扩展虚拟机厂

扩展虚拟机厂也是简单明了的。 让我们看看另一个工具添加图像的基本步骤。 作为一个例子,我们将添加代码度量电动工具 (microsoft.com/download/en/details.aspx?id=9422) 的任务序列。 由名为 MetricsSetup.exe 的可执行文件,则安装此工具。 此过程包括以下步骤:

  1. 确定应用程序的静默安装命令行
  2. 复制到部署共享应用程序
  3. 启动 MDT 部署工作台
  4. 创建新的应用程序定义
  5. 添加任务序列中的应用
  6. 更新任务序列测试

第一步是要找出如何安装此工具,无需用户交互 — — 无人值守的安装。 我们可以看看无人参与的安装信息的产品文档。 通常给我们一个暗示的另一种方法执行的文件 / 吗? 或-吗? 作为参数。 当我们运行 MetricsSetup.exe /? 从命令行中,使用对话框的框中图 9 所示。 我们确认安静安装命令行 MetricsSetup.exe /q 通过运行此测试计算机上。

Result of Running MetricsSetup.exe /?
图 9 结果的运行 MetricsSetup.exe / 吗?

第二步是移动或将本软件复制到部署共享中的正确位置。 要符合部署共享软件的其余部分,我们创建一个名为"C:\Deploymentshare\INSTALL — — 代码度量标准电源 Tool\Source\"的目录,并将可执行文件复制到新目录。

现在,这些文件是在正确的位置,我们开始 MDT 部署工作台 (步骤 3) 添加应用程序定义 (第 4 步)。 从 MDT 的初始视图 (请参阅图 6),我们查找和选择左窗格中的应用程序节点并选择新的应用程序。 向导会帮助我们创建新的应用程序定义。 在向导的第一页,我们选择"应用程序不包含源文件或网络上的其他地方",因为我们已经搬到正确的位置的可执行文件。

在向导的下一页,我们需要输入应用程序的名称将显示在所有接口和不使用过程中的一些附加的可选信息。 应用程序定义过程向导最后一页是输入的安静安装命令和源目录 (请参见图 10)。 完成该向导后, 你会发现新的应用程序应用程序列表中。

New Application Wizard: Defining Command Details
Figure 10 New Application Wizard: Defining Command Details

其实安装应用程序,我们需要添加到任务序列 (第 5 步) 的步骤。 在任务序列编辑器中,找到您要在其中添加安装操作的位置。 在工具栏上的添加菜单中,选择一般 |安装应用程序任务序列要添加新的动作。 在右侧的属性窗格中,选择"安装单个应用程序",单击浏览选择代码度量电力工具的应用程序。 单击确定以保存任务顺序。 我们准备测试 (步骤 6)。

最新的指导

现在你知道一切您需要知道要开始调整您的部署共享您的特定需要。

您可以找到最新的指导和部署共享模板 CodePlex (bit.ly/aL0mxZ) 和目录相关联的博客、 视频和其他巡警博客上的信息 (bit.ly/qEIRPl)。

有经验证的概念和技术可行性的自动化和 VM Factory 所提供的一致性,我们计划了以下改进:

  • 更方便的实施和管理的新工厂
  • 现有的工厂后部署水化倡议的大原则, 的友好和控制维护
  • 工厂自动化调度能力
  • 使用现有的媒体库,比如 MSDN 下载,而不是复制媒体在每个工厂的能力

敬请关注,我们继续加强这种重要的工具。

Brian Blackman 是与 Microsoft 服务合作伙伴 ISV 团队,专注于影响 ISV 合作伙伴的成功中工程和在市场上的主要顾问他是 CSM、 MCSD (c + +)、 MCTS 和 Visual Studio ALM 核心游侠。他把他的时间编写代码、 创建和交付工作坊以及在不同浓度和一切 ALM 咨询。

Paul Meyer 是高级应用平台顾问与 Microsoft 服务在荷兰,强重点开发流程和工具。几年来他一直参与 Visual Studio ALM 巡警项目。

Willy-Peter Schaub 是高级项目经理和 Visual Studio ALM 流浪者在微软加拿大发展中心。由于中期-八十年代,他一直努力的简单性和可维护性软件工程中的。他的博客是在 blogs.msdn.com/b/willy-peter_schaub ,他是在 Twitter 上 twitter.com/wpschaub

衷心感谢以下技术专家对本文的审阅:Vladimir Gusarov, Bill Heys, Bijan Javidi, Zayd Kara, Vijay Machiraju, Robert MacLean, Rui MeloPatricia Wagner