Как настроить Apache Reverse Proxy для Node.js
Использование Reverse Proxy с Node.js может значительно улучшить управление и... Читать далееОтправка уведомлений из репозитория GitLab одновременно на несколько вебхуков
Скорее-всего вы уже столкнулись с тем, что официальная интеграция "Discord Notifications" в GitLab имеет забавное ограничение на всего один вебхук (канал-назначение, куда будет отправлено уведомление).
Несмотря на уже готовое форматирование и другие плюсы этой интеграции, возможность использовать всего один канал и/или стандартное оформление сообщений подойдет не всем.
Я решил разобраться как реализовать отправку сообщений вручную, и с собственным форматированием. В решении используется обычный CI/CD Pipelines в GitLab и .gitlab-ci.yml
файл, который запускает скрипт для отправки сообщений DIscord с нужными нам параметрами.
- Заходим в
Settings
вашего репозитория и открываем менюCI/CD
. - Разворачиваем блок
Variables
и жмем на кнопкуAdd variable
. - В настройках выбираем
Mask and hidden
, скроллим ниже, вводим название переменной (Key) -WEBHOOK_URL_1
, и вставляем в значение (Value) - URL вашего Discord вебхука №1. Сохраняем нажавAdd variable
.
-
Делаем тоже самое для второго (или третьего, и до бесконечности) вебхука, указав другое название переменной (Key) -
WEBHOOK_URL_2
, и другое значение (Value). Сохраняем нажавAdd variable
. -
Создаем фаил
.gitlab-ci.yml
в корне вашего репозитория со следующим содержимым:
stages:
- notify
notify:
stage: notify
image: alpine:latest
when: always
allow_failure: true
script:
- apk add --no-cache curl jq
- |
for webhook in "$WEBHOOK_URL_1" "$WEBHOOK_URL_2"; do
curl -X POST "$webhook" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg title "$CI_PROJECT_NAME" \
--arg msg "$CI_COMMIT_MESSAGE" \
--arg branch "$CI_COMMIT_REF_NAME" \
--arg commit "$CI_COMMIT_SHORT_SHA" \
--arg url "$CI_PROJECT_URL/-/commit/$CI_COMMIT_SHA" \
--arg repo "$CI_PROJECT_PATH" \
--arg user "$GITLAB_USER_NAME" \
--arg user_login "$GITLAB_USER_LOGIN" \
--arg user_avatar "$GITLAB_USER_AVATAR_URL" \
--arg profile_url "$CI_SERVER_URL/$GITLAB_USER_LOGIN" \
'{
embeds: [{
title: $title,
description: $msg,
color: 3066993,
fields: [
{ name: "Branch", value: $branch, inline: true },
{ name: "Commit", value: "[\($commit)](\($url))", inline: true },
{ name: "Author", value: "[\($user)](\($profile_url))", inline: true }
],
thumbnail: { url: $user_avatar },
footer: { text: $repo }
}]
}')"
done
- Заливаем только что добавленный файл в удаленный репозиторий.
- Ждем выполнения CI/CD pipeline, что обычно занимает чуть менее одной минуты.
- Смотрим результат. Если вы выполнили все правильно, то в выбранный канал Discord придет уведомление.
Примечание: если вы хотите добавить больше чем 2 вебхука чтобы отправлять в еще больше каналов, измените следующую строку:
for webhook in "$WEBHOOK_URL_1" "$WEBHOOK_URL_2" "$WEBHOOK_URL_3"; do
Остальные параметры отображения можно настроить под себя. Для этого советую взглянуть на официальную документацию по стилизации вебхук сообщений. Для ленивых, можно воспользоваться визуальным редактором Embed сообщений по этой ссылке.
Похожие публикации
Пароль для Bitbucket при клонировании репозитория
Предположим у вас уже есть репозиторий в Bitbucket и вам нужно клонировать его... Читать далееError: listen EACCES: permission denied
Если вы наткнулись на ошибку такого рода при запуске вашего NodeJS... Читать далее