Поделиться через


Рекомендации по использованию непрерывной интеграции

Применяется к этой контрольной рекомендации по операционному превосходству в Azure Well-Architected Framework:

OE:04 Оптимизируйте процессы разработки программного обеспечения и обеспечения качества, следуя отраслевым рекомендациям по разработке и тестированию. Для четкого обозначения ролей стандартизируйте методики между компонентами, такими как инструментирование, управление версиями, шаблоны проектирования приложений, документация и руководства по стилю.

Связанное руководство. Повышение скорости | сборки стандартных средств и процессов

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

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

Непрерывная интеграция — это практика, в рамках которой системы управления версиями интегрируются с конвейерами разработки ПО для предоставления автоматизированных механизмов сборки, тестирования и получения отзывов для команд разработчиков.

Основные стратегии проектирования

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

Процесс непрерывной интеграции начинается, когда инженер создает запрос на вытягивание GitHub, чтобы сообщить системе CI, что изменения кода готовы к интеграции. В идеале процесс интеграции проверяет код на основе нескольких базовых показателей и тестов. Затем он предоставляет отзыв специалисту по запросу о состоянии этих тестов.

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

Непрерывная интеграция позволяет быстрее доставлять высококачественное программное обеспечение, выполняя следующие действия:

  • Выполните автоматические тесты в коде, чтобы обеспечить раннее обнаружение критических изменений.
  • Выполнение анализа кода для проверки кода на соответствие стандартам, показателям качества и конфигурации.
  • Выполните проверки соответствия требованиям и безопасности, чтобы убедиться, что программное обеспечение не имеет известных уязвимостей.
  • Запустите прием или функциональные тесты, чтобы убедиться, что программное обеспечение работает должным образом.
  • Укажите быстрый отзыв об обнаруженных проблемах.
  • Создание ресурсов или пакетов для развертывания (если применимо) с обновленным кодом.

Автоматизация непрерывной интеграции с конвейерами

С целью реализации непрерывной интеграции используйте программные решения для интеграции, автоматизации процесса и управления им. Распространенная практика заключается в использовании конвейера непрерывной интеграции.

Конвейер непрерывной интеграции включает в себя часть программного обеспечения (часто размещенного в облаке), которая предоставляет:

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

В большинстве случаев программное обеспечение конвейера присоединено к системе управления версиями, таким образом, когда создаются запросы на вытягивание или программное обеспечение объединяются в определенную ветвь, выполняется конвейер непрерывной интеграции. Интеграция системы управления версиями также предоставляет возможность отправлять отзывы ci непосредственно по запросам на вытягивание.

Многие решения, такие как Azure Pipelines или GitHub Actions, предоставляют возможности конвейеров непрерывной интеграции.

Интеграция конвейеров с системой управления версиями

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

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

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

На следующем рисунке показана интеграция между GitHub и конвейером Azure DevOps. В этом примере создание запроса на вытягивание активирует конвейер Azure DevOps. Состояние конвейера отображается в запросе на вытягивание.

Снимок экрана: значок состояния Azure DevOps в репозитории GitHub.

Включение автоматизированных тестов

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

В следующем фрагменте кода приведен шаг тестирования из конвейера Azure DevOps. На шаге есть две задачи:

  • Первая задача использует популярную платформу тестирования Python для выполнения тестов CI. Эти тесты располагаются в системе управления версиями вместе с кодом Python. Результаты теста переходят к файлу с именем test-results.xml.
  • Вторая задача использует результаты теста и публикует их в конвейере Azure DevOps в виде интегрированного отчета.
- script: |
    pip3 install pytest
    pytest azure-vote/azure-vote/tests/ --junitxml=junit/test-results.xml
    continueOnError: true

- task: PublishTestResults@2
    displayName: 'Publish Test Results'
    inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/test-results.xml'
    failTaskOnFailedTests: true
    testRunTitle: 'Python $(python.version)'

На следующем рисунке показаны результаты теста, которые отображаются на портале Azure DevOps.

Снимок экрана: тесты конвейера Azure DevOps на портале Azure DevOps.

Тесты со сбоями

Неудачные тесты должны временно блокировать развертывание и привести к более глубокому анализу того, что произошло. Неудачные тесты также должны привести к уточнению тестов или улучшению изменения, которое привело к сбою тестов.

Публикация состояния сборки

Многие разработчики показывают, что качество кода является высоким, отображая индикатор состояния в своем репозитории. На следующем рисунке показан значок Azure Pipelines, отображаемый в файле readme для проекта с открытым исходным кодом в GitHub.

Снимок экрана: эмблема Azure Pipelines в файле readme в GitHub.

Упрощение функций Azure

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

Azure Pipelines предоставляет службы сборки и выпуска для поддержки непрерывной интеграции и непрерывной доставки (CI/CD) приложений.

GitHub for Actions for Azure обеспечивает автоматизацию процессов CI/CD. Он интегрируется непосредственно с Azure для упрощения развертываний. Вы можете создавать рабочие процессы, которые создают и тестируют каждый запрос на вытягивание в репозитории или развертывают объединенные запросы на вытягивание в рабочей среде.

Узнайте, как создать конвейер непрерывной интеграции с помощью GitHub или Azure DevOps:

Узнайте, как отображать индикаторы событий в репозиториях:

Контрольный список операционных знаний