В конвейерах Azure у меня есть переменная, объявленная следующим образом.
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']
, но ничего не помогло. Конечно, когда я жестко закодирую имя соединения, оно работает, но мне хотелось бы посмотреть, можно ли это сделать динамически.
Сообщение об ошибке кажется таким же, но я с этим не сталкиваюсь. Я знаю, что мой конвейер работает, когда я жестко запрограммировал имя подключения к службе в containerRegistry
части задачи Docker@2`, но я не могу использовать переменную.
Я пробовал с одинарными и двойными кавычками и без кавычек, но, к сожалению, та же проблема не устранена.
Подключения к сервисам — это защищенные ресурсы, т.е. доступ к ним могут получить только определенные пользователи и конвейеры внутри проекта. Это означает, что их значения должны быть известны во время компиляции, чтобы соединения служб могли быть авторизованы (или нет) до запуска конкретного конвейера.
Однако вы не сможете изменить значение переменной, используемой в качестве подключения к службе, после запуска конвейера следующим образом:
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
Спасибо! Я использовал аналогичный подход, как вы предложили. Рад, что вы объяснили, почему это происходит, и это очень помогает!
Я попробовал удалить точку с запятой
;
, как было предложено, а также добавил шагecho
. Перезапустил конвейер, и я вижу, что переменная заполнена, но задачаDocker@2
, похоже, не распознает или не принимает переменную.