Azure Devops 上的 Azure 虚拟机规模集 - 无法识别预定义变量

Azure Virtual Machine Scale Set on Azure Devops - predefined variables not recognised

我构建了一个规模集(Windows),我可以在我的 Azure Devops 自定义代理池上成功地 运行 简单命令,使用基于 Windows 19 服务器核心的自定义 VM基于此 guide.

但是,当我尝试在我的任何任务中访问任何 Azure Devops predefined variables 时,它们都无法被识别。例如执行:

- 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 中),则完全相同的任务和 Powershell 工作正常。为什么会发生此错误的任何想法?我错过了什么吗?

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

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

请按照以下步骤检查:

  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)"

[更新]

我还在 Microsoft 托管代理 windows-2019 和我的 VMSS 上测试了变量“Build.Branch”,它在 Microsoft 托管代理上都不起作用windows-2019 也不是我的 VMSS。正如 @DanielMann 所提到的,'Build.Branch' 不是 Azure Pipelines 的预定义变量。所以,不被识别是正确的。

您评论说,当使用 Microsoft 托管代理 windows-2019 时,变量“Build.Branch”可以在您的管道中正常工作,能否请您分享我们用相关的管道 运行 日志或屏幕截图来显示这个?就像我上面显示的G​​IF图像一样。

另外,Microsoft Hosted agent windows-2019 和你的VMSS 运行 是否是同一个pipeline?如果它们 运行 不同的管道,请检查您是否在 Microsoft 托管的 运行 管道上定义了自定义变量“Build.Branch”经纪人windows-2019.