HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: сервер, проект, проектная работа, программирование на javascript, ci/cd сервер, node.js</p>
1 <p>Теги: сервер, проект, проектная работа, программирование на javascript, ci/cd сервер, node.js</p>
2 <p>Важнейшая часть образовательного процесса в OTUS - практическое применение знаний, полученных на занятиях. Именно поэтому последний модуль большинства курсов посвящён выполнению проектной работы. Предлагаем вашему вниманию работу одного из выпускников курса "<a>Разработчик JavaScript</a>" -<strong>Дмитрия Переверзы</strong>.</p>
2 <p>Важнейшая часть образовательного процесса в OTUS - практическое применение знаний, полученных на занятиях. Именно поэтому последний модуль большинства курсов посвящён выполнению проектной работы. Предлагаем вашему вниманию работу одного из выпускников курса "<a>Разработчик JavaScript</a>" -<strong>Дмитрия Переверзы</strong>.</p>
3 <p>Дмитрий создал сервис, предназначенный<strong>для автоматизации сборки и развёртывания проектов</strong>на рабочих площадках. При неудачных сборках проекта происходит автоматический сброс изменений до последнего коммита удачной сборки.</p>
3 <p>Дмитрий создал сервис, предназначенный<strong>для автоматизации сборки и развёртывания проектов</strong>на рабочих площадках. При неудачных сборках проекта происходит автоматический сброс изменений до последнего коммита удачной сборки.</p>
4 <h2>Настройка и регистрация</h2>
4 <h2>Настройка и регистрация</h2>
5 <p>Сервер необходимо расположить на сервере с https, иначе не удастся настроить github webhook. Для запуска работы сервиса используем следующую команду:</p>
5 <p>Сервер необходимо расположить на сервере с https, иначе не удастся настроить github webhook. Для запуска работы сервиса используем следующую команду:</p>
6 <p>После запуска сервиса можно регистрировать проекты, используя API сервиса.</p>
6 <p>После запуска сервиса можно регистрировать проекты, используя API сервиса.</p>
7 Метод Роут Описание GET project Получение конфигурационного файла POST project/register Регистрация нового проекта POST project/update Обновление полей проекта<p>Пример запроса на регистрацию проекта:</p>
7 Метод Роут Описание GET project Получение конфигурационного файла POST project/register Регистрация нового проекта POST project/update Обновление полей проекта<p>Пример запроса на регистрацию проекта:</p>
8 { "project": "testProject", "git": "https://github.com/username/project.git", "notificationEmails": [ "test@gmail.com" ], "privateParam": { "prodPass": "bxw5s222rGEU", "userName": "root" } }<ol><li>project - код вашего проекта.</li>
8 { "project": "testProject", "git": "https://github.com/username/project.git", "notificationEmails": [ "test@gmail.com" ], "privateParam": { "prodPass": "bxw5s222rGEU", "userName": "root" } }<ol><li>project - код вашего проекта.</li>
9 <li>git - ссылка на git-репозиторий вашего проекта.</li>
9 <li>git - ссылка на git-репозиторий вашего проекта.</li>
10 <li>notificationEmails - массив email-адресов для оповещения о процессе сборки ваших проектов.</li>
10 <li>notificationEmails - массив email-адресов для оповещения о процессе сборки ваших проектов.</li>
11 <li>privateParam - приватные параметры для подстановки в локальный конфиг вашего проекта.</li>
11 <li>privateParam - приватные параметры для подстановки в локальный конфиг вашего проекта.</li>
12 </ol><h3>Пример запроса на обновление полей проекта</h3>
12 </ol><h3>Пример запроса на обновление полей проекта</h3>
13 <p>Попробуем поменять приватный параметр prodPass и userName:</p>
13 <p>Попробуем поменять приватный параметр prodPass и userName:</p>
14 { "project": "testProject", "updatedParams": { "privateParam": { "prodPass": "bxwsr5544433GEU", "userName": "www-data" } } }<p>Обратите внимание, что каждое поле, переданное в updatedParams, полностью заменяет собой существующее значение.</p>
14 { "project": "testProject", "updatedParams": { "privateParam": { "prodPass": "bxwsr5544433GEU", "userName": "www-data" } } }<p>Обратите внимание, что каждое поле, переданное в updatedParams, полностью заменяет собой существующее значение.</p>
15 <p>Пример запроса на получение актуального конфига проекта:</p>
15 <p>Пример запроса на получение актуального конфига проекта:</p>
16 https://someurl.com/project?project=testProject<h2>Настройка проекта для работы с CI/CD сервисом</h2>
16 https://someurl.com/project?project=testProject<h2>Настройка проекта для работы с CI/CD сервисом</h2>
17 <p>В корне подключаемого проекта необходимо создать файл<strong>project.conf.json</strong>в следующем формате:</p>
17 <p>В корне подключаемого проекта необходимо создать файл<strong>project.conf.json</strong>в следующем формате:</p>
18 { "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" } ] }<p>Обо всех полях по порядку: 1. name - название вашего проекта. 2. code - код проекта (его указываем для получение конфига в /project). 3. targets - здесь указываем массив целевых веток для сборки (за ними и будет следить сервис).</p>
18 { "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" } ] }<p>Обо всех полях по порядку: 1. name - название вашего проекта. 2. code - код проекта (его указываем для получение конфига в /project). 3. targets - здесь указываем массив целевых веток для сборки (за ними и будет следить сервис).</p>
19 <p>Поля для targets: 1. branch - ветка проекта, изменения которой нужно отслеживать. 2. deploy - данные для подключения к удалённому серверу, на котором будет происходить деплой. В<strong>deploy.ssh</strong>помимо обычных данных подключения можно указать приватные параметры. Указывая параметр в формате #paramName#, мы скрываем данные подключение из публичного доступа. Для установки значений этих параметров воспользуйтесть полем<strong>privateParam</strong>при регистрации проекта в системе. 3. deploy.command - команда для запуска cборки и деплоя проекта. 4. testCommand - команда для запуска тестов на проекте (опционально).</p>
19 <p>Поля для targets: 1. branch - ветка проекта, изменения которой нужно отслеживать. 2. deploy - данные для подключения к удалённому серверу, на котором будет происходить деплой. В<strong>deploy.ssh</strong>помимо обычных данных подключения можно указать приватные параметры. Указывая параметр в формате #paramName#, мы скрываем данные подключение из публичного доступа. Для установки значений этих параметров воспользуйтесть полем<strong>privateParam</strong>при регистрации проекта в системе. 3. deploy.command - команда для запуска cборки и деплоя проекта. 4. testCommand - команда для запуска тестов на проекте (опционально).</p>
20 <p>Данный конфиг нужно занести под git.</p>
20 <p>Данный конфиг нужно занести под git.</p>
21 <h2>Настройка webhook на github.com</h2>
21 <h2>Настройка webhook на github.com</h2>
22 <p>На странице настроек репозитория указываем url адрес CI/CD сервера на роут /webhook:</p>
22 <p>На странице настроек репозитория указываем url адрес CI/CD сервера на роут /webhook:</p>
23 <p>При выполнении всех условий настроек проекта при обновлении нужной ветки вашего репозитория<strong>вы получите инструмент автоматической сборки ваших проектов</strong>.</p>
23 <p>При выполнении всех условий настроек проекта при обновлении нужной ветки вашего репозитория<strong>вы получите инструмент автоматической сборки ваших проектов</strong>.</p>
24 <p>Ознакомиться с подробностями проекта и его исходным кодом вы можете<a>по ссылке на репозиторий</a><strong>Дмитрия Переверзы</strong>. Чтобы попасть в следующую группу курса "<a>Разработчик JavaScript</a>", пройдите<a>вступительное тестирование</a>.</p>
24 <p>Ознакомиться с подробностями проекта и его исходным кодом вы можете<a>по ссылке на репозиторий</a><strong>Дмитрия Переверзы</strong>. Чтобы попасть в следующую группу курса "<a>Разработчик JavaScript</a>", пройдите<a>вступительное тестирование</a>.</p>
25  
25