Настройка CI/CD для сайта через CircleCI

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка CI/CD для сайта через CircleCI
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка CI/CD для сайта через CircleCI

CircleCI — облачный CI/CD с акцентом на скорость. Использует концепцию orbs (переиспользуемые пакеты конфигурации) и resource classes для тонкой настройки ресурсов под каждый джоб. Конфигурация — .circleci/config.yml.

Базовая конфигурация

version: 2.1

orbs:
  node: circleci/[email protected]

jobs:
  test:
    docker:
      - image: cimg/node:20.11
    steps:
      - checkout
      - node/install-packages:
          pkg-manager: npm
      - run:
          name: Run tests
          command: npm test

  build:
    docker:
      - image: cimg/node:20.11
    steps:
      - checkout
      - node/install-packages:
          pkg-manager: npm
      - run: npm run build
      - persist_to_workspace:
          root: .
          paths:
            - dist/

  deploy:
    docker:
      - image: cimg/base:2024.01
    steps:
      - attach_workspace:
          at: .
      - add_ssh_keys:
          fingerprints:
            - "SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      - run:
          name: Deploy via rsync
          command: |
            rsync -avz --delete dist/ deploy@$DEPLOY_HOST:/var/www/mysite/

workflows:
  build-test-deploy:
    jobs:
      - test
      - build:
          requires:
            - test
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: main

Workspaces

persist_to_workspace / attach_workspace — механизм передачи файлов между джобами одного воркфлоу. Артефакты сборки (папка dist/) создаются в build и подхватываются в deploy. Работает быстрее, чем кэш — данные хранятся в оперативном хранилище CircleCI на время воркфлоу.

Orbs

Orbs — переиспользуемые блоки конфигурации, опубликованные в реестре. Экономят десятки строк YAML:

orbs:
  aws-s3: circleci/[email protected]
  slack: circleci/[email protected]

jobs:
  deploy_s3:
    docker:
      - image: cimg/python:3.12
    steps:
      - attach_workspace:
          at: .
      - aws-s3/sync:
          from: dist/
          to: s3://my-bucket/
          arguments: --delete
      - slack/notify:
          event: pass
          template: basic_success_1

Популярные orbs: circleci/aws-s3, circleci/kubernetes, circleci/docker, circleci/slack, circleci/heroku.

Resource Classes

Разные джобы требуют разных ресурсов. Тесты — можно на малой машине, сборка образа — нужно побольше:

jobs:
  lint:
    resource_class: small       # 1 CPU, 2GB RAM — дешевле
    docker:
      - image: cimg/node:20.11

  build_docker:
    resource_class: large       # 4 CPU, 8GB RAM
    machine:
      image: ubuntu-2204:current

Классы: small, medium (по умолчанию), medium+, large, xlarge, 2xlarge. Стоимость в кредитах пропорциональна.

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

CircleCI умеет автоматически разбивать тест-сьюты на N параллельных контейнеров:

test:
  parallelism: 4
  docker:
    - image: cimg/node:20.11
  steps:
    - checkout
    - node/install-packages
    - run:
        name: Split and run tests
        command: |
          TESTFILES=$(circleci tests glob "**/*.test.ts" | circleci tests split --split-by=timings)
          npx jest $TESTFILES
    - store_test_results:
        path: test-results/

circleci tests split --split-by=timings — разбивает файлы по историческим данным о времени выполнения, балансируя нагрузку между контейнерами. При 4 контейнерах тесты проходят примерно в 4 раза быстрее.

Условные шаги и approval

workflows:
  deploy:
    jobs:
      - build
      - hold:
          type: approval       # ждёт ручного нажатия в UI
          requires:
            - build
      - deploy_production:
          requires:
            - hold
          filters:
            branches:
              only: main

type: approval — джоб-пауза, требует подтверждения в CircleCI UI. Удобно для деплоя на прод.

SSH-доступ к упавшему билду

При сбое можно переподключиться к контейнеру:

circleci ssh --job JOB_ID

Или включить в конфиге:

- run:
    when: on_fail
    command: sleep 600   # держит контейнер 10 минут для SSH-отладки

Хранение артефактов и тест-результатов

- store_artifacts:
    path: dist/
    destination: build-output

- store_test_results:
    path: test-results/

Артефакты доступны в UI на вкладке Artifacts. Тест-результаты в формате JUnit XML отображаются на вкладке Tests с разбивкой по сьютам.

Сроки настройки

Первый рабочий пайплайн — 1 день: создание .circleci/config.yml, добавление SSH-ключей и переменных окружения в проект, отладка. Полная конфигурация с параллельными тестами, orbs, approval flow — 2–3 дня.