Настройка приложений и виртуальных машин
Обычно вы создаете приложения и другой пользовательский код для решения Azure. Пользовательские приложения могут включать веб-сайты, API и фоновые приложения, которые выполняются без какого-либо взаимодействия с человеком. В этом уроке вы узнаете, как спроектировать конвейер для создания и развертывания приложения параллельно с его инфраструктурой.
Создание приложений
Многие типы приложений необходимо скомпилировать или собрать, перед тем как их можно будет использовать. Процесс сборки принимает исходный код для приложения, выполняет последовательность действий в нем, а затем создает набор развертываемых файлов.
Процесс сборки компилирует исходный код в двоичные файлы или исполняемые файлы, но обычно включает другие действия, а также:
- Сжатие файлов изображений, которые передаются пользователям вашего веб-сайта.
- Проверка вашего кода, чтобы убедиться, что он соответствует хорошим практикам программирования.
- Выполнение модульных тестов , которые проверяют поведение отдельных частей приложения.
Помимо этих действий, вы также можете выполнить такие действия, как цифровая подпись файлов, чтобы убедиться, что они не могут быть изменены.
Независимо от ряда шагов, результат процесса сборки — это разворачиваемый артефакт. Артефакт обычно сохраняется в файловой системе агента сборочного конвейера. На последующих этапах вашего конвейера необходимо работать с артефактом для его развертывания в средах и проверять его по мере прохождения через контрольные точки качества, определенные в вашей конфигурации конвейера.
Заметка
Возможно, вы слышали о терминах непрерывной интеграции и непрерывного развертыванияили CI и CD. Процесс сборки находится в пределах части непрерывной интеграции конвейера.
Артефакты конвейера
Артефакты, созданные в конвейере, не хранятся в репозитории Git. Они являются производными от исходного кода, но не являются сами кодом, поэтому они не должны находиться в репозитории системы управления версиями. Они создаются в файловой системе агента конвейера. Для каждого задания в конвейере создается новый агент, поэтому нужен способ для передачи файлов между заданиями и агентами.
артефакты потока предоставляют возможность хранения файлов в Azure Pipelines и связаны с конкретным запуском вашего потока. Вы используете встроенную задачу конвейера "PublishBuildArtifacts
", чтобы указать Azure Pipelines опубликовать файл или папку из файловой системы агента в качестве артефакта конвейера.
- task: PublishBuildArtifacts@1
displayName: Publish folder as a pipeline artifact
inputs:
artifactName: my-artifact-name
pathToPublish: '$(Build.ArtifactStagingDirectory)/my-folder'
Свойство pathToPublish
— это расположение, в котором содержится ваш скомпилированный код или выходные файлы в файловой системе агента конвейерной системы. Содержимое в этом расположении публикуется в артефакте. Можно указать один файл или папку.
Каждый артефакт имеет имя, которое указывается с помощью свойства задачи artifactName
. Имя артефакта используется для ссылки на него позже в конвейере. Последующие задания и этапы конвейера могут скачать артефакт, чтобы они могли работать с ним, например, развернуть веб-сайт на сервере, на котором он размещен:
При использовании заданий развертывания артефакты конвейера по умолчанию автоматически загружаются. При использовании обычных заданий используйте задачу DownloadBuildArtifacts
для загрузки артефакта конвейера.
- task: DownloadBuildArtifacts@0
inputs:
buildType: current
downloadType: single
artifactName: my-artifact-name
downloadPath: '$(System.ArtifactsDirectory)'
Развертывание приложений
Процесс сборки приложения создает и публикует разворачиваемый артефакт. На последующих этапах конвейера развертывается артефакт. Способ развертывания приложения зависит от службы, которую вы используете для размещения.
Развертывание в Службе приложений Azure
Ваша компания использует службу приложений Azure для размещения своего веб-сайта. Вы можете создать и настроить приложение службы приложений с помощью Bicep. Но когда дело доходит до развертывания приложения, у вас есть несколько вариантов, чтобы получить скомпилированное приложение в инфраструктуру размещения. Эти параметры управляются в рамках плоскости данных службы приложений.
Наиболее распространенным подходом является использование задачи AzureRmWebAppDeployment
Azure Pipelines:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: MyServiceConnection
ResourceGroupName: MyResourceGroup
WebAppName: my-app-service
Package: '$(Pipeline.Workspace)/my-artifact-name/website.zip'
Чтобы развернуть приложение в App Service, необходимо указать несколько данных. Эти сведения включают группу ресурсов и имя ресурса приложения службы приложений, которое указывается с помощью ResourceGroupName
и WebAppName
входных данных. Как вы узнали в предыдущем уроке, необходимо добавить выходные данные в файл Bicep и использовать переменную конвейера для распространения имени приложения через конвейер. Кроме того, необходимо указать файл .zip с приложением для развертывания с помощью входных данных Package
, который обычно представляет собой путь к артефакту конвейера.
Служба приложений имеет собственную систему проверки подлинности уровня данных, которая используется для развертываний. Задача AzureRmWebAppDeployment
автоматически обрабатывает процесс проверки подлинности.
Задача AzureRmWebAppDeployment
использует учетную запись службы, связанную с вашим подключением службы, для автоматического создания и загрузки необходимых учетных данных для развертывания
. Затем он использует учетные данные развертывания при обмене данными с API плоскости данных службы приложений
.
Служба приложений также предоставляет ряд других функций, связанных с развертыванием, включая слоты развертывания. Слоты помогают безопасно развертывать новые версии приложений без простоя. Они также помогают подготовить и прогреть новую версию приложения перед отправкой рабочего трафика в него. Мы не используем слоты в этом модуле, но мы предоставляем ссылку на дополнительные сведения о них на странице сводки в конце модуля.
Развертывание приложений в других службах Azure
Azure предоставляет множество других вариантов размещения приложений, каждый из которых имеет собственный подход к развертыванию.
Функции Azure основаны на службе приложений и используют процесс развертывания, аналогичный описанному ранее.
При развертывании на виртуальной машине обычно необходимо подключиться к экземпляру виртуальной машины для установки приложения. Часто необходимо использовать специализированные инструменты, такие как Chef, Puppet или Ansible, для оркестрации развертывания на виртуальных машинах.
Если вы используете Kubernetes или Службу Azure Kubernetes (AKS), вы будете использовать немного другой подход для создания и развертывания решения. После сборки вашего приложения поток создает образ контейнера и публикует его в реестр контейнеров , который использует ваш кластер Kubernetes. Так как реестр контейнеров сохраняет скомпилированное приложение, обычно не используется артефакт конвейера.
В этом модуле мы сосредоточимся на службе приложений Azure, чтобы проиллюстрировать основные понятия конвейера. На странице сводки в конце модуля мы предоставляем ссылки на дополнительные сведения о развертывании в других службах размещения.
Тестирование приложений в конвейере
В предыдущем модуле вы узнали о значении и важности выполнения автоматических тестов из конвейера. При развертывании приложения хорошей практикой является использование конвейера для запуска тестов, которые вызывают код приложения. Такие тесты снижают риск того, что ошибка приложения или развертывания может привести к простою. В более сложных сценариях вы даже можете выполнять набор тестовых вариантов для приложения, например вызов API или отправку и мониторинг искусственной транзакции.
Многие приложения имеют конечные точки проверки состояния . Когда конечная точка проверки работоспособности получает запрос, он выполняет ряд проверок на веб-сайте, таких как обеспечение доступности баз данных и сетевых служб из среды приложения. Ответ, который возвращает сайт, указывает, находится ли приложение в рабочем состоянии. Разработчики могут создавать и настраивать собственные проверки работоспособности в соответствии с требованиями приложения. Если у вашего приложения есть конечная точка проверки работоспособности, имеет смысл отслеживать её в рамках конвейера после завершения этапа развертывания.
Конвейер развертывания
В следующем упражнении вы обновите конвейер развертывания, чтобы добавить новые задания для создания приложения веб-сайта и развертывания его в каждой среде: