Перейти к содержимому

CI для ваших репозиториев GitHub
на серверах, которыми мы управляем сами.

Каждый пуш и пулл-реквест запускает ваши тесты в песочнице на оборудовании Enzonic, которая уже работает к моменту прихода задания, с логами в реальном времени и проверкой на GitHub. Напишите короткий .enzonic/ci.yml или оставьте уже имеющиеся рабочие процессы GitHub Actions.

3 000 мин в месяц бесплатно. Карта не нужна.

Посмотреть пример конфигурации
$ git push origin maina41c9e2Запуск #128 прошёл за 2 мин 18 сlint22stest (node 20)1m 08stest (node 22)1m 21sdeploy26spostgres:17 · healthyВсе проверки пройдены4 задания · Enzonic CI
Минут CI в месяц
задания одновременно
на задание
кэша зависимостей

Всё, что нужно пайплайну, и ничего не нужно контролировать

Раннеры, сервисы, кэши и логи входят в продукт. Вы пишете только шаги.

Песочницы, которые уже работают

Каждое задание получает собственную песочницу на оборудовании Enzonic, запущенную заранее и готовую к работе в момент прихода задания.

Задания матрицы и needs

Тесты на Node 20 и 22 одновременно, затем деплой только когда прошли все ячейки. Задания ждут нужных им заданий.

Сервисы Postgres и Valkey

Запустите настоящую базу данных рядом с тестами одной строкой; её работоспособность проверяется до первого шага.

Кэши

Сохраняйте node_modules, колёса pip или результаты сборки между запусками, используя ключ, построенный по вашему lock-файлу.

Артефакты

Храните отчёты о покрытии, сборки и скриншоты, передавайте их следующим заданиям и скачивайте в течение нескольких дней.

Логи в реальном времени

Следите за каждым шагом в реальном времени: с цветовой подсветкой, сгруппированные по шагам, а упавшие шаги открыты для вас.

Проверки на GitHub

Каждое задание отправляет проверку с аннотациями в пулл-реквест, готовую для защиты ветки.

Ваши рабочие процессы без изменений

Большая часть GitHub Actions работает без изменений: матрицы, сервисы, контейнеры и распространённые setup-действия.

Расписания

Ночные тесты или еженедельные проверки зависимостей со строкой cron, в UTC.

Enzica исправляет упавшие запуски

Один клик по упавшему заданию: Enzica находит причину, отправляет ветку с исправлением и запускает на ней пайплайн.

Ожидания больше нет, так что запуск это ваши шаги

Большая часть времени CI уходит на запуск машины, клонирование и загрузку зависимостей. Enzonic CI выполняет эту работу до прихода вашего задания.

  1. 01

    Песочницы размораживаются, а не загружаются заново

    Пул песочниц запускается заранее. Когда приходит задание, ему выдаётся готовая песочница, поэтому машину не нужно поднимать.

  2. 02

    Checkout из локального зеркала

    Каждый раннер хранит зеркало вашего репозитория и загружает только изменения, а не клонирует его с GitHub для каждого задания.

  3. 03

    Кэши подключаются с локального диска

    Кэши зависимостей остаются на раннере и подключаются к заданию, а не скачиваются и не распаковываются заново.

Каждое задание показывает, куда ушло время: очередь, песочница, checkout, зависимости, сервисы, кэш и шаги.

Один файл в вашем репозитории

Закоммитьте .enzonic/ci.yml и отправьте пуш. Задания выполняются в порядке, заданном needs; ячейки матрицы выполняются параллельно, и у каждой свои сервисы, кэш и артефакты.

  • линтер запускается первым; обе ячейки тестов стартуют после его успешного прохождения
  • каждая ячейка тестов получает собственный Postgres на localhost и как postgres:5432
  • загрузки npm берутся из кэша, ключ которого строится по package-lock.json
  • отчёт о покрытии сохраняется, даже если тесты упали
  • деплой запускается только из main, с секретом, который никогда не показывается в логах
name: CI

on:
  push:
    branches: [main]
  pull_request:

jobs:
  lint:
    image: node:22
    steps:
      - run: npm ci
      - run: npm run lint

  test:
    needs: lint
    image: node:${{ matrix.node }}
    matrix:
      node: [20, 22]
    services:
      postgres:
        image: postgres:17-alpine
        env: { POSTGRES_PASSWORD: postgres }
    env:
      DATABASE_URL: postgres://postgres:postgres@postgres:5432/postgres
    cache:
      key: npm-${{ hashFiles('package-lock.json') }}
      paths: [~/.npm]
    steps:
      - run: npm ci
      - run: npm test
    artifacts:
      - name: coverage-node${{ matrix.node }}
        paths: [coverage/]
        when: always

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    steps:
      - run: npx enzonic deploy --prod
        env:
          ENZONIC_TOKEN: ${{ secrets.DEPLOY_TOKEN }}

Уже используете GitHub Actions?

Подключите репозиторий, и ваши .github/workflows будут работать здесь без правок, если используют перечисленное ниже. Всё остальное отклоняется с понятным сообщением, а не пропускается молча.

Работает как есть

  • actions/checkoutКоммит запуска всегда извлекается (checkout)
  • actions/setup-node, setup-python, setup-go, setup-javaВыберите образ задания; cache: добавляет кэш менеджера пакетов
  • oven-sh/setup-bun, pnpm/action-setupОбраз Bun, установлен pnpm
  • actions/cache (and /restore, /save)Кэш задания: восстанавливается в начале и сохраняется в конце
  • actions/upload-artifact, download-artifactАртефакты сохраняются с запуском и передаются между заданиями
  • strategy.matrix, needs, if, services, containerВключая include / exclude и fail-fast

Не поддерживается

  • Другие варианты: actions, Docker actions, составные actions и переиспользуемые рабочие процессы
  • Выходные данные шагов и заданий (steps.*.outputs, needs.*.outputs)
  • Раннеры Windows и macOS
  • pull_request_target
Полный список совместимости

Цены

CI входит в ваш тариф Enzonic Cloud, тот же, что включает Deploy и Databases. Начните с бесплатного тарифа и переходите на платный, когда понадобятся больше минут или более мощные раннеры. Только Linux-раннеры.

Тарифы Enzonic CI
CI входит в каждый тариф Cloud
Free
0 $
Starter
5 $ / мес.
4,17 $ в месяц при оплате за год
Рекомендуем
Pro
10 $ / мес.
8,33 $ в месяц при оплате за год
Growth
19 $ / мес.
15,83 $ в месяц при оплате за год
Business
29 $ / мес.
24,17 $ в месяц при оплате за год
Минут CI в месяц3 0005 0006 00015 00060 000
Заданий одновременно2461020
Самое долгое задание360 мин360 мин360 мин480 мин720 мин
Кеш зависимостей2 ГБ5 ГБ10 ГБ20 ГБ50 ГБ
Сохранённые артефакты90 дней90 дней90 дней180 дней400 дней
Сохранённые логи14 дней30 дней30 дней60 дней90 дней

Гранты для создателей

Делаете open source, учитесь, преподаёте или руководите некоммерческой организацией? Подайте заявку на бесплатное время Pro или Business и кредит Cloud для Deploy и Баз данных.

  • Тариф Pro или Business на срок до года, сразу для Deploy и Баз данных
  • Кредит Cloud зачисляется на ваш баланс
  • Для личного аккаунта или всей команды
  • Читает человек, ответ обычно в течение нескольких дней
  • Open source
  • Студенты
  • Некоммерческие организации
  • Стартапы
  • Преподаватели
  • Хакатоны

Вопросы

Что считается минутой CI?

Каждая начатая минута выполнения задания округляется вверх для каждого задания. Минута на среднем раннере считается дважды, на большом четыре раза. Время в очереди не учитывается, а задания, которые перезапуск сохраняет из предыдущей попытки, ничего не стоят.

Где выполняются задания?

На серверах, которыми Enzonic управляет сам, тех же, на которых работают Enzonic Deploy и Databases. Каждое задание получает собственную песочницу gVisor со своей файловой системой и сетью, а его контейнеры сервисов работают рядом. Задания никогда не делят ядро машины с кодом другого клиента.

Почему задания запускаются так быстро?

Песочницы запускаются заранее и готовятся к работе, когда приходит задание, вместо запуска новой машины для каждого задания. Checkout берётся из локального зеркала вашего репозитория, а кэши зависимостей подключаются с локального диска, а не скачиваются. Большая часть запуска это ваши собственные шаги.

Какие операционные системы могут использовать задания?

Только Linux. Задания выполняются в контейнерах Linux; раннеры Windows и macOS недоступны.

Можно ли оставить мои рабочие процессы GitHub Actions?

Да, если они используют поддерживаемый набор: шаги run, matrix, needs, services, container, а также действия checkout, setup-node, setup-python, setup-go, setup-java, setup-bun, pnpm, cache и artifact. Рабочий процесс, который использует что-то другое, пропускается с понятным сообщением, а остальные рабочие процессы продолжают работать.

Что происходит с секретами и пулл-реквестами из форков?

Секреты зашифрованы, попадают только в задания, которые их используют, и скрываются в логах. Пулл-реквесты из форков запускаются без секретов, без токена GitHub и без сохранения кэшей, или не запускаются вовсе, если вы так предпочитаете.

Как результаты попадают на GitHub?

В виде проверок с аннотациями упавших строк в пулл-реквесте, если у приложения GitHub есть право Checks. Без него как статусы коммитов. Правила защиты ветки могут требовать их, как и любую другую проверку.

Что, если запуск завершился ошибкой?

Если хотите, вы получите письмо, а на упавшем задании появится кнопка «Исправить с Enzica». Enzica читает лог и вашу конфигурацию, отправляет исправление в новую ветку enzica/ci-fix и запускает на ней пайплайн. Ваши ветки никогда не меняются; слейте исправление, если оно верное.

Нужно ли размещать приложение на Enzonic?

Нет. CI работает с любым репозиторием GitHub. Деплойте из задания туда, где вы размещаетесь, с секретом для токена, или в Enzonic Deploy.

Какие образы может использовать задание?

Любой публичный образ контейнера: node, python, golang, eclipse-temurin, oven/bun или свой. Сервисы вроде postgres:17 и valkey/valkey:8 запускаются до шагов и доступны на localhost и по своему имени сервиса.

Ваш следующий пуш может запуститься здесь.

Результат тоже можно доставить: Enzonic Deploy размещает веб-приложения бесплатно.