Базовая архитектура CI/CD с Помощью Azure Pipelines

В этой статье описывается высокоуровневый рабочий процесс DevOps для развертывания изменений приложений в промежуточной и рабочей средах в Azure. Решение использует методы непрерывной интеграции и непрерывного развертывания (CI/CD) с Azure Pipelines.

Важно!

В этой статье рассматривается общая архитектура CI/CD с использованием Azure Pipelines. Он не предназначен для того, чтобы охватывать особенности развертывания в разных средах, таких как службы приложение Azure, Виртуальные машины и Azure Power Platform. Особенности платформы развертывания рассматриваются в отдельных статьях.

Архитектура

Схема архитектуры конвейера CI/CD с помощью Azure Pipelines.

Схема архитектуры конвейера Azure. На схеме показаны следующие шаги: 1. Инженер отправляет изменения кода в репозиторий Git Azure DevOps. 2. Активируется конвейер запроса на вытягивание в Azure Pipelines. В этом конвейере показаны следующие задачи: анализ, восстановление, сборка и модульные тесты. 3. Активируется конвейер CI Azure Pipelines. В этом конвейере показаны следующие задачи: получение секретов, анализ, восстановление, сборка, модульные тесты, интеграционные тесты и публикация артефактов сборки. 3. Активируется конвейер CD Azure Pipelines. В этом конвейере показаны следующие задачи: скачивание артефактов, развертывание на промежуточное хранение, тестирование, ручное вмешательство и выпуск. 4. Показывает конвейер CD, развертывающийся в промежуточной среде. 5. Показывает выпуск конвейера CD в рабочую среду. 6. Показывает оператор, отслеживающий конвейер, используя преимущества Azure Monitor, приложение Azure Insights и рабочей области Azure Analytics.

Скачайте файл Visio этой архитектуры.

Примечание

Хотя в этой статье рассматривается CI/CD для изменений приложений, Azure Pipelines также можно использовать для создания конвейеров CI/CD для изменений инфраструктуры как кода (IaC).

Поток данных

Данные передаются в сценарии следующим образом:

  1. Конвейер вытягивания. Запрос на вытягивание (PR) для Azure Repos Git активирует конвейер запроса на вытягивание. Этот конвейер выполняет быстрые проверки качества. Эти проверки должны включать:

    • Создание кода, для которого требуется извлечь зависимости из системы управления зависимостями.
    • Использование средств для анализа кода, таких как статический анализ кода, анализ анализа и проверка безопасности
    • Модульные тесты

    Если какая-либо из проверок завершается сбоем, выполнение конвейера завершается, и разработчику придется внести необходимые изменения. Если все проверки пройдены, конвейеру потребуется проверка запроса на вытягивание. Если проверка запроса на вытягивание завершается сбоем, конвейер завершается, и разработчику придется внести необходимые изменения. Если все проверки и проверки на вытягивание пройдены, запрос на вытягивание будет успешно объединяться.

  2. Конвейер CI. Слияние с Azure Repos Git активирует конвейер CI. Этот конвейер выполняет те же проверки, что и конвейер pr с некоторыми важными дополнениями. Конвейер CI выполняет тесты интеграции. Эти тесты интеграции не должны требовать развертывания решения, так как артефакты сборки еще не созданы. Если тесты интеграции требуют секретов, конвейер получает эти секреты из Azure Key Vault. Если какая-либо из проверок завершается сбоем, конвейер завершается, и разработчику придется внести необходимые изменения. Результатом успешного выполнения этого конвейера является создание и публикация артефактов сборки.

  3. Триггер конвейера CD — публикация артефактов активирует конвейер CD.

  4. Выпуск компакт-диска на промежуточное хранение . Конвейер CD скачивает артефакты сборки, созданные в конвейере CI, и развертывает решение в промежуточной среде. Затем конвейер выполняет приемочные тесты в промежуточной среде для проверки развертывания. Если какой-либо приемочный тест завершается сбоем, конвейер завершается, и разработчику придется внести необходимые изменения. В случае успешного выполнения тестов можно реализовать задачу проверки вручную , чтобы потребовать от пользователя или группы проверки развертывания и возобновления конвейера.

  5. Выпуск компакт-диска в рабочую среду . Если вмешательство вручную возобновляется или не реализовано вмешательство вручную, конвейер освобождает решение в рабочей среде. Конвейер должен выполнять тесты состояния в рабочей среде, чтобы убедиться, что выпуск работает должным образом. Если шаг вмешательства вручную приводит к отмене, сбою выпуска или сбою тестов состояния, выпуск откатывается, конвейер завершается, и разработчику придется внести необходимые изменения.

  6. Мониторинг . Azure Monitor собирает данные о наблюдаемости, такие как журналы и метрики, чтобы оператор смог анализировать данные о работоспособности, производительности и использовании. Application Insights собирает все данные мониторинга для конкретного приложения, например трассировки. Azure Log Analytics используется для хранения всех данных.

Компоненты

  • Репозиторий Azure Repos Git служит репозиторием кода, который предоставляет управление версиями и платформу для совместных проектов.

  • Azure Pipelines предоставляет способ сборки, тестирования, упаковки и выпуска кода приложения и инфраструктуры. В этом примере есть три отдельных конвейера со следующими обязанностями:

    • Конвейеры запроса на вытягивание проверяют код, прежде чем разрешить слияние запроса с помощью анализа, сборки и модульного тестирования.
    • Конвейеры CI выполняются после объединения кода. Они выполняют ту же проверку, что и конвейеры запроса на вытягивание, но добавляют интеграционное тестирование и публикуют артефакты сборки, если все успешно.
    • Конвейеры CD развертывают артефакты сборки, выполняют приемочные тесты и выпуск в рабочую среду.
  • Веб-каналы артефактов Azure позволяют управлять пакетами программного обеспечения, такими как Maven, npm и NuGet, и совместно использовать их. Веб-каналы артефактов позволяют управлять жизненным циклом пакетов, включая управление версиями, повышение уровня и прекращение использования пакетов. Это поможет вам убедиться, что ваша команда использует последние и самые безопасные версии пакетов.

  • Key Vault предоставляет способ управления защищенными данными для решения, включая секреты, ключи шифрования и сертификаты. В этой архитектуре она используется для хранения секретов приложения. Доступ к этим секретам осуществляется через конвейер. Доступ к секретам azure Pipelines можно получить с помощью Key Vault задачи или путем связывания секретов из Key Vault.

  • Мониторинг — это ресурс наблюдаемости, который собирает и хранит метрики и журналы, данные телеметрии приложений и метрики платформы для служб Azure. С помощью этих данных можно отслеживать приложения, настраивать оповещения и панели мониторинга, а также анализировать первопричины сбоев.

  • Application Insights — это служба мониторинга, которая в режиме реального времени предоставляет аналитические сведения о производительности и использовании веб-приложений.

  • Рабочая область Log Analytics предоставляет централизованное расположение, где можно хранить, запрашивать и анализировать данные из нескольких источников, включая ресурсы, приложения и службы Azure.

Альтернативные варианты

Хотя эта статья посвящена Azure Pipelines, вы можете рассмотреть следующие альтернативы:

  • Azure DevOps Server (ранее известный как Team Foundation Server) можно использовать в качестве локальной замены.

  • Jenkins — это открытый код инструмент, используемый для автоматизации сборок и развертываний.

  • GitHub Actions позволяют автоматизировать рабочие процессы CI/CD непосредственно из GitHub.

  • Репозитории GitHub можно заменить репозиторием кода. Azure Pipelines легко интегрируется с репозиториями GitHub.

В этой статье рассматриваются общие методики CI/CD в Azure Pipelines. Ниже приведены некоторые вычислительные среды, в которых можно рассмотреть возможность развертывания.

  • Службы приложений — это служба на основе HTTP для размещения веб-приложений, REST API и серверных частей мобильных приложений. Вы можете разрабатывать на предпочитаемом языке, а приложения легко запускать и масштабировать в средах Windows и Linux. веб-приложения поддерживает слоты развертывания, такие как промежуточные и рабочие. Вы можете развернуть приложение в промежуточном слоте и освободить его в рабочем слоте.

  • Azure Виртуальные машины обрабатывает рабочие нагрузки, требующие высокого уровня управления, или зависят от компонентов и служб ОС, которые недоступны в веб-приложения (например, windows GAC или COM).

  • Azure Power Platform — это набор облачных служб, которые позволяют пользователям создавать, развертывать приложения и управлять ими без необходимости в инфраструктуре или технических знаниях.

  • Функции Azure — это бессерверная вычислительная платформа, которую можно использовать для создания приложений. Функции позволяют использовать триггеры и привязки для интеграции служб. Функции также поддерживают слоты развертывания, такие как промежуточные и рабочие. Вы можете развернуть приложение в промежуточном слоте и освободить его в рабочем слоте.

  • Служба Azure Kubernetes (AKS) — это управляемый кластер Kubernetes в Azure. Kubernetes — это платформа оркестрации контейнеров открытый код.

  • Контейнеры приложений Azure позволяют запускать контейнерные приложения на бессерверной платформе.

Сведения о сценарии

Использование проверенных методов CI и CD для развертывания приложений или изменений инфраструктуры обеспечивает различные преимущества, в том числе:

  • Более короткие циклы выпуска . Автоматизированные процессы CI/CD позволяют развертывать быстрее, чем вручную. Многие организации развертывают несколько раз в день.
  • Более высокое качество кода . Контроль качества в конвейерах CI, таких как анализ кода и модульное тестирование, приводит к более высокому качеству кода.
  • Снижение риска выпуска . Правильные методики CI/CD значительно снижают риск выпуска новых функций. Развертывание можно протестировать до выпуска.
  • Повышенная производительность . Автоматизированная CI/CD освобождает разработчиков от работы над ручным интеграцией и развертываниями, чтобы они могли сосредоточиться на новых функциях.
  • Включить откаты . Хотя правильные методики CI/CD снижают количество выпущенных ошибок или регрессий, они по-прежнему возникают. CI/CD может включить автоматический откат к более ранним выпускам.

Потенциальные варианты использования

Рассмотрим процессы Azure Pipelines и CI/CD для:

  • Ускорение разработки приложений и жизненных циклов развертывания.
  • Повышение качества и согласованности в автоматизированном процессе сборки и выпуска.
  • Повышения стабильности и времени доступности приложения.

Рекомендации

Эти рекомендации реализуют основные принципы Azure Well-Architected Framework, которая представляет собой набор руководящих принципов, которые можно использовать для повышения качества рабочей нагрузки. Дополнительные сведения см. в статье Microsoft Azure Well-Architected Framework.

эффективность работы;

  • Рассмотрите возможность реализации инфраструктуры как кода (IaC), чтобы определить инфраструктуру и развернуть ее в конвейерах.

  • Рассмотрите возможность использования одной из задач по токенизации , доступных в VSTS Marketplace, в контексте часто ссылаются на процесс, в котором конфиденциальная информация (например, ключи API, пароли или другие секреты) заменяется маркерами или заполнителями во время развертывания или настройки.

  • Используйте переменные выпуска в определениях выпусков для изменения конфигурации сред. Переменные выпуска могут охватывать как весь выпуск, так и конкретную среду. При использовании переменных для секретной информации убедитесь, что выбран значок с изображением замка.

  • Если вы развертываете ресурсы, работающие в защищенной виртуальной сети, рекомендуется использовать локальные агенты . Вы также можете рассмотреть возможность использования локальных агентов, если вы используете большой объем сборок. В случае больших объемов сборки локальные агенты можно использовать для экономичного ускорения сборок.

  • Рассмотрите возможность использования Application Insights и других средств мониторинга как можно раньше в конвейере выпуска. Множество организаций начинают проводить мониторинг только в своей рабочей среде. Отслеживая другие среды, вы можете определять ошибки на ранних этапах разработки и избегать проблем в рабочей среде.

  • Рассмотрите возможность использования отдельных ресурсов мониторинга для рабочей среды.

  • Рассмотрите возможность использования конвейеров YAML вместо классического интерфейса. Конвейеры YAML можно рассматривать как другой код. Например, конвейеры YAML можно вернуть в систему управления версиями и изменить версии.

  • Рассмотрите возможность использования шаблонов YAML для повышения уровня повторного использования и упрощения конвейеров. Например, конвейеры PR и CI похожи. Для обоих конвейеров можно использовать один параметризованный шаблон.

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

Оптимизация затрат

Оптимизация затрат заключается в поиске способов уменьшения ненужных расходов и повышения эффективности работы. Дополнительные сведения см. в разделе Обзор критерия "Оптимизация затрат".

Расчет стоимости Azure DevOps будет зависеть от количества пользователей в организации, которым требуется доступ, в дополнение к таким факторам, как количество параллельных требуемых выпусков и сборок, а также число тестовых пользователей. Дополнительные сведения см. Цены на Azure DevOps.

Калькулятор цен предоставляет оценку запуска Azure DevOps с 20 пользователями.

Azure DevOps оплачивается в расчете на каждого пользователя за месяц. В зависимости от необходимости в параллельных конвейерах может взиматься дополнительная плата, а также дополнительные тестовые пользователи или базовые лицензии пользователей.

Безопасность

  • Учитывайте преимущества безопасности при использовании агентов, размещенных в Майкрософт , при выборе того, следует ли использовать размещенные в Майкрософт или локальные агенты.

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

  • Рассмотрите возможность интеграции действий в Azure Pipelines для отслеживания зависимостей, управления лицензированием, проверки на наличие уязвимостей и поддержания зависимостей в актуальном состоянии.

Дальнейшие действия

Для получения дополнительных сведений о CI/CD и Azure DevOps ознакомьтесь со следующими ресурсами.