将开发测试实验室集成到 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),例如 。 选择“确定”,然后再选择“确定”。
  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 Repo”。
  3. 在“项目”列表中,选择你的 DevOps 项目。
  4. 在“源(存储库)”列表中,选择你的源存储库。
  5. 在“默认分支”列表中,选择要检出的分支。
  6. 选择 添加

创建开发测试实验室 VM

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

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

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

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

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

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

    • 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 的详细信息。

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

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

从 DevTest 实验室中的 VM 创建 VM 映像

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

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

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

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

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

删除 VM

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

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

保存发布管道

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

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

创建并运行发布版本

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

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

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

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

后续步骤