CI/CD сервер на node.js — проект выпускника курса «Разработчик JavaScript» | OTUS
Прямо сейчас идет день открытых дверей по курсу «Team Lead 2.0». Присоединяйтесь!

Курсы

Курсы в разработке Подготовительные курсы
Работа в компаниях Компаниям Блог +7 499 110-61-65

CI/CD сервер на node.js — проект выпускника курса «Разработчик JavaScript»

JS_Deep_1000x700_11.06-5020-78577a.png

Важнейшая часть образовательного процесса в OTUS — практическое применение знаний, полученных на занятиях. Именно поэтому последний модуль большинства курсов посвящён выполнению проектной работы. Предлагаем вашему вниманию работу одного из выпускников курса «Разработчик JavaScript» — Дмитрия Переверзы.

Дмитрий создал сервис, предназначенный для автоматизации сборки и развёртывания проектов на рабочих площадках. При неудачных сборках проекта происходит автоматический сброс изменений до последнего коммита удачной сборки.

Настройка и регистрация

Сервер необходимо расположить на сервере с https, иначе не удастся настроить github webhook. Для запуска работы сервиса используем следующую команду:

npm run serve

После запуска сервиса можно регистрировать проекты, используя API сервиса.

Метод Роут Описание
GET project Получение конфигурационного файла
POST project/register Регистрация нового проекта
POST project/update Обновление полей проекта

Пример запроса на регистрацию проекта:

{
  "project": "testProject",
  "git": "https://github.com/username/project.git",
  "notificationEmails": [
    "test@gmail.com"
  ],
  "privateParam": {
    "prodPass": "bxw5s222rGEU",
    "userName": "root"
  }
}
  1. project — код вашего проекта.
  2. git — ссылка на git-репозиторий вашего проекта.
  3. notificationEmails — массив email-адресов для оповещения о процессе сборки ваших проектов.
  4. privateParam — приватные параметры для подстановки в локальный конфиг вашего проекта.

Пример запроса на обновление полей проекта

Попробуем поменять приватный параметр prodPass и userName:

{
  "project": "testProject",
  "updatedParams": {
    "privateParam": {
      "prodPass": "bxwsr5544433GEU",
      "userName": "www-data"
    }
  }
}

Обратите внимание, что каждое поле, переданное в updatedParams, полностью заменяет собой существующее значение.

Пример запроса на получение актуального конфига проекта:

https://someurl.com/project?project=testProject

Настройка проекта для работы с CI/CD сервисом

В корне подключаемого проекта необходимо создать файл project.conf.json в следующем формате:

{
  "name": "Тестовый проект",
  "code": "testProject",
  "targets": [
    {
      "branch": "master",
      "deploy": {
        "ssh": {
          "host": "194.87.91.254",
          "pass": "#prodPass#",
          "port": 22,
          "username": "#userName#",
          "cwd": "/var/www/html"
        },
        "command": "npm run production"
      },
      "testCommand": "npm run test"
    }
  ]
}

Обо всех полях по порядку: 1. name — название вашего проекта. 2. code — код проекта (его указываем для получение конфига в /project). 3. targets — здесь указываем массив целевых веток для сборки (за ними и будет следить сервис).

Поля для targets: 1. branch — ветка проекта, изменения которой нужно отслеживать. 2. deploy — данные для подключения к удалённому серверу, на котором будет происходить деплой. В deploy.ssh помимо обычных данных подключения можно указать приватные параметры. Указывая параметр в формате #paramName#, мы скрываем данные подключение из публичного доступа. Для установки значений этих параметров воспользуйтесть полем privateParam при регистрации проекта в системе. 3. deploy.command — команда для запуска cборки и деплоя проекта. 4. testCommand — команда для запуска тестов на проекте (опционально).

Данный конфиг нужно занести под git.

Настройка webhook на github.com

На странице настроек репозитория указываем url адрес CI/CD сервера на роут /webhook:

1-20219-19ff2e.jpg

При выполнении всех условий настроек проекта при обновлении нужной ветки вашего репозитория вы получите инструмент автоматической сборки ваших проектов.

Ознакомиться с подробностями проекта и его исходным кодом вы можете по ссылке на репозиторий Дмитрия Переверзы. Чтобы попасть в следующую группу курса «Разработчик JavaScript», пройдите вступительное тестирование.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться