Рубрики
Без рубрики

Непрерывное развертывание сбоя через GitHub Webhooks

Мы собираемся использовать Glitch в качестве бесплатной контейнерной платформы для размещения нашего приложения. А еще лучше, это будет H … Tagged with JavaScript, WebDev, новички, GitHub.

Мы собираемся использовать 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”