可以使用 Azure DevTest Labs Tasks 扩展将 Azure 开发测试实验室集成到 Azure Pipelines 持续集成和持续交付 (CI/CD) 管道。 该扩展将几个任务安装到 Azure Pipelines,包括:
- 创建虚拟机 (VM)
- 从 VM 创建自定义映像
- 删除 VM
通过这些任务可以轻松完成各种操作,例如,快速部署黄金映像 VM,运行特定测试,并删除该 VM。
本文介绍如何使用 Azure DevTest Labs Tasks 在一个发布管道中创建和部署 VM,创建自定义映像,然后删除该 VM。 通常,在你自己的构建、测试和部署管道中单独执行这些任务。
开始使用 Azure 开发测试实验室
刚接触 Azure? 创建免费的 Azure 帐户。
使用过 Azure? 创建第一个实验室并完成 Azure 开发测试实验室快速入门。
先决条件
在 Azure 门户中,创建开发测试实验室,或使用现有的实验室。
注册或登录到 Azure DevOps Services 组织,然后创建项目,或使用现有的项目。
从 Visual Studio Marketplace 安装 Azure DevTest Labs Tasks 扩展:
- 转到 Azure 开发测试实验室任务。
- 请选择“免费获取”。
- 从下拉列表中选择你的 Azure DevOps Services 组织,然后选择“安装”。
创建模板以生成实验室 VM
首先,构造一个 Azure 资源管理器 (ARM) 模板,用于按需创建实验室 VM。
- 在 Azure 门户的实验室中,选择顶部菜单栏中的“添加”。
- 在“选择基础映像”屏幕上,为 VM 选择一个 Windows 基础映像。
- 在“创建实验室资源”屏幕的“项目”下,选择“添加或删除项目”。
- 在“添加项目”屏幕上,搜索“winrm”,然后选择“配置 WinRM”旁边的箭头。
- 在“添加项目”窗格上,为 VM 输入一个完全限定的域名 (FQDN),例如 。 选择“确定”,然后再选择“确定”。
- 选择“高级设置”选项卡,对于“IP 地址”,选择“公共”。
注意
如果将 WinRM 项目与共享 IP 地址一同使用,必须添加网络地址转换 (NAT) 规则,将外部端口映射到 WinRM 端口。 如果创建使用公共 IP 地址的 VM,则不需要添加 NAT 规则。 对于本演练,请创建具有公共 IP 地址的 VM。
- 选择“查看 ARM 模板”。
- 复制模板代码,并在本地源代码管理分支中将其保存为一个名为 CreateVMTemplate.json 的文件。
- 将该模板签入到项目的源代码管理系统。
创建脚本以获取 VM 属性
接下来,创建一个脚本来收集任务步骤(如 Azure 文件复制 和 目标计算机上的 PowerShell)用于将应用部署到 VM 的参数。 你通常使用这些任务将自己的应用部署到 Azure VM。 这些任务需要 VM 资源组名称、IP 地址和 FQDN 等值。
注意
建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
使用类似于 GetLabVMParams.ps1 的名称保存以下脚本,然后将其签入到项目的源代码管理系统。
Param( [string] $labVmId)
$labVmComputeId = (Get-AzResource -Id $labVmId).Properties.ComputeId
# Get lab VM resource group name
$labVmRgName = (Get-AzResource -Id $labVmComputeId).ResourceGroupName
# Get the lab VM Name
$labVmName = (Get-AzResource -Id $labVmId).Name
# Get lab VM public IP address
$labVMIpAddress = (Get-AzPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).IpAddress
# Get lab VM FQDN
$labVMFqdn = (Get-AzPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).DnsSettings.Fqdn
# Set a variable labVmRgName to store the lab VM resource group name
Write-Host "##vso[task.setvariable variable=labVmRgName;]$labVmRgName"
# Set a variable labVMIpAddress to store the lab VM Ip address
Write-Host "##vso[task.setvariable variable=labVMIpAddress;]$labVMIpAddress"
# Set a variable labVMFqdn to store the lab VM FQDN name
Write-Host "##vso[task.setvariable variable=labVMFqdn;]$labVMFqdn"
在 Azure 管道中创建发布管道
接下来,在 Azure Pipelines 中创建发布管道。 管道任务使用你在创建 ARM 模板时指定给 VM 的值。
- 在 Azure DevOps Services 项目页面的左侧导航栏中,选择管道>中的发布。
- 选择“新建管道”。
- 在“选择模板”窗格中,选择“空白作业”。
- 关闭“阶段”窗格。
- 在“新建发布管道”页上,选择“变量”选项卡。
- 选择“添加”,然后输入以下“名称”和“值”对,输入每对后再选择“新增”。
- vmName:在 ARM 模板中分配的 VM 名称。
- userName:用于访问 VM 的用户名。
- password:用户名的密码。 选择锁形图标来隐藏和保护密码。
添加工件
- 在“新发布管道”页的“管道”选项卡上,选择“添加构件”。
- 在“添加工件”窗格中,选择“Azure Repo”。
- 在“项目”列表中,选择你的 DevOps 项目。
- 在“源(存储库)”列表中,选择你的源存储库。
- 在“默认分支”列表中,选择要检出的分支。
- 选择 添加 。
创建开发测试实验室 VM
下一步是创建黄金映像 VM 用于将来的部署。 此步骤使用“Azure 开发测试实验室创建 VM”任务。
在新建发布管道页面的“管道”选项卡中,选择“阶段 1”中的带有链接的文本。
在左侧窗格中,选择“代理作业”旁边的加号 +。
在右侧窗格的“添加任务”下,搜索并选择“Azure 开发测试实验室创建 VM”,然后选择“添加”。
在左侧窗格中,选择“创建 Azure 开发测试实验室 VM”任务。
在右窗格中填充表单,如下所示:
Azure RM 订阅:从下拉列表中选择你的服务连接或订阅,然后选择“授权”(如有必要)。
注意
有关创建更严格的权限连接以访问您的 Azure 订阅的信息,请参阅 Azure 资源管理器服务端点。
Lab:选择你的 DevTest Labs 实验室名称。
虚拟机名称:你为虚拟机名称指定的变量:$vmName。
模板:浏览并选择已签入到项目存储库的模板文件。
参数文件:如果已将一个参数文件提交到你的存储库,请浏览并选择它。
参数覆盖:输入
-newVMName '$(vmName)' -userName '$(userName)' -password '$(password)'
。下拉“输出变量”,在“引用名称”下,输入已创建的实验室 VM ID 的变量。 为简单起见,我们输入 vm 作为“参考名称”。 labVmId 将是此变量的属性,稍后将称为 $vm.labVmId。 如果你使用任何其他名称,请记得在后续任务中相应地使用它。
Lab VM ID 将采用以下格式:
/subscriptions/{subscription Id}/resourceGroups/{resource group Name}/providers/Microsoft.DevTestLab/labs/{lab name}/virtualMachines/{vmName}
。
收集开发测试实验室 VM 的详细信息
接下来,管道运行你创建的脚本,以收集开发测试实验室 VM 的详细信息。
- 在发布管道任务选项卡上,选择+“代理作业”旁的加号。
- 在右侧窗格的“添加任务”下,搜索并选择“Azure PowerShell”,然后选择“添加”。
- 在左侧窗格中,选择“Azure PowerShell 脚本: FilePath”任务。
- 在右窗格中填充表单,如下所示:
- Azure 订阅:选择服务连接或订阅。
- 脚本类型:选择“脚本文件路径”。
- 脚本路径:浏览并选择已签入到源代码存储库的 PowerShell 脚本。 可以使用内置属性来简化路径,例如:
$(System.DefaultWorkingDirectory/Scripts/GetLabVMParams.ps1
。 - 脚本参数:输入值为 -labVmId $(vm.labVmId)。
该脚本将收集所需的值,并将其存储在发布管道中的环境变量内,便于你在后续步骤中引用它们。
从 DevTest 实验室中的 VM 创建 VM 映像
下一个任务在实验室中创建新部署的 VM 的映像。 可以使用该映像按需创建 VM 的副本,以执行开发人员任务或运行测试。
- 在发布管道任务选项卡上,选择+“代理作业”旁的加号。
- 在“添加任务”下,依次选择“Azure DevTest 实验室创建自定义映像”,然后选择“添加”。
- 在左侧窗格中,选择“Azure 开发测试实验室创建自定义映像”任务。
- 在右窗格中填充表单,如下所示:
- Azure RM 订阅:选择服务连接或订阅。
- 实验室:请选择实验室。
- 自定义映像名称:输入自定义映像的名称。
- 说明:输入可选说明以便轻松选择适当的映像。
- 源实验室虚拟机:源 labVmId。 输入值为 $(vm.labVmId)。
- 输出变量:如果需要,可以编辑默认自定义映像 ID 变量的名称。
将应用部署到开发测试实验室 VM(可选)
可以添加任务以将应用部署到新的开发测试实验室 VM。 如果只想试验创建开发测试实验室 VM 和自定义映像,而不部署应用,可跳过此步骤。
通常用于部署应用程序的任务是“Azure 文件复制”和“目标机器上的 PowerShell”。 可以在发布管道中名为 labVmRgName、labVMIpAddress 和 labVMFqdn 的三个配置变量中找到任务参数所需的 VM 信息。
删除 VM
最后一项任务是删除实验室中已部署的 VM。 在部署的 VM 上执行所需开发人员任务或运行所需测试后,通常要删除该 VM。
- 在发布管道任务选项卡上,选择+“代理作业”旁的加号。
- 在添加任务下,选择Azure DevTest 实验室删除 VM,然后选择添加。
- 对任务进行如下配置:
- Azure RM 订阅:选择服务连接或订阅。
- 实验室:请选择实验室。
- 虚拟机:输入值为 $(vm.labVmId)。
- 输出变量:在“引用名称”下,如果你更改了 labVmId 变量的默认名称,请在此处输入所用名称。 默认值为 $(labVmId)。
保存发布管道
若要保存新的发布管道,请执行以下操作:
- 在发布管道页顶部选择“新建发布管道”,然后输入管道的新名称。
- 选择右上角的“保存”。
创建并运行发布版本
若要使用新管道创建并运行发布,请执行以下操作:
- 在发布管道页面上,选择右上角的
创建发布 。 - 在“工件”下选择最新版本,然后选择“创建”。
在每个发布阶段,都可以在 Azure 门户中刷新实验室的视图,以查看 VM 创建、映像创建和 VM 删除操作的状态。
每当需要 VM 时,都可以使用自定义映像创建 VM。
后续步骤
- 若要深入了解适用于开发测试实验室自动化的 ARM 模板快速入门,请参阅公共开发测试实验室 GitHub 存储库。
- 如有需要,请参阅 Azure Pipelines 故障排除。