Открыть сервис

AWS CodePipeline

AWS CodePipeline — это полностью управляемый сервис непрерывной доставки (continuous delivery, CD), предоставляемый компанией Amazon Web Services (AWS). Он автоматизирует этапы сборки, тестирования и развёртывания программного обеспечения при каждом изменении кода, позволяя разработчикам быстро и надёжно выпускать обновления. Сервис является частью набора инструментов AWS для DevOps и тесно интегрирован с другими сервисами AWS, а также со сторонними инструментами.

История и развитие

AWS CodePipeline был анонсирован в июле 2015 года на конференции AWS re:Invent. Первоначально сервис поддерживал только базовые интеграции с AWS CodeCommit, AWS CodeBuild и AWS CodeDeploy. В последующие годы функциональность значительно расширилась: появилась поддержка сторонних плагинов (через Jenkins, GitHub, Bitbucket, GitLab), кастомных действий (Lambda-функции, ручные утверждения), параллельных стадий, а также интеграция с системами управления конфигурациями (Ansible, Chef, Puppet). В 2020 году была добавлена возможность создания пайплайнов с помощью AWS CloudFormation и Terraform, что упростило управление инфраструктурой как кодом.

Архитектура и ключевые понятия

Пайплайн (Pipeline)

Пайплайн — это последовательность этапов (stages), каждый из которых содержит набор действий (actions). Пайплайн определяет полный жизненный цикл поставки: от исходного кода до развёртывания в целевой среде. Каждый пайплайн имеет уникальное имя в регионе AWS.

Этапы (Stages)

Этапы — логические группы действий, выполняемых последовательно или параллельно. Типовые этапы:

  • Source — получение исходного кода из репозитория (например, S3, CodeCommit, GitHub, ECR).
  • Build — компиляция, тестирование, упаковка артефактов (через CodeBuild, Jenkins, или кастомные скрипты).
  • Test — выполнение автоматических тестов (юнит-тесты, интеграционные тесты, нагрузочные тесты).
  • Deploy — развёртывание артефактов в целевую среду (EC2, ECS, Lambda, Elastic Beanstalk, CloudFormation, или сторонние системы).

Действия (Actions)

Действия — атомарные операции внутри этапа. Каждое действие имеет провайдера (AWS-сервис или сторонний инструмент) и конфигурацию. Примеры действий:

  • AWS CodeCommitклонирование репозитория.
  • AWS CodeBuild — запуск сборки.
  • AWS CodeDeploy — развёртывание на EC2/On-Premises.
  • AWS Lambda — вызов функции для кастомной логики.
  • Manual Approval — ручное подтверждение перед развёртыванием.
  • Jenkins — запуск задания в Jenkins.

Артефакты (Artifacts)

Артефакты — файлы, передаваемые между этапами (например, скомпилированный JAR, Docker-образ, конфигурационные файлы). Артефакты хранятся в Amazon S3 (по умолчанию) или в ECR (для образов контейнеров).

Провайдеры (Providers)

CodePipeline поддерживает два типа провайдеров:

  • AWS-провайдеры — CodeCommit, CodeBuild, CodeDeploy, Lambda, ECS, CloudFormation, S3, Elastic Beanstalk, Step Functions.
  • Сторонние провайдеры — Jenkins, GitHub, Bitbucket, GitLab, Docker Hub, Ansible, Chef, Puppet, а также кастомные действия через Lambda.

Основные возможности

Автоматизация пайплайнов

CodePipeline автоматически запускает пайплайн при каждом изменении в подключённом репозитории (через webhook или опрос S3). Это позволяет реализовать непрерывную интеграцию (CI) и непрерывную доставку (CD) без ручного вмешательства.

Параллельные и последовательные стадии

Внутри этапа действия могут выполняться параллельно (например, одновременное тестирование на разных версиях ОС) или последовательно. Это ускоряет пайплайн и позволяет проверять совместимость.

Ручные утверждения (Manual Approval)

На любом этапе можно добавить действие «Manual Approval», которое приостанавливает выполнение до получения одобрения от указанного пользователя или группы. Это полезно для развёртывания в production-среду.

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

CodePipeline поддерживает:

  • AWS CodeCommit — нативный репозиторий AWS.
  • GitHub — через OAuth-приложение или GitHub App.
  • Bitbucket — через OAuth.
  • GitLab — через GitLab CI/CD интеграцию.
  • Amazon S3 — для хранения ZIP-архивов с кодом.

Мониторинг и логирование

Все события пайплайна записываются в Amazon CloudWatch Events и CloudWatch Logs. Можно настроить оповещения через SNS (например, при сбое этапа). Также доступен визуальный редактор в консоли AWS, где отображается текущий статус каждого этапа.

Безопасность и управление доступом

CodePipeline интегрирован с AWS Identity and Access Management (IAM). Для каждого действия можно задать отдельную роль IAM, что позволяет ограничивать права (например, роль для сборки не имеет доступа к production-базам данных). Также поддерживается шифрование артефактов с помощью AWS KMS.

Применение

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

  • CI/CD для веб-приложений — автоматическая сборка, тестирование и развёртывание на EC2 или Elastic Beanstalk.
  • Контейнеризация — сборка Docker-образов, публикация в ECR и развёртывание в ECS или EKS.
  • Serverless-приложения — сборка и развёртывание Lambda-функций и API Gateway.
  • Инфраструктура как код — развёртывание CloudFormation-стеков при изменении шаблонов.
  • Мобильные приложения — сборка и тестирование APK/IPA с последующей публикацией в магазины приложений (через сторонние интеграции).

Пример: пайплайн для веб-приложения на Node.js

  1. Source — GitHub репозиторий с кодом.
  2. Build — CodeBuild запускает npm install, npm test, npm run build, создаёт ZIP-архив.
  3. Test — параллельный запуск интеграционных тестов на разных версиях Node.js.
  4. Deploy — CodeDeploy развёртывает артефакт на группу EC2-инстансов (blue/green deployment).

Ограничения и альтернативы

Ограничения

  • Региональность — пайплайн работает только в одном регионе AWS. Для кросс-региональных развёртываний требуется дополнительная настройка (например, копирование артефактов между регионами).
  • Максимальная длина пайплайна — до 50 этапов, до 100 действий на этап.
  • Артефакты — максимальный размер артефакта 2 ГБ (для S3).
  • Время выполнения — максимальное время выполнения пайплайна 30 дней (но обычно пайплайны занимают минуты).
  • Зависимость от AWS — для использования требуется аккаунт AWS и оплата за выполняемые действия (по тарифам CodePipeline, CodeBuild, CodeDeploy и т.д.).

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

  • Jenkins — open-source CI/CD-сервер с богатой экосистемой плагинов, но требующий самостоятельного управления.
  • GitLab CI/CD — встроенный CI/CD в GitLab, поддерживающий Docker, Kubernetes, и интеграцию с AWS.
  • GitHub Actions — облачный CI/CD от GitHub, поддерживающий множество экосистем.
  • CircleCI — облачный CI/CD-сервис с простой конфигурацией.
  • Azure DevOps — набор инструментов от Microsoft, включающий пайплайны, репозитории и тестирование.

Интересные факты

  • CodePipeline поддерживает кастомные действия через AWS Lambda, что позволяет реализовать любую логику (например, отправка уведомлений в Slack, вызов внешних API).
  • Сервис бесплатен для первого пайплайна в месяц (до 100 минут выполнения). Дополнительные пайплайны и минуты оплачиваются по тарифам.
  • CodePipeline может быть интегрирован с AWS CloudFormation для создания пайплайнов как части инфраструктуры (Infrastructure as Code).

Источники

  • AWS Documentation: «What is AWS CodePipeline?»
  • AWS re:Invent 2015 — анонс сервиса
  • AWS User Guide: «Pipeline structure and syntax»
  • AWS Developer Guide: «Integrating with third-party tools»
  • AWS Pricing page: CodePipeline pricing

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →