/CI-CD_node_pipeline

CI/CD сервер на node.js

Primary LanguageTypeScript

CI/CD сервер на node.js

Сервис предназначен для автоматизации сборки и развертывания проектов на рабочих площадках.

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

Настройка

Сервер необходимо расположить на сервере с 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

alt text

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