首页 > 解决方案 > Azure Devops 上的 Azure 虚拟机规模集 - 无法识别预定义变量

问题描述

我构建了一个规模集(Windows),我可以在我的 Azure Devops 自定义代理池上成功运行简单的命令,并使用基于本指南的基于 Windows 19 Server Core 的自定义 VM 。

但是,当我尝试在我的任何任务中访问任何 Azure Devops预定义变量时,它们不会被识别。例如执行:

- job: jobname
  timeoutInMinutes: 200
  pool:
    name: poolname
    vmImage: vmname
  steps:
  - powershell: |
        echo "    Branch: $(Build.Branch)"

给我:

Build.Branch : The term 'Build.Branch' is not recognized as the name of a cmdlet, function, script file, or operable 

如果我在 Azure 门户中检查我的规模集,则扩展Microsoft.Azure.DevOps.Pipelines.Agent已成功安装并升级到实例上。

如果在 Windows 提供的代理(例如windows-2019. 任何想法为什么会发生此错误?我错过了什么吗?

标签: azureazure-devopsazure-virtual-machine

解决方案


我还在我的 VMSS Windows-2019 代理上测试了 shell 脚本任务,它可以正确打印管道中预定义变量的值。我没有收到任何错误。

我尝试了通过在 Azure Cloud Shell 上执行相关的 Azure CLI 创建的 VMSS,以及在 Azure Portal Web UI 上手动创建的 VMSS,它们都可以正常工作而没有任何错误。

请按以下步骤检查:

  1. 在不同的管道、不同的项目中尝试VMSS,看看是否会出现相同的问题。
  2. 尝试创建一个新的 VMSS(您可以尝试手动创建)以查看该问题是否也出现在新的 VMSS 上。
  3. 检查您的管道定义(YAML 文件)中是否存在任何语法或格式问题。下面是一个简单的管道作为参考,我在我这边进行了测试,它可以正常工作。
jobs:
- job: JobA
  displayName: 'Job A'
  pool: 'My VMSS Agents Pool'
  steps:
  - task: PowerShell@2
    displayName: 'Show predefined variables'
    inputs:
      targetType: inline
      script: |
        Write-Host "Build.SourceBranch = $(Build.SourceBranch)"
        echo "Build.SourceBranchName = $(Build.SourceBranchName)"

- job: JobB
  displayName: 'Job B'
  pool: 'My VMSS Agents Pool'
  steps:
  - task: PowerShell@2
    displayName: 'Show predefined variables'
    inputs:
      targetType: inline
      script: |
        Write-Host "Build.Repository.Name = $(Build.Repository.Name)"
        echo "Build.Repository.ID = $(Build.Repository.ID)"

[更新]

我还在Build.BranchMicrosoft 托管代理 windows-2019 和我的 VMSS 上测试了变量“”,它既不适用于 Microsoft 托管代理 windows-2019,也不适用于我的 VMSS。如前所述@DanielMann,“ Build.Branch”不是 Azure Pipelines 的预定义变量。因此,它不会被识别是正确的。

在此处输入图像描述

您评论说,当使用 Microsoft Hosted Agent windows-2019 时,变量“ Build.Branch”可以在您的管道中正常工作,您能否与我们分享相关的管道运行日志或屏幕截图以显示这一点?就像我在上面展示的 GIF 图片一样。

另外,微软托管代理 windows-2019 是否和你的 VMSS 运行相同的管道?如果它们运行不同的管道,请检查您是否Build.Branch在 Microsoft 托管代理 windows-2019 上运行的管道上定义了自定义变量“”。


推荐阅读