Azure Devops:选择要在阶段级别使用的变量组
为了使代码更简洁,如果我只在需要时引入变量组,那就太好了。目前在我的yaml文件中,我有3个阶段,每个阶段都附带一个条件(每个构建只运行1个阶段)。每个阶段都有自己的变量组,该变量组仅与该阶段相关。当我试图在每个阶段定义变量组时,它都不起作用,我得到一个错误,即无法访问该变量。当我在根级别定义所有组时,这就消失了 我有没有办法定义在阶段级别使用哪些变量组 基本上这就是我现在所拥有的:Azure Devops:选择要在阶段级别使用的变量组,azure,azure-devops,continuous-integration,Azure,Azure Devops,Continuous Integration,为了使代码更简洁,如果我只在需要时引入变量组,那就太好了。目前在我的yaml文件中,我有3个阶段,每个阶段都附带一个条件(每个构建只运行1个阶段)。每个阶段都有自己的变量组,该变量组仅与该阶段相关。当我试图在每个阶段定义变量组时,它都不起作用,我得到一个错误,即无法访问该变量。当我在根级别定义所有组时,这就消失了 我有没有办法定义在阶段级别使用哪些变量组 基本上这就是我现在所拥有的: variables: - group: variable-group-1 - group: variable-
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)'
运行此操作时出现的错误是:
这表明该组可用于所有管道,并包含appConfig
安全文件也可用于所有管道,与Azure管道中的组相同,事实上我们可以在阶段下使用变量。我创建了一个演示yaml,效果很好:
trigger: none
pool:
name: default
variables:
- name: Test_For_ABC
value: ABC
stages:
- stage: A
variables:
- group: cmt
jobs:
- job: A1
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "$(dockerhubuser)"
Write-Host "$(Test_For_ABC)"
- stage: B
variables:
- group: TestGroup
jobs:
- job: B1
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "$(ServiceConnection)"
Write-Host "$(Test_For_ABC)"
根据您的错误信息,我们建议您可以检查以下信息:
问题不在于变量组,而在于您在以下行中引用的安全文件:
secureFile: '$(appConfig)'
在Azure Devops中,导航到管道->库,然后选择“安全文件”选项卡。编辑appConfig
变量引用的文件,并启用“授权在所有管道中使用”选项
或点击“授权资源”“错误消息中的按钮,表示您正在使用该管道授权安全文件。我可以重新创建相同的问题。问题似乎在于变量并没有被取消引用,而是被逐字逐句地理解。似乎不可能在引用安全文件的阶段使用范围限定的变量。管道运行时,安全文件下载似乎是作为作业前步骤执行的,因此我猜它是在评估阶段变量之前执行的 这个问题似乎与此有关。尽管这涉及到经典UI,但基于YAML的管道似乎也存在问题 我看到了3个备选方案,它们可能合适,也可能不合适,这取决于您的用例
谢谢你的回答,但我仍然有同样的问题。我已经用我所做的信息更新了我的问题,并且我已经遵循了你的步骤,但它们仍然不起作用。你看到我遗漏的东西了吗?谢谢你的回答。正如我在问题中所说,appConfig安全文件可用于所有管道。单击“授权资源”按钮似乎只是一次又一次地抛出相同的错误。对不起,是的,您提到安全文件可用于所有管道。我太关注你的截图了。我已经发布了一个备选答案,希望能解释这个问题。谢谢!!!是的,我开始认为我最好的办法是把一切都保持在全球水平。可能会有点混乱,但至少它起作用了
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 }}