Azure 管道 Docker@2 容器注册表

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

在天蓝色管道中,我有一个声明如下的变量

variables:
  - name: acr_svc_conn

在我的管道中,我设置了如图所示的值

- bash: |
    echo "##vso[task.setvariable variable=acr_svc_conn;]$ACR"

当我尝试在我的

Docker@2
任务中使用它时,如图所示

- task: Docker@2
  inputs:
    containerRegistry: '$(acr_svc_conn)'
    command: 'login'
  displayName: Login to ACR

我收到此错误

##[error]Docker registry service connection not specified.
##[error]Unhandled: Docker registry service connection not specified.

有什么想法吗?我尝试过

${{ variable.acr_svc_conn }}
variables['acr_svc_conn']
的组合,但没有任何效果。当然,当我硬编码连接名称时它可以工作,但我想看看它是否可以动态完成。

docker azure-devops azure-pipelines
1个回答
0
投票

服务连接是受保护的资源,即只有项目内的特定用户和管道可以访问它们。这意味着它们的值必须在编译时已知,以便在运行特定管道时可以授权(或不授权)服务连接。

话虽如此,在管道启动后,您将不会像这样更改用作服务连接的变量的值:

echo "##vso[task.setvariable variable=acr_svc_conn;]$ACR"

如果变量

acr_svc_conn
默认为空,则您收到的错误是有意义的:

##[error]Docker registry service connection not specified.
##[error]Unhandled: Docker registry service connection not specified.

解决方法

在变量和/或变量模板中指定服务连接的所有可能值,然后使用模板表达式来获取/设置正确的变量或模板。

示例:

parameters:
  - name: azureRegion
    displayName: 'Azure Region'
    type: string
    default: eastus
    values:
      - eastus
      - westeurope

variables:
  - template: /pipelines/variables/${{ parameters.azureRegion }}-variables.yaml

steps:
  - task: Docker@2
    inputs:
      containerRegistry: '${{ variables.acr_svc_conn }}'
      command: 'login'
    displayName: Login to ACR

  # other tasks here

/管道/变量/eastus-variables.yaml

# East US specific variables

variables:
  - name: acr_svc_conn
    value: my-eastus-container-registry
  
  # other variables

/管道/变量/westeurope-variables.yaml

# West-Europe specific variables

variables:
  - name: acr_svc_conn
    value: my-westeurope-container-registry
  
  # other variables
© www.soinside.com 2019 - 2024. All rights reserved.