Мы собираемся использовать Glitch в качестве бесплатной контейнерной платформы для размещения нашего приложения. Еще лучше, это будет иметь постоянное развертывание! Всякий раз, когда мы совершаем наш Мастер
Branch On Github, защищенный веб -крюк будет отправлен в наш проект, который будет обновлять, создавать и перезагрузить себя.
Маршрут, который получает этот веб -крюк, встроен в наше приложение Node.js/Express. Мы будем использовать Glitch’s Hello-Express
Шаблон, чтобы сделать вещи простыми. Внутри маршрута нам нужно запустить наши команды GIT, чтобы получить наши обновленные файлы, а также любые команды сборки и установки.
ПРИМЕЧАНИЕ: Glitch Auto-Restarts Node.js Проекты, работая NPM запускается .
Создайте новый Hello-Express
Проект на глюке и добавьте свой секрет в .env
Файл путем добавления Secret = 'Рандомизированный пароль здесь'
. Есть еще один дополнительный пакет, который может быть установлен с помощью пользовательского интерфейса Glitch Inside Package.json или через консоль с NPM Установка кузова-карника
Анкет
Это Пост
маршрут, наряду с включением дополнительного импорта:
const bodyParser = require('body-parser'); app.use(bodyParser.json()); const crypto = require('crypto'); const { execSync } = require('child_process'); app.post('/git', (req, res) => { const hmac = crypto.createHmac('sha1', process.env.SECRET); const sig = 'sha1=' + hmac.update(JSON.stringify(req.body)).digest('hex'); if (req.headers['x-github-event'] === 'push' && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(req.headers['x-hub-signature']))) { res.sendStatus(200); const commands = ['git fetch origin master', 'git reset --hard origin/master', 'git pull origin master --force', 'npm install', // your build commands here 'refresh']; // fixes glitch ui for (const cmd of commands) { console.log(execSync(cmd).toString()); } console.log('updated with origin/master!'); return; } else { console.log('webhook signature incorrect!'); return res.sendStatus(403); } });
Мы заинтересованы в Push Events, поэтому мы проверяем заголовок. После этого мы выполняем проверку безопасности, создав хэш Hmacsha1 с нашим секретом и телом Webhook, который будет информацией о репозитории от GitHub. GitHub отправляет подпись того же тела, используя наш секрет. Мы сравниваем подпись с Timingsafeequal
Чтобы избежать времени атак. Надеюсь, все в порядке, и они совпадают. В противном случае мы отправим 403
код и пропустите обновление.
Если все хорошо, мы отправим 200
Код обратно в GitHub и запустите наши команды. Мы делаем это синхронно, используя execSync
Поскольку они зависят друг от друга, и мы регистрируем результаты в случае, если есть какие -либо ошибки или информацию, которые нам нужны позже. обновить
это команда среды сбоя, которая сбрасывает пользовательский интерфейс и фиксирует файловое дерево в боковой панели (которая мешала мне около получаса в эти выходные!). Процесс обновления обычно занимает 5-15 секунд для небольших изменений. Ваше приложение не будет доступно в течение этого времени.
Создание GitHub WebHook на самом деле довольно просто, но сначала некоторая подготовка. Вам понадобится репозиторий, по крайней мере, с одним файлом, чтобы глюк мог экспортировать в него. После того, как вы настроите репозиторий, добавьте его в качестве удаленного происхождения через консоль сбоя git remote добавить происхождение {url}
и отправьте свой проект. Это станет Глюч
ответвляться. Создайте запрос на тягу и объедините его до Мастер
Анкет В противном случае, когда зажигает веб -крюк, ваш проект может загрузить неправильный Мастер
Изменения и сбросить себя!
Я видел, как некоторые люди настроили этот процесс, вытащив прямо из Сбой ветвь, но я предпочитаю иметь мастер как производственная версия проекта.
Зайдите в настройки репозитория и создайте новый веб -крючок с секретом вашего проекта Glitch. Обязательно выберите Приложение/JSON
как тип контента. Вот и все. Любой push
События с правильной подписью запустит цикл обновления/установки/перезапуска вашего проекта Glitch 🎉.
Вы можете увидеть, как это выглядит в живом проекте на Репозиторий парного кода Анкет Это легкий клон Codepen, который я написал в университете и в последнее время возился. Глюч помог вернуть его к жизни!
Обратитесь, если у вас есть какие -либо сложные проблемы 👍.
Присоединяйтесь к 150+ человек, подписавшись на мой Информационный бюллетень О программировании и личностном росте!
Я пишу в Твиттере о технологии @Healeycodes Анкет
Оригинал: “https://dev.to/healeycodes/continuous-deployment-to-glitch-via-github-webhooks-3hmh”