В мире современной разработки программного обеспечения скорость и надежность доставки кода являются критически важными факторами. Именно здесь на сцену выходит Continuous Integration и Continuous Delivery (CI/CD) — набор практик, позволяющих автоматизировать сборку, тестирование и развертывание приложений. CircleCI является одним из лидеров среди облачных платформ для реализации CI/CD. Если вы все еще задаетесь вопросом «Зачем мне это нужно?», представьте: больше никаких ручных сборок, забытых тестов и ночных деплоев. CircleCI автоматизирует этот процесс, делая его предсказуемым и быстрым.
Основная философия CircleCI строится вокруг концепции конвейера (pipeline). Каждое изменение в вашем репозитории кода (например, на GitHub или Bitbucket) может запускать этот конвейер, который проходит через заранее определенные этапы: установку зависимостей, запуск тестов, сборку артефактов и их развертывание в нужное окружение. Это позволяет находить ошибки на самых ранних стадиях и гарантирует, что в основную ветку (main или master) попадает только проверенный, работоспособный код.
Первым шагом к использованию CircleCI является создание конфигурационного файла в корне вашего проекта. CircleCI использует файл с именем `.circleci/config.yml`, написанный на языке YAML. Именно в этом файле вы описываете всю логику вашего конвейера. Давайте рассмотрим базовую структуру на примере простого Node.js приложения.
Версия конфигурации задается в самом начале. Рекомендуется использовать актуальную вторую версию (2.1), которая предоставляет больше возможностей, включая удобные готовые команды (orbs).
version: 2.1
Далее определяются jobs (задачи) — отдельные шаги, которые выполняются в конвейере. Типичные задачи: `build` (сборка), `test` (тестирование) и `deploy` (развертывание). Каждая задача выполняется в своем изолированном окружении — контейнере или виртуальной машине.
jobs:
build-and-test:
docker:
- image: cimg/node:16.10 # Используем официальный образ Node.js от CircleCI
steps:
- checkout # Специальный шаг для клонирования кода из репозитория
- run:
name: Установка зависимостей
command: npm ci
- run:
name: Запуск тестов
command: npm test
В этом примере задача `build-and-test` запускается внутри контейнера с Node.js версии 16.10. Шаги последовательно клонируют код, устанавливают зависимости с помощью `npm ci` (что предпочтительнее для CI-окружения, чем `npm install`) и запускают тесты.
Однако просто запускать задачи недостаточно. Нужно определить, в каком порядке и при каких условиях они выполняются. Для этого используется секция `workflows`.
workflows:
version: 2
main-workflow:
jobs:
- build-and-test
Этот простой workflow запускает задачу `build-and-test` для каждого коммита в репозиторий. Но настоящая мощь CircleCI раскрывается при настройке более сложных сценариев. Например, вы можете настроить запуск одних задач только для pull request в ветку разработки, а других — для коммитов в основную ветку, что идеально подходит для реализации непрерывной поставки.
Рассмотрим более продвинутый пример с кэшированием зависимостей и артефактов. Установка зависимостей (особенно в больших проектах) может занимать много времени. CircleCI позволяет кэшировать папку `node_modules` между сборками, значительно ускоряя процесс.
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package-lock.json" }}
- v1-dependencies-
- run:
name: Установка зависимостей
command: npm ci
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package-lock.json" }}
Здесь используется механизм кэширования. Сначала мы пытаемся восстановить кэш по ключу, который зависит от контрольной суммы файла `package-lock.json`. Если файл зависимостей не менялся, будет восстановлена папка `node_modules`, и шаг `npm ci` пройдет мгновенно. После успешной установки зависимостей мы сохраняем новый кэш.
Еще одной сильной стороной CircleCI являются orbs — готовые, повторно используемые пакеты конфигурации. Они позволяют в несколько строк добавить сложную функциональность, такую как деплой на AWS, отправка уведомлений в Slack или сканирование кода с помощью SonarCloud. Например, для деплоя на AWS S3 можно использовать orb `circleci/aws-s3`.
orbs:
aws-s3: circleci/aws-s3@2.0
workflows:
deploy-workflow:
jobs:
- build-and-test
- deploy:
requires:
- build-and-test
filters:
branches:
only: main
context: aws-creds # Контекст с секретными ключами
jobs:
deploy:
executor: aws-s3/default
steps:
- aws-s3/sync:
from: ./build
to: 's3://my-app-bucket'
В этом workflow задача `deploy` запускается только для ветки `main` и только после успешного выполнения `build-and-test`. Для доступа к AWS используются безопасно хранимые в контекстах CircleCI учетные данные.
Настройка CircleCI может показаться сложной на первый взгляд, но инвестиции времени окупаются сторицей. Вы получаете автоматизированный, воспроизводимый и надежный процесс интеграции и доставки. Это снижает нагрузку на разработчиков, минимизирует человеческий фактор и позволяет выпускать обновления чаще и с большей уверенностью. Начните с простого конфигурационного файла, запустите его для своего проекта и наблюдайте, как каждый ваш коммит автоматически проходит через строгий контроль качества перед тем, как попасть в продакшн.
Зачем нужен CircleCI: полное руководство по настройке CI/CD с примерами кода
Подробное руководство по настройке непрерывной интеграции и доставки с помощью CircleCI. В статье объясняется базовая философия CI/CD, разбирается структура конфигурационного файла .circleci/config.yml с примерами кода для Node.js, рассматриваются ключевые концепции jobs, workflows, кэширования и использования готовых орбов для деплоя.
30
4
Комментарии (12)