Что такое CircleCI?

CircleCI — это cloud-native платформа непрерывной интеграции и развертывания, которая автоматизирует процессы сборки, тестирования и развертывания приложений. Известна своей простотой настройки и высокой производительностью.

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

  • Cloud-first approach — изначально разработана для облака
  • Docker support — первоклассная поддержка контейнеров
  • Parallel testing — автоматическое распараллеливание тестов
  • Orbs ecosystem — переиспользуемые конфигурации
  • SSH debugging — возможность подключения для отладки
  • Insights dashboard — аналитика и метрики производительности
  • Matrix jobs — тестирование на множественных конфигурациях

Создание .circleci/config.yml

 1# .circleci/config.yml
 2version: 2.1
 3
 4orbs:
 5  python: circleci/python@2.1.1
 6  docker: circleci/docker@2.2.0
 7  kubernetes: circleci/kubernetes@1.3.1
 8
 9executors:
10  python-executor:
11    docker:
12      - image: cimg/python:3.9
13    resource_class: medium
14
15jobs:
16  test:
17    executor: python-executor
18    steps:
19      - checkout
20      
21      - python/install-packages:
22          pkg-manager: pip
23          # pip-dependency-file: requirements.txt
24          # Или для poetry: pkg-manager: poetry
25          
26      - run:
27          name: Run tests
28          command: |
29            pytest tests/ --junitxml=test-results.xml --cov=app --cov-report=xml
30            
31      - store_test_results:
32          path: test-results.xml
33          
34      - store_artifacts:
35          path: coverage.xml
36          destination: coverage-reports
37
38  build-and-push:
39    executor: docker/docker
40    steps:
41      - checkout
42      - setup_remote_docker:
43          version: 20.10.14
44          docker_layer_caching: true
45          
46      - docker/build:
47          image: myapp
48          tag: << pipeline.git.revision >>
49          
50      - docker/push:
51          image: myapp
52          tag: << pipeline.git.revision >>
53
54  deploy:
55    executor: kubernetes/default
56    steps:
57      - checkout
58      - kubernetes/install-kubectl
59      - run:
60          name: Deploy to Kubernetes
61          command: |
62            kubectl set image deployment/myapp myapp=myapp:<< pipeline.git.revision >>
63            kubectl rollout status deployment/myapp
64
65workflows:
66  test-and-deploy:
67    jobs:
68      - test
69      - build-and-push:
70          requires:
71            - test
72          filters:
73            branches:
74              only: main
75      - deploy:
76          requires:
77            - build-and-push
78          filters:
79            branches:
80              only: main

Использование Orbs

 1# Популярные Orbs
 2orbs:
 3  # Python орб для управления зависимостями
 4  python: circleci/python@2.1.1
 5  
 6  # AWS орб для развертывания
 7  aws-cli: circleci/aws-cli@3.1.4
 8  aws-ecs: circleci/aws-ecs@3.2.0
 9  
10  # Slack орб для уведомлений
11  slack: circleci/slack@4.10.1
12  
13  # Codecov орб для coverage
14  codecov: codecov/codecov@3.2.4
15
16jobs:
17  notify-on-fail:
18    executor: python/default
19    steps:
20      - slack/notify:
21          event: fail
22          template: basic_fail_1

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

 1# Автоматическое распараллеливание тестов
 2test-parallel:
 3  executor: python-executor
 4  parallelism: 4
 5  steps:
 6    - checkout
 7    - python/install-packages
 8    - run:
 9        name: Run tests in parallel
10        command: |
11          # CircleCI автоматически разделит тесты
12          pytest $(circleci tests glob "tests/**/*.py" | circleci tests split --split-by=timings)
13    - store_test_results:
14        path: test-results

Когда использовать CircleCI

  • Нужна простая и быстрая настройка CI/CD
  • Важна производительность и скорость сборок
  • Команда предпочитает cloud-native решения
  • Требуется хорошая поддержка Docker
  • Нужно автоматическое распараллеливание тестов
  • Важны insights и аналитика

Преимущества CircleCI

  • Performance — одна из самых быстрых CI/CD платформ
  • Docker first — отличная поддержка контейнеров
  • Orbs ecosystem — переиспользуемые конфигурации
  • Parallel testing — автоматическое распараллеливание
  • SSH debugging — возможность подключения для отладки
  • Insights — детальная аналитика производительности

Недостатки CircleCI

  • Стоимость может быть высокой для больших команд
  • Меньше flexibility по сравнению с Jenkins
  • Ограниченная поддержка on-premise
  • Зависимость от облачной платформы
  • Меньше интеграций чем у некоторых конкурентов

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

  • GitHub Actions — для проектов на GitHub
  • GitLab CI/CD — интегрированное решение
  • Jenkins — для on-premise развертываний
  • Azure Pipelines — от Microsoft
  • Travis CI — для open source проектов

Best Practices

  • Используй Docker layer caching для ускорения сборок
  • Настрой правильное распараллеливание тестов
  • Используй Orbs для переиспользования конфигураций
  • Мониторь Insights для оптимизации производительности
  • Настрой proper workflows для разных веток
  • Используй contexts для управления секретами

FAQ

Подходит ли CircleCI для продакшена?

Да, CircleCI широко используется в production средах и зарекомендовал себя как надежное решение. Используется компаниями как Spotify, Coinbase, BuzzFeed.

Какие требования к инфраструктуре?

CircleCI — это cloud-native платформа, поэтому не требует собственной инфраструктуры. Все выполняется на их серверах.

Сколько стоит CircleCI?

Есть бесплатный план с ограничениями. Платные планы начинаются от $30/месяц за дополнительные кредиты и возможности.