Azure Задаче DevOps AzureCLI с параметром scriptPath не удалось пройти проверку подлинности для создания Azure Экземпляра контейнера - PullRequest
0 голосов
/ 29 апреля 2020

Мы используем конвейеры YAML в Azure DevOps.

Одной из задач в конвейере является AzureCLI, который создает ACI container.
Образ, который мы создаем, и pu sh в предыдущие шаги конвейера.

Когда мы запускаем эту задачу из внешнего скрипта, происходит сбой с сообщением:
The image '***.azurecr.io/image:1.0' in container group '***' is not accessible. Please check the image and registry credential.

Когда мы меняем тип скрипта на inlineScript, это работает правильно.

Ниже приведена форма, которая не работает (scriptPath).

- task: AzureCLI@1
  displayName: 'Run tests'
  inputs:
    azureSubscription: $(AZURE_SUBSCRIPTION)
    scriptType: 'bash'
    scriptLocation: 'scriptPath'
    scriptPath: 'run_tests.sh'

Вот форма, которая работает (inlineScript)

- task: AzureCLI@1
    displayName: 'Run tests'
    inputs:
      azureSubscription: '$(AZURE_SUBSCRIPTION)'
      scriptLocation: 'inlineScript'
      inlineScript: 'az container create -g *** --registry-login-server ***.azurecr.io --registry-username *** --registry-password *** --image image -n test --cpu 1 --memory 8 --restart-policy Never --command-line "dotnet test.dll -n testApp -c 1000"'

Сценарий будет длиннее одной строки. Любая подсказка, как создать azure экземпляров контейнера из внешнего файла сценария (scriptLocation: 'scriptPath')?

1 Ответ

1 голос
/ 29 апреля 2020

Я создал экземпляр контейнера обоими способами (script и inline). Вот моя конфигурация:

определение сборки:


steps:
- task: replacetokens@3
  inputs:
    targetFiles: 'stackoverflow/12-container-instance/create-container-instance.sh'
    encoding: 'auto'
    writeBOM: true
    actionOnMissing: 'warn'
    keepToken: false
    tokenPrefix: '#{'
    tokenSuffix: '}#'
    useLegacyPattern: false
    enableTelemetry: true
- task: AzureCLI@2
  displayName: 'Run tests 1'
  inputs:
    azureSubscription: '$(AzureSubscription)'
    scriptType: 'bash'
    scriptLocation: 'scriptPath'
    scriptPath: 'stackoverflow/12-container-instance/create-container-instance.sh'

- task: AzureCLI@2
  displayName: 'Run tests 2'
  inputs:
    azureSubscription: '$(AzureSubscription)'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: 'az container create -g TheCodeManual --name myapp2 --image $(Image) --registry-password $(RegistryPassword) --registry-user $(RegistryUser)'

и create-container-instance.sh file

az container create -g TheCodeManual --name myapp1 --image #{Image}# --registry-password #{RegistryPassword}# --registry-user #{RegistryUser}#

Я использовал задачу замены токена, чтобы не показывать конфиденциальные данные в источнике control.

Однако оба способа работают для меня.

Что я заметил, я не использую --registry-login-server ***.azurecr.io, но вместо этого я предоставляю полный путь к изображению, как здесь:

az container create -g MyResourceGroup --name myapp --image myAcrRegistry.azurecr.io/myimage:latest --registry-password password --registry-user userName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...