Автоматизируйте просто с помощью Webhook
24 марта 2023 г.Вы когда-нибудь хотели запустить произвольный скрипт из любого места с гибкой аутентификацией? Позвольте представить вам веб-перехватчик!
Я покажу вам, как настроить мой блог для автоматического отображения и развертывания каждый раз, когда я нажимаю master
. на экземпляре Gitea.
Установить
Установите Webhook на машине, на которой вы хотите выполнять автоматическое действие.
Загрузите двоичный файл Webhook или создайте его самостоятельно.
$ go get github.com/adnanh/webhook
Конфигурация
Создайте hooks.json
и папку для хранения всего.
$ mkdir webhook && cd webhook
$ touch hooks.json
Внутри hooks.json
скопируйте этот шаблон и обновите расположение скрипта, который вы хотите выполнить.
[
{
"id": "redeploy-blog",
"execute-command": "/home/arran/hugo_websites/redeploy.sh",
"command-working-directory": "/home/arran/",
}
]
Для любопытных, вот что внутри моего redeploy.sh
.
#!/bin/env bash
REPO="${HOME}/hugo_websites/by.arran.nz/"
git -C ${REPO} fetch && git -C ${REPO} rebase
git -C ${REPO} submodule update --remote --rebase
HUGO_CACHEDIR=${HOME}/tmp hugo --cleanDestinationDir --destination /var/www/virtual/${USER}/html --source ${REPO}
Бег
Я размещаю мой блог на Uberspace , а Uberspace использует Supervisor для управления службами.
Если вы не используете Uberspace, запустите Webhook любым доступным способом на своем компьютере.
webhook -hooks hooks.json -logfile out.log -hotreload
Начальник
Чтобы создать новую службу, создайте файл, расположенный по адресу ~/etc/services.d/webook.ini
.
[program:webhook]
directory=%(ENV_HOME)s/webhook
autostart=true
autorestart=true
startretries=3
command=/home/arran/go/bin/webhook -hooks hooks.json -logfile out.log -hotreload
После создания конфигурации попросите супервизора обновить конфигурацию и запустить службу:
$ superviserctl reread
$ superviserctl update
$ supervisorctl status
webhook RUNNING pid 13102, uptime 0:35:37
Дополнительные сведения см. в руководстве супервизора Uberspace.
Uberspace Серверная часть
Если вы используете Uberspace, настройте серверную часть Uberspace. указать порт 80
на Webhook, работающий под портом 9000
. Это по умолчанию.
$ uberspace web backend set arran.uber.space --http --port 9000
Set backend for arran.uber.space/ to port 9000; please make sure something is listening!
You can always check the status of your backend using "uberspace web backend list".
Для получения дополнительной информации ознакомьтесь с Руководством по Uberspace
.Проверка работоспособности
Теперь, когда служба запущена и доступна в Интернете, протестируйте ее.
Учитывая, что веб-перехватчик называется redeploy-blog
, отправьте POST
по адресу:
$ curl -X POST https://arran.uber.space/hooks/redeploy-blog
Убедитесь, что веб-перехватчик прошел успешно, проверив журналы, расположенные в ~/webhook/out.log
, как указано в webhook.ini
.
$ cat out.log
...
[webhook] 2020/11/17 13:24:05 [7f6850] redeploy-blog got matched
[webhook] 2020/11/17 13:24:05 [7f6850] redeploy-blog hook triggered successfully
...
Защитите веб-перехватчик 🔐
<цитата>Примечание. Перед выполнением этого шага обязательно настройте Webhook с https
. отправка ваших секретов через http
!
Возможно, вы заметили, что любой может вызвать этот Webhook. Давайте это исправим.
Git-репозиторий моего блога в настоящее время размещен на Codeberg, который является экземпляром Gitea. Настройте Webhook для чтения secret
из Gitea экземпляр.
Добавьте trigger-rule
в hooks.json
, который мы создали ранее — замените секрет своим собственным.
[
{
"id": "redeploy-blog",
"execute-command": "/home/arran/hugo_websites/redeploy.sh",
"command-working-directory": "/home/arran/",
"trigger-rule":
{
"and":
[
{
"match":
{
"type": "value",
"value": "____GITEA_SECRET____",
"parameter":
{
"source": "payload",
"name": "secret"
}
}
},
{
"match":
{
"type": "value",
"value": "refs/heads/master",
"parameter":
{
"source": "payload",
"name": "ref"
}
}
}
]
}
}
]
Теперь Webhook разрешает выполнение только в том случае, если запрос соответствует триггерному правилу
.
Дополнительные примеры см. в примерах ловушек.
Настройка Gitea
Перейдите к репозиторию вашего экземпляра Gitea Repo > Настройки > Webhooks
, введите URL и секрет, и все готово!
Расслабьтесь
Теперь каждый раз, когда вы отправляете master
в репозиторий Gitea, будет вызываться Webhook. - Еще одна вещь автоматизирована.
Я надеюсь, что вы сможете обобщить эту информацию и добавить Webhook в свой набор инструментов, когда в будущем вам понадобится автоматизировать что-то простое.
Никакой связи с Uberspace или Codeberg — но я могу порекомендуйте их!
Оригинал