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


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

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

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

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

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

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

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

Ключевые стратегии проектирования

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

Процесс непрерывной интеграции начинается, когда инженер создает запрос на вытягивание 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.

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

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

Индикаторы результатов CI

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

Снимок экрана: значок Azure Pipelines в файле сведений в GitHub.

Упрощение azure

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

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

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

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

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

Контрольный список эффективности операций