在天蓝色管道中,我有一个声明如下的变量
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']
的组合,但没有任何效果。当然,当我硬编码连接名称时它可以工作,但我想看看它是否可以动态完成。
服务连接是受保护的资源,即只有项目内的特定用户和管道可以访问它们。这意味着它们的值必须在编译时已知,以便在运行特定管道时可以授权(或不授权)服务连接。
话虽如此,在管道启动后,您将不会像这样更改用作服务连接的变量的值:
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
# East US specific variables
variables:
- name: acr_svc_conn
value: my-eastus-container-registry
# other variables
# West-Europe specific variables
variables:
- name: acr_svc_conn
value: my-westeurope-container-registry
# other variables