Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps позволяет размещать, создавать, планировать и тестировать код с помощью бесплатных рабочих процессов. Использование Azure Pipelines в качестве одного из этих рабочих процессов позволяет развертывать приложение с непрерывной поставкой и непрерывной интеграцией (CI/CD), которое работает с любой платформой и облаком. Конвейер определяется как YAML-файл в корневой папке вашего репозитория.
В этой статье мы используем Azure Pipelines для развертывания приложения Windows-контейнера на Службу приложений из репозитория Git в Azure DevOps. Предполагается, что у вас уже есть приложение .NET с поддержкой dockerfile в Azure DevOps.
Предварительные условия
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Организация Azure DevOps. Создайте ее бесплатно.
- Работающее приложение Windows с Dockerfile, размещенное в Azure Repos.
Добавление подключения к службе
Перед созданием конвейера сначала необходимо создать подключение службы, так как при создании шаблона будет предложено выбрать и подтвердить ваше подключение. Подключение к службе позволяет подключаться к выбранному реестру (ACR или Docker Hub) при использовании шаблонов задач. При добавлении нового подключения к службе выберите параметр Реестра Docker. Следующая форма предлагает выбрать Docker Hub или Реестр контейнеров Azure вместе с соответствующими сведениями. Чтобы следовать этому руководству, используйте Реестр контейнеров Azure. Вы можете создать новое подключение службы, следуя указаниям , приведенным здесь.
Защита секретов
Так как мы используем конфиденциальную информацию, доступ к которой не требуется другим пользователям, мы используем переменные для защиты нашей информации. Создайте переменную, следуя указаниям здесь.
Чтобы добавить переменную, нажмите кнопку "Переменные" рядом с кнопкой "Сохранить " в правом верхнем углу представления редактирования для конвейера.
Нажмите кнопку "Создать переменную" и введите сведения. Добавьте приведенные ниже переменные с собственными секретами, соответствующими каждому ресурсу.
- vmImageName: "windows-latest"
- хранилище изображений: 'название-вашего-репозитория-изображений'
- dockerfilePath: "$(Build.SourcesDirectory)/path/to/Dockerfile"
- dockerRegistryServiceConnection: "ваш-номер-подключения-услуги"
Создание нового конвейера
После создания репозитория с приложением .NET и поддержкой dockerfile можно создать конвейер, выполнив указанные ниже действия.
- Перейдите к конвейерам в левой строке меню и нажмите кнопку "Создать конвейер"
- На следующем экране выберите Azure Repos Git в качестве параметра репозитория и выберите репозиторий, в котором находится код.
- На вкладке "Настройка" выберите параметр "Начальный конвейер"
- На следующей вкладке "Рецензирование" нажмите кнопку "Сохранить "
Создание и отправка образа в реестр контейнеров Azure
После создания и сохранения конвейера необходимо изменить конвейер, чтобы выполнить шаги по созданию контейнера, отправке в реестр и развертыванию образа в Службу приложений. Чтобы начать, перейдите в меню "Конвейеры ", выберите созданный конвейер и нажмите кнопку " Изменить ".
Сначала необходимо добавить задачу Docker, чтобы создать образ. Добавьте следующий код и замените Dockerfile: app/Dockerfile с указанием пути к вашему Dockerfile.
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
Добавить задачу развертывания для службы приложений
Затем необходимо настроить задачу развертывания. Для этого требуется имя подписки, имя приложения и реестр контейнеров.
Добавьте новый этап в yaml-файл, вставив приведенный ниже код.
- stage: Deploy displayName: Deploy to App Service jobs: - job: Deploy displayName: Deploy pool: vmImage: $(vmImageName) steps:Перейдите на вкладку "Показать помощник" в правом верхнем углу и найдите задачу развертывания Службы приложений Azure и заполните следующую форму:
- Тип подключения: Azure Resource Manager
- Подписка Azure: имя подписки
- Тип Службы приложений: Веб-Приложение для Контейнеров (Windows)
- Название службы приложений: имя вашего приложения
- Реестр или пространство имен: your-azure-container-registry-namespace
- Изображение: имя-azure-container-registry-image-name
Нажмите кнопку "Добавить ", чтобы добавить следующую задачу:
- task: AzureRmWebAppDeployment@4 inputs: ConnectionType: 'AzureRM' azureSubscription: 'my-subscription-name' appType: 'webAppHyperVContainer' WebAppName: 'my-app-name' DockerNamespace: 'myregsitry.azurecr.io' DockerRepository: 'dotnetframework:12'
После того как вы добавили задачу, конвейер готов к запуску. Нажмите кнопку "Проверить и сохранить " и запустите конвейер. Конвейер выполняет шаги по созданию и отправке образа Windows-контейнера в Реестр контейнеров Azure и развертывании образа в Службу приложений.
Ниже приведен пример полного yaml-файла:
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'