Skip to content

ШРИ 2020. Домашнее задание 3. "CI сервер на Node.js"

Notifications You must be signed in to change notification settings

dvdvdmt/hw-3-ci-server

Repository files navigation

ШРИ 2020. "CI сервер и его клиент"

Краткая информация

При разработке использовался Node.js v12.14.1.
Перед запуском приложение необходимо настроить, задав переменные окружения в файле .env. Шаблон этого файла хранится в .env-example.

Порядок команд запуска:

  1. Установить зависимости npm i (в корне проекта).
  2. Запустить сервер npm run start:server.
  3. Добавить build агента npm run start:agent:dev.
  4. Запустить клиент npm run start:client:dev.
  5. (опционально) Запустить e2e тесты test:e2e.

Общее описание

Проект представляет клиент-серверное приложение для запуска сборок приложений из произвольных репозиториев. Серверная часть выполнена с использованием Express, а клиент основан на React.

Описание сервера

Сервер отдает статические файлы из папки public, а также имеет REST API для клиентской части. . Сервер запускается командой npm run start:server и ожидает запросы на localhost:3000. На localhost:3000/api-docs можно ознакомиться с его API.
Для задания был подготовлен вспомогательный репозиторий hw-3-public-repo-example. В нем можно выполнить команду псевдо-сборки npm run --silent build которая выдаст лог сборки, либо завершится ошибкой. Тестовые настройки после запуска сервера можно задать с помощью curl:

curl --location --request POST 'localhost:3000/api/settings' \
--header 'Content-Type: application/json' \
--data-raw '{
    "mainBranch": "main",
    "buildCommand": "npm run --silent build",
    "repoName": "dvdvdmt/hw-3-public-repo-example",
    "period": 1
}'

Либо после запуска клиента на странице настроек.
Кроме отдачи статики и данных из БД, сервер занимается обработкой очереди сборок. Он распределяет задания на сборку между агентами, которые в конце присылают ему результат.

Build агент

Это приложение, которое занимается выполнением сборок. Вначале запуска агент регистрирует себя в реестре CI сервера и получает номер порта. Далее он ожидает команду сборки, выполняет ее и сообщает результат CI серверу. Запуск агента производится командой npm run start:agent:dev.

Описание клиента

⚠️ Клиент находится в процессе написания и не удовлетворяет всем требованиям из задачи. Работающая часть покрыта e2e тестами.

Для запуска клиента выполните npm run start:client:dev. Интересной особенностью решения является генерация API-client на основе OpenAPI схемы сервера. Запустить генерацию клиента можно командой npm run api:generate.

Тесты

Для модульных тестов был выбран Jest, из-за его широкого набора возможностей при почти отсутствующей конфигурации. Модульные тесты запускаются командой npm run test:unit.
Для end-to-end тестов был выбран Cypress из-за подробной документации, простоты написания и высокой стабильности его тестов. End-to-end тесты запускаются командой npm run test:e2e.

About

ШРИ 2020. Домашнее задание 3. "CI сервер на Node.js"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages