gpt4 book ai didi

azure-devops - 如何在 Azure Pipelines 的每个阶段使用不同的服务连接?

转载 作者:行者123 更新时间:2023-12-04 04:36:04 24 4
gpt4 key购买 nike

使用时 multistage pipelines从 Azure Pipelines 中的 yaml 开始,每个阶段都将资源部署到单独的环境中,我想为每个阶段使用专用服务连接。就我而言,每个阶段都使用相同的部署作业,即 yaml 模板。所以我使用了很多具有依赖于环境的特定值的变量。这工作正常,除了服务连接。

理想情况下,包含服务连接名称的变量被添加到阶段级别,如下所示:

stages:
- stage: Build
# (Several build-stage specific jobs here)

- stage: DeployToDEV
dependsOn: Build
condition: succeeded()
variables:
AzureServiceConnection: 'AzureSubscription_DEV' # This seems like a logical solution
jobs:
# This job would ideally reside in a yaml template
- job: DisplayDiagnostics
pool:
vmImage: 'Ubuntu-16.04'
steps:
- checkout: none
- task: AzurePowerShell@4
inputs:
azureSubscription: $(AzureServiceConnection)
scriptType: inlineScript
inline: |
Get-AzContext
azurePowerShellVersion: LatestVersion

- stage: DeployToTST
dependsOn: Build
condition: succeeded()
variables:
AzureServiceConnection: 'AzureSubscription_TST' # Same variable, different value
jobs:
# (Same contents as DeployToDEV stage)

执行此代码段时,会产生错误消息:

There was a resource authorization issue: "The pipeline is not valid. Job DisplayDiagnostics: Step AzurePowerShell input ConnectedServiceNameARM references service connection $(AzureServiceConnection) which could not be found. The service connection does not exist or has not been authorized for use. For authorization details, refer to https://aka.ms/yamlauthz.



所以,它可能不能 expand the variable AzureServiceConnection运行开始时很快。但如果确实如此,那么为每个阶段使用单独的服务连接的替代解决方案是什么?

一个肯定有效的选项是将服务连接名称直接设置为所有任务,但这将涉及为每个阶段复制相同的 yaml 任务,我显然想避免这种情况。

任何人都有这方面的线索?提前致谢!

最佳答案

目前您不能将变量作为 serviceConnection 传递。
显然,服务连接名称是在推送/提交时获取的,并且将获取任何内容。

例如。如果您有 $(variable) 它将选择 $(variable) 而不是值。

到目前为止,我使用的解决方法是对每个阶段的步骤使用模板,并通过 serviceConnection 传递不同的参数。

引用:https://github.com/venura9/azure-devops-yaml/blob/master/azure-pipelines.yml对于示例实现。非常欢迎您提出更新请求。

- stage: DEV
displayName: 'DEV(CD)'
condition: and(succeeded('BLD'), eq(variables['Build.SourceBranch'], 'refs/heads/develop'))
dependsOn:
- BLD
variables:
stage: 'dev'
jobs:

- job: Primary_AustraliaSouthEast
pool:
vmImage: $(vmImage)
steps:
- template: 'pipelines/infrastructure/deploy.yml'
parameters: {type: 'primary', spn: 'SuperServicePrincipal', location: 'australiasoutheast'}
- template: 'pipelines/application/deploy.yml'
parameters: {type: 'primary', spn: 'SuperServicePrincipal'}

关于azure-devops - 如何在 Azure Pipelines 的每个阶段使用不同的服务连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com