You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GitHub Actions中捕获新部署Azure VM的IP以执行矩阵策略后续任务

解决方案

要只获取新部署VM的IP,核心是在部署阶段记录新VM的唯一标识(比如名称或资源ID),后续通过这些标识精准匹配对应的网络接口(NIC)来提取IP,避免捕获资源组内其他VM的IP。以下是具体实现步骤:

步骤1:部署VM时输出新VM的标识

在部署VM的步骤中,将新创建的VM名称(或资源ID)保存到GitHub Actions输出中。示例如下:

- name: Deploy VMs
  id: deploy-vms
  run: |
    $vmNames = @()
    for ($i=1; $i -le ${{ github.event.inputs.vmcount }}; $i++) {
      $vmName = "new-vm-$i"
      # 执行你的VM部署命令,比如 New-AzVM -ResourceGroupName my-rg -Name $vmName ...
      $vmNames += $vmName
    }
    $jsonNames = $vmNames | ConvertTo-Json -AsArray -Compress
    echo "vm-names=$jsonNames" >> $env:GITHUB_OUTPUT

步骤2:根据新VM标识过滤获取IP

修改你现有的get-ips步骤,通过新VM的名称关联到对应的网络接口,再提取IP:

- name: Get new VM IPs
  id: get-ips
  run: |
    $vmNames = ${{ steps.deploy-vms.outputs.vm-names }} | ConvertFrom-Json
    $ips = @()
    foreach ($vmName in $vmNames) {
      # 通过VM名称匹配对应的网络接口
      $nic = Get-AzNetworkInterface -ResourceGroupName my-rg | Where-Object { $_.VirtualMachine.Id -match "/virtualMachines/$vmName$" }
      if ($nic) {
        $ips += $nic.IpConfigurations.PrivateIpAddress
      }
    }
    $json = $ips | ConvertTo-Json -AsArray -Compress
    Write-Output $json
    echo "ips=$json" >> $env:GITHUB_OUTPUT

其他可选优化方案

  • 如果部署VM时用了统一命名前缀(比如deployed-vm-),可直接通过名称过滤NIC:
    $nics = Get-AzNetworkInterface -ResourceGroupName my-rg | Where-Object { $_.Name -like "deployed-vm-*" }
    $ips = $nics.IpConfigurations.PrivateIpAddress
    
  • 若记录了VM的资源ID,匹配会更精准(避免名称重复的情况):
    $vmIds = ${{ steps.deploy-vms.outputs.vm-ids }} | ConvertFrom-Json
    $nics = Get-AzNetworkInterface -ResourceGroupName my-rg | Where-Object { $vmIds -contains $_.VirtualMachine.Id }
    

内容的提问来源于stack exchange,提问作者HBach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:42:42