在多个Azure DevOps管道库中使用同一个变量

后端开发 2026-07-11

我遇到了一个问题,却始终想不出解决办法。 我为每个环境准备了一个变量组:

  • My_Var_Group_Prod
  • My_Var_Group_Dev

在每个变量组里,我有一个名为 "Service_Connection" 的变量,基本上就是一个Azure账户的服务连接。我有一个场景是每个环境可能处于不同的订阅中——这意味着Service_Connection变量的值会不同。

我有一个.yaml管道,用来将我的应用部署到Azure,并使用模板。下面是我使用模板的方式:

  - stage: Dev
    variables:
      - group: My_Var_Group_Dev
    jobs:
    - template: templates/deploy_API.yml

在该模板中,我有如下任务:

    - task: AzureWebApp@1
      displayName: 'Deploy API'
      inputs:
        azureSubscription:'$(Service_Connection)'
        appType: 'webAppLinux'
        appName: 'my-api-web-app'
        package: '$(API_DIRECTORY)/API.zip'

问题在于AzureWebApp任务中的azureSubscription输入似乎是在“构建”时就确定了。因此我甚至无法运行管道,因为它需要该值。

为了解决这个问题,我尝试使用一个全局变量组,在其中为SERVICE_CONNECTION定义了一个默认值,在我的主.yaml中把该组定义为一个变量。但这样它会尝试使用SERVICE_CONNECTION的默认值,而不是My_Var_Group_Dev中的值。(尽管在任务前添加的echo中打印的值是正确的。)

我也尝试将SERVICE_CONNECTION作为管道参数传递,虽然可行,但我希望这些值能够被存储,因此这不是一个有效的解决方案。

我找到的唯一解决办法是使用Bash任务,手动进行部署,通过传入应用注册的信息来进行认证。这样可行,但并不是很像DevOps的风格,而且我在其他地方也需要同样的模式,因此需要找到一个解决方案。

有没有人遇到过这个问题并找到解决办法? 先行感谢。

解决方案

根据你有多少条管道,以及你对服务连接名称的灵活性有多大需求,你其实可以直接把serviceConnection的名称设置在管道变量中:

name: $(Build.DefinitionName)-$(Build.BuildId)
variables:
  azureServiceConnection                        : 'arm-test'

  - task: AzureCLI@2
    displayName: Test
    inputs:
      azureSubscription: $(azureServiceConnection)
      scriptType: bash

不过你需要为每个管道都设置一次,但好处是它是一个变量,可以在所有“下面的”管道中使用。因此你可以在主管道中设置多个service connections,然后把正确的service connection传递给带模板的管道。如果对你有帮助,请告诉我。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章