📄 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.