Конвейеры Azure Docker@2ContainerRegistry

В конвейерах 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'], но ничего не помогло. Конечно, когда я жестко закодирую имя соединения, оно работает, но мне хотелось бы посмотреть, можно ли это сделать динамически.

Я попробовал удалить точку с запятой ;, как было предложено, а также добавил шаг echo. Перезапустил конвейер, и я вижу, что переменная заполнена, но задача Docker@2, похоже, не распознает или не принимает переменную.

revwi 16.07.2024 21:56

Сообщение об ошибке кажется таким же, но я с этим не сталкиваюсь. Я знаю, что мой конвейер работает, когда я жестко запрограммировал имя подключения к службе в containerRegistry части задачи Docker@2`, но я не могу использовать переменную.

revwi 16.07.2024 22:10

Я пробовал с одинарными и двойными кавычками и без кавычек, но, к сожалению, та же проблема не устранена.

revwi 16.07.2024 22:42
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подключения к сервисам — это защищенные ресурсы, т.е. доступ к ним могут получить только определенные пользователи и конвейеры внутри проекта. Это означает, что их значения должны быть известны во время компиляции, чтобы соединения служб могли быть авторизованы (или нет) до запуска конкретного конвейера.

Однако вы не сможете изменить значение переменной, используемой в качестве подключения к службе, после запуска конвейера следующим образом:

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

/pipelines/variables/eastus-variables.yaml

# East US specific variables

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

/pipelines/variables/westeurope-variables.yaml

# West-Europe specific variables

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

Спасибо! Я использовал аналогичный подход, как вы предложили. Рад, что вы объяснили, почему это происходит, и это очень помогает!

revwi 17.07.2024 02:13

Другие вопросы по теме