Skip to content

📄 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 Активация проекта

  1. Перейти на https://circleci.com.
  2. Авторизоваться через GitHub или Bitbucket.
  3. Выбрать нужный репозиторий и добавить его в CircleCI.
  4. Создать в корне проекта папку .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.

10. Полезные ссылки