Webhook-server - cервер обработки вебхуков из Gitlab и Taiga.
Вебхуки приходят при создании wiki страниц в Gitlab и Taiga. Сервер запускает скрипт(Page-Creator) для создания соответствующих страниц в Wiki MIEM.
Репозиторий в gitlab
Сервер содержит в себе два роутера: /gitlab и /taiga.
Роутер /gitlab
Принимает вебхуки GitLab типа wiki в формате JSON, извлекает название, путь и тело страницы и отправляет их в Вики либо в качестве основной страницы репозитория, если путь имеет вид /home, либо в качестве подстраниц в противном случае.
Роутер /taiga
Принимает вебхуки Taiga в формате JSON, фильтрует только относящиеся к вики. Далее скрипт извлекает тело и название страницы, а также обращается к API Taiga для получения информации об авторе и последнем редакторе страницы. Затем эта информация добавляется в конец страницы, после чего она отправляется в Вики.
Для взаимодействия с другими сервисами используются следующие библиотеки
Для создания очереди страниц используется следующая система
Для сборки сервера потребуется операционная система GNU/Linux
Собранный этим способом архив можно использовать для развертывания webhook-server.
Необходимые программы:
Порядок действий:
git clone https://git.miem.hse.ru/370/page-creator.git
npm install
npm run build
npm prune --production
tar -czf release.tar.gz node_modules dist templates package.json
zip -r release.zip node_modules dist templates package.json
Необходимые программы:
Порядок действий:
git clone https://git.miem.hse.ru/370/page-creator.git
docker build -t webhook-server:latest --target webhook-server -f scripts/Dockerfile .
В репозитории page-creator настроена автоматическая сборка архивов и контейнеров с помощью механизма CI/CD. Сборка и релиз происходят при размещении в репозитории тега вида vX.X.X
Архивы размещаются в хранилище generic package, образы - в container registry. Ссылки на собранные архивы прикрепляются к релизу.
Независимо от способа развертывания, необходимо заранее получить данные для подключения к другим сервисам:
read_api
от аккаунта, имеющего администратитвный доступ. Это необходимо для возможности получения вики-страниц из закрытых репозиториев.vue_admin_template_token
, содержащей в себе JWT-токен.Данный вид развертывания подразумевает запуск скрипта непосредственно на машине, с помощью установленной на ней node.js.
Необходимые программы:
Порядок действий:
.env
со следующим содержимым:WEBHOOK_PORT=<port> # По умолчанию 3000
WIKI_URL=https://wiki.yourdomain.ru/graphql # URL сервиса Wiki
WIKI_TOKEN=<token> # Токен от Wiki
TAIGA_URL=https://taiga.yourdomain.ru # URL сервиса Taiga
TAIGA_LOGIN=<login> # Логин/почта от сервиса Taiga
TAIGA_PASSWORD=<password> # Пароль от сервиса Taiga
# Хост и порт, по которым доступен Redis
REDIS_HOST=<domain> # По умолчанию localhost
REDIS_PORT=<port> # По умолчанию 6379
webhook-server.service
в папке /etc/systemd/system
или /lib/systemd/system
:[Unit]
Description=Webhook Server
After=network.target
[Service]
Type=simple
User=<user>
Group=<group>
ExecStart=/usr/bin/npm run start-server
WorkingDirectory=/path/to/script
[Install]
WantedBy=multi-user.target
, где <user>
и <group>
неоходимо заменить на группу и пользователя от имени которых будет выполняться скрипт.systemctl daemon-reload
systemctl enable --now webhook-server.service
Обновление можно производить только тогда, когда сервер не запущен. Необходимо удалить все содержимое папки со сервером, кроме директории data
и файла .env
. Затем нужно распаковать архив с новой версией сервера в текущую директорию.
Данный вид развертывания подразумевает запуск сервера в контейнере
Необходимые программы:
Порядок действий:
docker login
, используя Deploy Token или Personal Access Token. Подробнее см. справку GitLab Container Registryversion: '3.6'
services:
redis:
image: redis:6.2
ports:
- :6379
volumes:
- redis-data:/data
webhook-server:
image: registry.miem.hse.ru/370/wiki/page-creator/webhook-server:latest
depends_on:
- redis
ports:
# Если в одной сети, созданной docker-compose, запущен и webhook-server,
# и GitLab, и Taiga, то достаточно :3000
- 80:3000
environment:
WEBHOOK_PORT: <port> # По умолчанию 3000
WIKI_URL: https://wiki.yourdomain.ru/graphql # URL сервиса Wiki
WIKI_TOKEN: <token> # Токен от Wiki
TAIGA_URL: https://taiga.yourdomain.ru # URL сервиса Taiga
TAIGA_LOGIN: <login> # Логин/почта от сервиса Taiga
TAIGA_PASSWORD: <password> # Пароль от сервиса Taiga
# Хост и порт, по которым доступен Redis
REDIS_HOST: <domain> # По умолчанию localhost
REDIS_PORT: <port> # По умолчанию 6379
volumes:
redis-data:
Также переменные среды можно вынести в отдельный файл и подгрузить его с помощью директивы env_file
.Обновление можно производить только тогда, когда сервер не запущен. Для обновления достаточно выполнить команду docker compose pull webhook-server
.