无法在 YAML azure devops 管道中的环境标记下使用某些变量

问题描述 投票:0回答:1

在“标签”块下,我需要一些对于给定构建运行来说非常独特的东西,例如 $(Build.BuildId)、$(Build.BuildNumber)、当前日期时间或一些随机数。我们不能使用 $(Build.BuildId) 或 $(Build.BuildNumber) 等变量,因为它们的值在计算表达式时并未设置。这意味着“tags”块下的值需要在编译时解析,即当您获得完整的 YAML 时。

如何获得标签下的唯一值?

stages:
- stage: Deploy
  displayName: 'Test Deploy'
  jobs:
  - deployment: Test_job
    environment:
      name: myEnvironment
      resourceType: VirtualMachine
      tags: $(Build.BuildNumber) # need some unique variable here
    strategy:
      runOnce:
        deploy:
            steps:
            - task: PowerShell@2
              inputs:
                targetType: 'inline'
                script: Deploy-Steps...
azure-devops tfs yaml azure-pipelines azure-pipelines-yaml
1个回答
0
投票

我可以假设

myEnvironment
中的某些虚拟机资源标记有诸如
$(Build.BuildId)
$(Build.BuildNumber)
这样的唯一变量值吗?在此环境下,管道构建是否会自动填充某些虚拟机资源的标签?因为如果没有,那么为什么要使用
$(Build.BuildId)
$(Build.BuildNumber)
来标记虚拟机资源,这是相当令人困惑的。

根据此文件,请注意,

标签为您提供了一种方法来定位环境中的一组特定虚拟机进行部署。

因此,您可以从此环境中选择一组具有预期标签的虚拟机来部署您的部署。

此外,根据此文档,变量

$(Build.BuildId)
$(Build.BuildNumber)
在模板中可用(编译时)。它们的值将在编译时扩展为
$(Build.BuildId)
$(Build.BuildNumber)
而不是它们的实际内容。并且管道部署计划需要在编译时设置,因此我们无法使用此类构建变量来确定使用哪些虚拟机重新路由进行部署。

如果您的要求是在部署之前为虚拟机设置标签,您可以考虑使用参数,这些参数可以在编译时访问。部署只会在具有所需标签的虚拟机资源上展开。

parameters:
- name: vmTag
  default: tag1
stages:
- stage: Deploy
  displayName: 'Test Deploy'
  jobs:
  - deployment: Test_job
    environment:
      name: myEnvironment
      resourceType: VirtualMachine
      tags: ${{ parameters.vmTag }} # need some unique variable here
    strategy:
      runOnce:
        deploy:
            steps:
            - task: PowerShell@2
              inputs:
                targetType: 'inline'
                script: 'Write-Host Deploy-Steps...'

请参阅下面的文档了解更多详细信息。

理解变量语法

表达式 - Azure Pipelines

希望信息有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.