将开发测试实验室集成到 Azure Pipelines

可以使用 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 扩展:

    1. 转到 Azure 开发测试实验室任务
    2. 选择“免费获取”。
    3. 从下拉列表中选择你的 Azure DevOps Services 组织,然后选择“安装”。

创建模板以生成实验室 VM

首先,构造一个 Azure 资源管理器 (ARM) 模板,用于按需创建实验室 VM。

  1. 在 Azure 门户的实验室中,选择顶部菜单栏中的“添加”。
  2. 在“选择基础映像”屏幕上,为 VM 选择一个 Windows 基础映像。
  3. 在“创建实验室资源”屏幕的“项目”下,选择“添加或删除项目”。
  4. 在“添加项目”屏幕上,搜索“winrm”,然后选择“配置 WinRM”旁边的箭头。
  5. 在“添加项目”窗格上,为 VM 输入一个完全限定的域名 (FQDN),例如 contosolab00000000000000.westus3.cloudapp.azure.com。 选择“确定”,然后再选择“确定”。
  6. 选择“高级设置”选项卡,对于“IP 地址”,选择“公共”。

    注意

    如果将 WinRM 项目与共享 IP 地址一同使用,必须添加网络地址转换 (NAT) 规则,将外部端口映射到 WinRM 端口。 如果创建使用公共 IP 地址的 VM,则不需要添加 NAT 规则。 对于本演练,请创建具有公共 IP 地址的 VM。

  7. 选择“查看 ARM 模板”。
  8. 复制模板代码,并在本地源代码管理分支中将其保存为一个名为 CreateVMTemplate.json 的文件。
  9. 将该模板签入到项目的源代码管理系统。

创建脚本以获取 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 的值。

  1. 在 Azure DevOps Services 项目页的左侧导航栏中,选择“管道”>“发布”。
  2. 选择“新建管道”。
  3. 在“选择模板”窗格中,选择“空作业”。
  4. 关闭“阶段”窗格。
  5. 在“新建发布管道”页上,选择“变量”选项卡。
  6. 选择“添加”,然后输入以下“名称”和“值”对,添加每对后选择“添加”。
    • vmName:在 ARM 模板中分配的 VM 名称。
    • userName:用于访问 VM 的用户名。
    • password:用户名的密码。 选择锁形图标来隐藏和保护密码。

添加项目

  1. 在“新建发布管道”页的“管道”选项卡上,选择“添加工件”。
  2. 在“添加工件”窗格中,选择“Azure 存储库”。
  3. 在“项目”列表中,选择你的 DevOps 项目。
  4. 在“源(存储库)”列表中,选择你的源存储库。
  5. 在“默认分支”列表中,选择要签出的分支。
  6. 选择 添加

创建开发测试实验室 VM

下一步是创建黄金映像 VM 用于将来的部署。 此步骤使用“Azure 开发测试实验室创建 VM”任务。

  1. 在“新建发布管道”页的“管道”选项卡上,选择“阶段 1”中的超链接文本。

  2. 在左侧窗格中,选择“代理作业”旁的加号 +

  3. 在右侧窗格的“添加任务”下,搜索并选择“Azure 开发测试实验室创建 VM”,然后选择“添加”。

  4. 在左侧窗格中,选择“创建 Azure 开发测试实验室 VM”任务。

  5. 在右窗格中填充表单,如下所示:

    • Azure RM 订阅:从下拉列表中选择你的服务连接或订阅,然后选择“授权”(如有必要)。

      注意

      有关与 Azure 订阅建立权限受限程度更高的连接的信息,请参阅 Azure 资源管理器服务终结点

    • 实验室:选择开发测试实验室名称。

    • 虚拟机名称:你为虚拟机名称指定的变量:$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 的详细信息。

  1. 在发布管道“任务”选项卡上,选择“代理作业”旁的加号。+
  2. 在右侧窗格的“添加任务”下,搜索并选择“Azure PowerShell”,然后选择“添加”。
  3. 在左侧窗格中,选择“Azure PowerShell 脚本: FilePath”任务。
  4. 在右窗格中填充表单,如下所示:
    • Azure 订阅:选择服务连接或订阅。
    • 脚本类型:选择“脚本文件路径”。
    • 脚本路径:浏览到并选择要签入源代码存储库的 PowerShell 脚本。 可以使用内置属性来简化路径,例如:$(System.DefaultWorkingDirectory/Scripts/GetLabVMParams.ps1
    • 脚本参数:输入值为 -labVmId $(vm.labVmId)

该脚本将收集所需的值,并将其存储在发布管道中的环境变量内,便于你在后续步骤中引用它们。

从开发测试实验室 VM 创建 VM 映像

下一个任务在实验室中创建新部署的 VM 的映像。 可以使用该映像按需创建 VM 的副本,以执行开发人员任务或运行测试。

  1. 在发布管道“任务”选项卡上,选择“代理作业”旁的加号。+
  2. 在“添加任务”下,依次选择“Azure 开发测试实验室 - 创建自定义映像”、“添加” 。
  3. 在左侧窗格中,选择“Azure 开发测试实验室创建自定义映像”任务。
  4. 在右窗格中填充表单,如下所示:
    • Azure RM 订阅:选择服务连接或订阅。
    • 实验室:选择实验室。
    • 自定义映像名称:输入自定义映像的名称。
    • 说明:输入可选说明以便轻松选择适当的映像。
    • 源实验室 VM:源 labVmId。 输入值为 $(vm.labVmId)
    • 输出变量:如果需要,可以编辑默认自定义映像 ID 变量的名称。

将应用部署到开发测试实验室 VM(可选)

可以添加任务以将应用部署到新的开发测试实验室 VM。 如果只想试验创建开发测试实验室 VM 和自定义映像,而不部署应用,可跳过此步骤。

用于部署应用的任务通常是“Azure 文件复制”和“目标计算机上的 PowerShell”。 可以在发布管道中名为 labVmRgName、labVMIpAddress 和 labVMFqdn 的三个配置变量中找到任务参数所需的 VM 信息。

删除 VM

最后一项任务是删除实验室中已部署的 VM。 在部署的 VM 上执行所需开发人员任务或运行所需测试后,通常要删除该 VM。

  1. 在发布管道“任务”选项卡上,选择“代理作业”旁的加号。+
  2. 在“添加任务”下,依次选择“Azure 开发测试实验室 - 删除 VM”、“添加” 。
  3. 对任务进行如下配置:
    • Azure RM 订阅:选择服务连接或订阅。
    • 实验室:选择实验室。
    • 虚拟机:输入值为 $(vm.labVmId)
    • 输出变量:在“引用名称”下,如果你更改了 labVmId 变量的默认名称,请在此处输入所用名称。 默认值为 $(labVmId)。

保存发布管道

若要保存新的发布管道,请执行以下操作:

  1. 在发布管道页顶部选择“新建发布管道”,然后输入管道的新名称。
  2. 选择右上角的“保存”。

创建并运行发布

若要使用新管道创建并运行发布,请执行以下操作:

  1. 在发布管道页上,选择右上角的“创建发布”。
  2. 在“项目”下选择最新版本,然后选择“创建” 。

在每个发布阶段,都可以在 Azure 门户中刷新实验室的视图,以查看 VM 创建、映像创建和 VM 删除操作的状态。

每当需要 VM 时,都可以使用自定义映像创建 VM。

后续步骤