У меня есть служба приложений, в которой размещается приложение FastAPI в реестре контейнеров. На изображении ниже показана страница настроек Центра развертывания службы приложений в Azure.
Я нажал на нее, чтобы увидеть все параметры, которые в противном случае были бы скрыты, и теперь я не могу их отменить. Обработка команды «отключить» заняла около 20 секунд, и хотя я развертываю приложение с помощью конвейеров Azure DevOps CICD, соединение «Azure Repos» не восстанавливается.
В документации мало что сказано, а скриншоты кажутся устаревшими. Однако там говорится, что для Azure Pipelines на портале Azure нечего настраивать, только в Azure DevOps, что уже сделано, и я ожидал снова увидеть кнопку «Отключить» после следующего развертывания — этого не произошло.
Я пытаюсь понять, что именно я сделал (кстати, это среда разработки/тестирования). Еще я бы предпочел вернуть кнопку "Отключить", по крайней мере она указывает на то, что соединение есть.
Редактировать: @wadezhou-MSFT это задача развертывания:
- task: Docker@2
displayName: login to ACR
inputs:
command: login
repository: $(acrImageName)
containerRegistry: "$(dockerRegistryServiceConnectionDev)"
- script: |
docker pull $(dev_docker_registry_name)/$(acrImageName):$(tag)
docker tag $(dev_docker_registry_name)/$(acrImageName):$(tag) $(dev_docker_registry_name)/$(acrImageName):latest
docker push $(dev_docker_registry_name)/$(acrImageName):latest
displayName: Build and push dev image
Служба приложений развертывается с помощью бицепса с помощью Azure CLI (ранее это была задача AzureResourceManagerTemplateDeployment@3):
resource appService 'Microsoft.Web/sites@2023-01-01' = {
name: appServiceName
location: location
identity: {
type: 'SystemAssigned'
}
properties: {
serverFarmId: appPlan.id
httpsOnly: true
clientAffinityEnabled: false
siteConfig: {
ftpsState: 'Disabled'
minTlsVersion: '1.2'
scmType: 'VSTSRM'
linuxFxVersion: linuxFxVersion
appCommandLine: dockerRegistryStartupCommand
appSettings: [
{
name: 'WEBSITE_RUN_FROM_PACKAGE'
value: '1'
}
{
name: 'WEBSITE_ENABLE_SYNC_UPDATE_SITE'
value: 'true'
}
...
]
...
}
}
}
@wadezhou-MSFT Я добавил больше деталей в первоначальный пост.
Я обновил свой ответ на основе вашей информации. Можете ли вы проверить, ответил ли я на ваш вопрос?


Существуют разные модели развертывания службы приложений в Azure. Они эксклюзивны. Если вы используете один, вам следует игнорировать другие.
Модели развертывания службы приложений:
sFTP.Continuous deployment from a code repo.Local Git.Continuous deployment of a Docker image.ZIP deploy.Run from package.Итак, если развертывание выполняется через Azure DevOps Pipeline, обычно используется #5 - ZIP deploy.
В вашем случае вы публикуете образ Docker только через конвейер Azure DevOps. Но развертывание работает с использованием
"4 - Continuous deployment of a Docker image.
«Источник: Azure Repos» — для #2 - Continuous deployment from a code repo.
Они взаимоисключающие. Не следует ожидать повторного появления Disconnect (#2) после развертывания с использованием #4 или #5.
Моё субъективное мнение:
sFTP — древнее решение, которое не стоит обсуждать. Вам необходимо управлять SFTP-соединением. Это не атомно.
Continuous deployment from a code repo не предназначен для производственного использования. Он развертывает каждое изменение кода без каких-либо тестов или подготовки инфраструктуры.
Развертывание Local Git аналогично Continuous deployment from a code repo
Continuous deployment for a Docker image — хорошее решение для подхода на основе Docker. Однако вы можете рассмотреть возможность использования контейнерных приложений вместо служб приложений для Docker.
ZIP deploy — приемлемая модель, которую можно и нужно использовать из конвейера CI/CD. Наиболее часто используемый подход.
Run from package может быть лучшим подходом из-за преимуществ. Преимущества:
Ресурс приложения не должен знать, как он развернут. Поэтому для производства следует использовать только подходы Docker-based, ZIP Deploy и Run from package.
Кроме того, этап развертывания должен быть частью конвейера CI/CD. Вышеупомянутые подходы можно использовать в конвейере (например, Azure Pipelines, GitHub Actions и т. д.).
Ссылки:
ZIP deploy - Развертывание файлов в Службе приложенийLocal Git - Локальное развертывание Git в Службе приложений AzureContinuous deployment for a Docker image - Перенос специального программного обеспечения в Службу приложений Azure с помощью специального контейнераsFTP - Разверните свое приложение в Службе приложений Azure с помощью FTP/SContinuous deployment from a code repo - Непрерывное развертывание в Службе приложений AzureRun from package - Запускайте свое приложение в Службе приложений Azure прямо из ZIP-пакетаВ вашем конвейере yaml он только входит в ACR, создает образ и отправляет его в ACR, но еще не связан со службой приложений.
Вы развертываете веб-сервис через Azure CLI с помощью бицепса, но в вашем бицепсе не обнаружено никаких элементов управления исходным кодом. Соединение невозможно создать, если вы перезапустите конвейер, поскольку вы не выполняете развертывание из конвейера. Попробуйте выполнить развертывание из конвейера, чтобы еще раз проверить соединение.
Пример Ямла:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
containerRegistry: '$(dockerRegistryServiceConnection)'
repository: '$(imageRepository)'
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
tags: '$(tag)'
- task: AzureWebAppContainer@1
inputs:
azureSubscription: 'ARMConn6'
appName: 'wadeapp3'
containers: '$(containerRegistry)/$(imageRepository):$(tag)'
Нажмите view log на странице обзора службы приложений, и вы перейдете к сведениям о центре развертывания, но, как упоминал @VladDX, not registry settings content но к содержимому репозитория.
Если использовать Azure Cli, например az webapp create --name Dev-App \ --plan Dev-AppServicePlan \ --resource-group chat-Dev \ --deployment-container-image-name devcontainerregistry.azurecr.io/chat-node:latest, в центре развертывания, это будет:
Под «развертыванием из конвейера» вы подразумеваете использование задачи AzureResourceManagerTemplateDeployment вместо запуска сценария az, верно? Learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/…
Задача AzureResourceManagerTemplateDeployment@3 не создаст соединение в центре развертывания, поскольку у бицепса нет элементов управления исходным кодом. В вашем конвейере вы можете использовать AzureWebAppContainer@1 для развертывания образа ACR в службе приложений.
@wadezhou-MSFT Bicep только создает ресурс. Это не имеет ничего общего с развертыванием рабочей нагрузки. Вопрос в развертывании нагрузки, а не в ARM или Bicep.
Спасибо @VladDX, поэтому задача AzureResourceManagerTemplateDeployment не работает и не рекомендуется, даже если у нее есть элементы управления исходным кодом (на самом деле она создает внешнее соединение git, а не репозитории auzre), если вы хотите восстановиться из конвейера Devops, задача AzureWebAppContainer@1 может создать Azure repos связь, но у нее действительно нет Registry settings , а Project ,repo, branch. Если бы только хотелось disconnect вернуть, можно.
Спасибо за подробные пояснения! Я немного смущен тем, почему у меня уже было соединение с репозиториями Azure в текущей настройке (унаследованный код), но остальное ясно.
Пожалуйста, покажите
deployment task detailв конвейере DevOps. Вы использовалиAzureWebAppContainer@1задание?