Azure DevOps : Selecting which variable group to use at the stage level

标签 azure azure-devops continuous-integration

只是为了代码更简洁,如果我只能在需要时引入变量组,那就太好了。目前在我的 yaml 文件中,我有 3 个阶段,每个阶段都附加了一个条件(其中每个构建仅运行 1 个阶段)。每个阶段都有自己的变量组,仅与该阶段相关。当我尝试在每个阶段定义变量组时,它不起作用,并且收到一条错误消息,指出无法访问该变量。当我在根级别定义所有组时,这种情况就会消失。

有什么方法可以定义在阶段级别使用哪些变量组。?

基本上这就是我现在所拥有的:

variables:
- group: variable-group-1 
- group: variable-group-2
- group: variable-group-3
- name: some-other-variable
  value: some-value

stages: 
- stage: A
  condition: ...
  jobs:
  - job: A1
  - job: A2

- stage: B
  condition: ...
  jobs:
  - job: B1
  - job: B2

- stage: C
  condition: ...
  jobs:
  - job: C1
  - job: C2

这就是我想要的:

variables:
- name: some-other-variable
  value: some-value

stages: 
- stage: A
  condition: ...
  variables:
  - group: variable-group-1 
  jobs:
  - job: A1
  - job: A2

- stage: B
  condition: ...
  variables:
  - group: variable-group-2
  jobs:
  - job: B1
  - job: B2

- stage: C
  condition: ...
  variables:
  - group: variable-group-3
  jobs:
  - job: C1
  - job: C2

编辑

这是我的 yaml 的简单版本,但仍然失败:

trigger:
- '*'

pool:
  vmImage: macOS-latest

variables:
  - name: sdk
    value: 'iphoneos'
  - name: signingIdentity
    value: 'iPhone Distribution'

stages:
- stage: dev_stage
  variables:
  - group: iOS-dev-pipeline
  - name: configuration
    value: 'Debug'
  jobs:
  - job: dev_build_sign
    steps:
    - task: DownloadSecureFile@1
      name: debugConfig
      displayName: 'Download debug config'
      inputs:
        secureFile: '$(appConfig)'

运行时出现的错误是: Error message

这表明该组可用于所有管道,并且包含 appConfig Variable Group Declaration

安全文件也可用于所有管道,与组相同

最佳答案

我可以重现同样的问题。问题似乎是变量没有被取消引用,而是按字面意思理解。看来不可能使用阶段范围内的变量来引用安全文件。当管道运行时,安全文件下载似乎是作为作业前步骤执行的,因此我猜测它是在评估阶段变量之前执行的。

该问题似乎与此 github issue 有关。尽管这是指经典 UI,但它似乎也是基于 YAML 的管道的问题。

我看到了 3 种替代方案,它们可能适合也可能不适合您的用例。

  1. 使用全局作用域变量,这似乎有效。
pool:
  vmImage: ubuntu-latest

variables:
  - name: secureFileName
    value: test.txt

stages:
- stage: testSecureFileDownload
  variables:
  - group: SecureFileTest
  jobs:
  - job: testSecureFileDownload
    steps:
    - task: DownloadSecureFile@1
      name: secureFileTest
      inputs:
        secureFile: '$(secureFileName)'
  • 使用文字值作为安全文件名。
  • pool:
      vmImage: ubuntu-latest
    
    stages:
    - stage: testSecureFileDownload
      variables:
      - group: SecureFileTest
      jobs:
      - job: testSecureFileDownload
        steps:
        - task: DownloadSecureFile@1
          name: secureFileTest
          inputs:
            secureFile: 'test.txt'
    
  • 将安全文件名作为参数传递。如果管道是自动触发的,则用途有限。
  • parameters:
      - name: secureFileName
        type: string
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
      - name: secureFileName
        value: test.txt
    
    stages:
    - stage: testSecureFileDownload
      variables:
      - group: SecureFileTest
      jobs:
      - job: testSecureFileDownload
        steps:
        - task: DownloadSecureFile@1
          name: secureFileTest
          inputs:
            secureFile: ${{ parameters.secureFileName }}
    

    关于Azure DevOps : Selecting which variable group to use at the stage level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66938360/

    相关文章:

    java - 操作失败 : gradle dependencies CircleCi

    kubernetes - Helm chart 上是否可以有条件变量以进行部署?

    mongodb - 有什么方法可以在 Azure 中对 MongoDB 进行分析吗?

    c# - 是否可以在 Azure Web 角色中运行 F# WebApi (OWIN) 项目?

    c# - 在 VSTS 中运行选择性测试类

    azure-devops - 在 VSTS 中显示平均构建/发布时间

    azure - 工作项上的按钮 "New branch..."不再工作

    c# - 在 OnMessageOptions 中使用 ExceptionReceived

    powershell - Azure 订阅 Cmdlet

    Azure DevOps - 自定义任务 - 具有 Azure 身份验证的 PowerShell