📄 CircleCI
1. Общее описание
CircleCI — облачная система непрерывной интеграции и доставки (CI/CD), которая позволяет автоматизировать сборку, тестирование и деплой приложений. Поддерживает GitHub и Bitbucket.
Основные особенности:
- Интеграция с GitHub / Bitbucket.
- Гибкая конфигурация через файл
.circleci/config.yml. - Поддержка Docker, Kubernetes, машин (Linux, macOS, Windows).
- Параллельное выполнение job'ов.
- Бесплатный тарифный план (с ограничениями).
- Поддержка Workspaces и Pipelines.
2. Архитектура CircleCI
| Компонент | Описание |
|---|---|
| GitHub / Bitbucket Repository | Источник кода, который запускает билд. |
| config.yml | YAML-файл в папке .circleci, описывающий этапы CI/CD. |
| Pipeline | Процесс, запускаемый при пуше в репозиторий. |
| Workflow | Логическая группа job'ов, определяющая порядок выполнения. |
| Job | Единичная задача, состоящая из одного или нескольких шагов. |
| Step | Отдельный шаг внутри job'a (например, run, checkout, save_cache). |
3. Основные понятия
| Термин | Определение |
|---|---|
| Pipeline | Запуск CI/CD процесса, инициированный коммитом. |
| Workflow | Последовательность или параллельные job’ы в рамках pipeline. |
| Job | Единица работы, выполняемая на одном executor. |
| Executor | Среда выполнения: Docker, VM (Ubuntu), macOS, Windows. |
| Step | Отдельный шаг в job'е (например, установка зависимостей). |
| Workspaces | Временное хранилище данных между job'ами. |
| Orbs | Пакеты повторно используемых конфигураций CI/CD. |
| Contexts | Глобальные переменные окружения, доступные нескольким проектам. |
4. Настройка CircleCI
4.1 Активация проекта
- Перейти на https://circleci.com.
- Авторизоваться через GitHub или Bitbucket.
- Выбрать нужный репозиторий и добавить его в CircleCI.
- Создать в корне проекта папку
.circleciи файлconfig.yml.
4.2 Файл .circleci/config.yml
Это главный файл конфигурации. Пример:
version: 2.1
jobs:
build:
docker:
- image: cimg/python:3.9
steps:
- checkout
- run: pip install -r requirements.txt
- run: python -m pytest
workflows:
version: 2
test_workflow:
jobs:
- build
5. Примеры конфигураций
Node.js проект
version: 2.1
jobs:
build:
docker:
- image: cimg/node:16
steps:
- checkout
- run: npm install
- run: npm test
workflows:
test:
jobs:
- build
Python + Django проект
version: 2.1
orbs:
postgres: circleci/postgres@1.0.0
jobs:
build:
docker:
- image: cimg/python:3.9
- image: cimg/postgres:13.3
environment:
POSTGRES_USER: root
POSTGRES_DB: mydb
steps:
- checkout
- run: pip install -r requirements.txt
- run: python manage.py test
workflows:
test:
jobs:
- build
6. Orbs
Orbs — это способ делиться и использовать преднастроенными частями конфигурации.
Пример использования orb'а:
version: 2.1
orbs:
node: circleci/node@5.1.0
jobs:
build:
executor: node/default
steps:
- node/install-packages
- run: npm test
workflows:
test:
jobs:
- build
Список официальных orbs: https://circleci.com/developer/orbs
7. Уведомления
Настройка уведомлений в config.yml:
notify:
webhooks:
- url: https://your-webhook-url.com
Также можно настроить уведомления через: - Slack - Email - Webhooks - Microsoft Teams
8. Работа с переменными окружения
Переменные окружения можно задавать:
- В UI (в настройках проекта)
- Через контексты (Contexts) — для множества проектов
- Внутри config.yml (нестандартно и не рекомендуется для секретов)
Пример:
jobs:
build:
environment:
ENV_VAR_NAME: "value"
Для секретов лучше использовать интерфейс CircleCI.
9. Best Practices
- Храните
config.ymlв репозитории. - Используйте
orbsдля переиспользования логики. - Разделяйте билды на stages:
build → test → deploy. - Используйте кэширование (
restore_cache/save_cache) для ускорения билдов. - Используйте
workspacesдля передачи артефактов между job'ами. - Избегайте хранения секретов в конфиге — используйте UI или Contexts.