Разработка конвейера CI/CD с использованием Azure DevOpsDesign a CI/CD pipeline using Azure DevOps

В этом сценарии предоставляется руководство по архитектуре и разработке для создания конвейера непрерывной интеграции (CI) и непрерывного развертывания (CD).This scenario provides architecture and design guidance for building a continuous integration (CI) and continuous deployment (CD) pipeline. В этом примере конвейер CI/CD развертывает двухуровневое веб-приложение .NET в Службе приложений Azure.In this example, the CI/CD pipeline deploys a two-tier .NET web application to the Azure App Service.

Переход на современные процессы CI/CD предоставляет множество преимуществ для создания, развертывания, тестирования и мониторинга приложения.Migrating to modern CI/CD processes provides many benefits for application builds, deployments, testing, and monitoring. Используя Azure DevOps вместе с другими службами, такими как служба приложений, организации могут сосредоточиться на разработке приложений, а не на управлении поддерживающей инфраструктурой.By using Azure DevOps along with other services such as App Service, organizations can focus on the development of their apps rather than the management of the supporting infrastructure.

Варианты соответствующего использованияRelevant use cases

Рассмотрите использование Azure DevOps и процессов CI/CD для:Consider Azure DevOps and CI/CD processes for:

  • Ускорение разработки приложений и жизненных циклов разработки.Accelerating application development and development lifecycles.
  • Внедрение механизмов проверки качества и согласованности в автоматизированный процесс сборки и выпуска.Building quality and consistency into an automated build and release process
  • Повышение стабильности и бесперебойной работы приложения.Increasing application stability and uptime.

ArchitectureArchitecture

Схема архитектуры компонентов Azure, участвующих в сценарии DevOps, с использованием Azure DevOps и Службы приложений Azure

Данные передаются в сценарии следующим образом:The data flows through the scenario as follows:

  1. Разработчик изменяет исходный код приложения.A developer changes application source code.
  2. Код приложения вместе с файлом конфигурации web.config фиксируется в репозитории исходного кода в Azure Repos.Application code including the web.config file is committed to the source code repository in Azure Repos.
  3. Непрерывная интеграция активирует сборку приложения и модульные тесты, используя Azure Test Plans.Continuous integration triggers application build and unit tests using Azure Test Plans.
  4. Непрерывное развертывание в Azure Pipelines активирует автоматическое развертывание артефактов приложения со значениями конфигурации для конкретной среды.Continuous deployment within Azure Pipelines triggers an automated deployment of application artifacts with environment-specific configuration values.
  5. Артефакты развертываются в Службу приложений Azure.The artifacts are deployed to Azure App Service.
  6. Служба Azure Application Insights собирает и анализирует данные о работоспособности, производительности и использовании ресурсов.Azure Application Insights collects and analyzes health, performance, and usage data.
  7. Разработчики отслеживают работоспособность, производительность и сведения об использовании и управляют ими.Developers monitor and manage health, performance, and usage information.
  8. Информация о невыполненной работе используется для назначения приоритетов новым функциям и исправлениям ошибок с помощью Azure Boards.Backlog information is used to prioritize new features and bug fixes using Azure Boards.

ComponentsComponents

  • Azure DevOps — это служба для комплексного управления жизненным циклом разработки на—основе планирования и управления проектами, управления кодом и продолжения сборки и выпуска.Azure DevOps is a service for managing your development lifecycle end-to-end—from planning and project management, to code management, and continuing to build and release.

  • Веб-приложения Azure — это служба для размещения веб-приложений, интерфейсов REST API и серверной части мобильных решений.Azure Web Apps is a PaaS service for hosting web applications, REST APIs, and mobile back ends. Хотя в этой статье основное внимание уделяется .NET, есть несколько дополнительных поддерживаемых вариантов платформ разработки.While this article focuses on .NET, there are several additional development platform options supported.

  • Application Insights — это расширяемая служба управления производительностью приложений (APM), получающая данные напрямую из источника и предназначенная для веб-разработчиков на нескольких платформах.Application Insights is a first-party, extensible Application Performance Management (APM) service for web developers on multiple platforms.

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

Хотя эта статья посвящена Azure DevOps, Azure DevOps Server (ранее известный как Team Foundation Server) может использоваться в качестве локального средства для замены.While this article focuses on Azure DevOps, Azure DevOps Server (previously known as Team Foundation Server) could be used as an on-premises substitute. Кроме того, также можно использовать набор технологий для разработки конвейера с открытым исходным кодом с помощью Jenkins.Alternatively, you could also use a set of technologies for an open-source development pipeline using Jenkins.

В контексте инфраструктуры как кода шаблоны Resource Manager использовались как часть проекта Azure DevOps, но вы можете использовать и другие технологии управления, например Terraform или Chef.From an infrastructure-as-code perspective, Resource Manager templates were used as part of the Azure DevOps project, but you could consider other management technologies such as Terraform or Chef. Если вы предпочитаете развертывание по схеме "инфраструктура как услуга" (IaaS) и вам требуется управления конфигурацией, можно использовать службу Настройка состояния службы автоматизации Azure, Ansible или Chef.If you prefer an infrastructure-as-a-service (IaaS)-based deployment and require configuration management, you could consider either Azure Automation State Configuration, Ansible, or Chef.

Можно использовать следующие альтернативы для размещения веб-приложений Azure.You could consider these alternatives to hosting in Azure Web Apps:

  • Виртуальные машины Azure справляются с рабочими нагрузками, требующими высокой степени управляемости или зависящими от компонентов операционной системы и служб, что невозможно реализовать в веб-приложениях (например, Windows GAC или модель COM).Azure Virtual Machines handles workloads that require a high degree of control, or depend on OS components and services that are not possible with Web Apps (for example, the Windows GAC, or COM).

  • Service Fabric — это хороший вариант, если архитектура рабочей нагрузки предназначена для распределенных компонентов, которые получают преимущества от развертывания и выполнения в кластере с высокой степенью управления.Service Fabric is a good option if the workload architecture is focused around distributed components that benefit from being deployed and run across a cluster with a high degree of control. Service Fabric также может использоваться для размещения контейнеров.Service Fabric can also be used to host containers.

  • Функции Azure предоставляют эффективный бессерверный подход, если архитектура рабочей нагрузки сосредоточена на распределенных компонентах с высокой степенью детализации, требующих минимальных зависимостей, в которых отдельные компоненты должны выполняться только по требованию (не непрерывно), а оркестрация компонентов не требуется.Azure Functions provides an effective serverless approach if the workload architecture is centered around fine grained distributed components, requiring minimal dependencies, where individual components are only required to run on demand (not continuously) and orchestration of components is not required.

Это дерево принятия решений для вычислительных служб Azure может помочь при выборе правильного пути для миграции.This decision tree for Azure compute services may help when choosing the right path to take for a migration.

Управление и безопасностьManagement and Security Considerations

  • Рассмотрите возможность использования одной из задач разметки, которые доступны в VSTS marketplace.Consider leveraging one of the tokenization tasks available in the VSTS marketplace.

  • Задачи Azure Key Vault могут загружать секреты из Azure Key Vault в ваш выпуск.Azure Key Vault tasks can download secrets from an Azure Key Vault into your release. Затем эти секреты можно использовать в качестве переменных в своем определении выпуска, что позволит избежать их хранения в системе управления версиями.You can then use those secrets as variables in your release definition, which avoids storing them in source control.

  • Используйте переменные выпуска в определениях выпуска для изменения конфигурации среды.Use release variables in your release definitions to drive configuration changes of your environments. Переменные выпуска могут охватывать как весь выпуск, так и конкретную среду.Release variables can be scoped to an entire release or a given environment. При использовании переменных для секретной информации убедитесь, что выбран значок с изображением замка.When using variables for secret information, ensure that you select the padlock icon.

  • Следует использовать шлюзы развертывания в конвейере выпуска.Deployment gates should be used in your release pipeline. Это позволяет использовать данные мониторинга во внешних системах (например системах управления инцидентами или дополнительных пользовательских системах), чтобы определить, следует ли повысить уровень выпуска.This lets you leverage monitoring data in association with external systems (for example, incident management or additional bespoke systems) to determine whether a release should be promoted.

  • Если требуется вмешательство в конвейер выпуска, используйте функциональность утверждений.Where manual intervention in a release pipeline is required, use the approvals functionality.

  • При выпуске конвейера рассмотрите возможность использования Application Insights и дополнительных средств мониторинга как можно раньше.Consider using Application Insights and additional monitoring tools as early as possible in your release pipeline. Множество организаций начинают проводить мониторинг только в своей рабочей среде.Many organizations only begin monitoring in their production environment. Отслеживая другие среды, вы можете определять ошибки на ранних этапах разработки и избегать проблем в рабочей среде.By monitoring your other environments, you can identify bugs earlier in the development process and avoid issues in your production environment.

Развертывание сценарияDeploy the scenario

Предварительные требованияPrerequisites

Пошаговое руководствоWalk-through

Azure DevOps Projects развернет план службы приложений, службу приложений и ресурс App Insights, а также настроить конвейер Azure pipelines.Azure DevOps Projects will deploy an App Service Plan, App Service, and an App Insights resource for you, as well as configure an Azure Pipelines pipeline for you.

После настройки конвейера с Azure DevOps Projects и завершения сборки Проверьте связанные изменения кода, рабочие элементы и результаты тестов.Once you've configure a pipeline with Azure DevOps Projects and the build is completed, review the associated code changes, work items, and test results. Вы заметите, что результаты теста не отображаются, так как в коде нет никаких тестов для выполнения.You will notice that no test results are displayed, because the code does not contain any tests to run.

Конвейер создает определение выпуска и триггер непрерывного развертывания, развертывая приложение в среде разработки.The pipeline creates a release definition and a continuous deployment trigger, deploying our application into the Dev environment. В рамках процесса непрерывного развертывания можно увидеть разброс выпусков в нескольких средах.As part of a continuous deployment process, you may see releases that span multiple environments. Выпуск может охватывать обе инфраструктуры (используя такие методы, как инфраструктура как код), а также развертывать необходимые пакеты приложений и все выполняемые после настройки задачи.A release can span both infrastructure (using techniques such as infrastructure-as-code), and can also deploy the application packages required along with any post-configuration tasks.

ЦеныPricing

Расчет стоимости Azure DevOps будет зависеть от количества пользователей в организации, которым требуется доступ, в дополнение к таким факторам, как количество параллельных требуемых выпусков и сборок, а также число тестовых пользователей.Azure DevOps costs depend on the number of users in your organization that require access, along with other factors like the number of concurrent build/releases required and number of test users. Дополнительные сведения см. Цены на Azure DevOps.For more information, see Azure DevOps pricing.

Калькулятор цен предоставляет оценку запуска Azure DevOps с 20 пользователями.This pricing calculator provides an estimate for running Azure DevOps with 20 users.

Azure DevOps оплачивается в расчете на каждого пользователя за месяц.Azure DevOps is billed on a per-user per-month basis. В дополнение к дополнительным тестовым пользователям или пользовательским лицензиям могут взиматься дополнительные затраты в зависимости от требуемых параллельных конвейеров.There may be additional charges depending on concurrent pipelines needed, in addition to any additional test users or user basic licenses.

Для получения дополнительных сведений о CI/CD и Azure DevOps ознакомьтесь со следующими ресурсами.Review the following resources to learn more about CI/CD and Azure DevOps: