Как я могу автоматически развернуть мое приложение после нажатия git (GitHub и node.js)?

У меня есть мое приложение (node.js), развернутое на VPS (linux). Я использую концентратор git как репозиторий. Как я могу развернуть приложение автоматически, на git нажмите?

Ответ 1

Пример в PHP:

Перейдите в github в свой репозиторий github, нажмите "Admin"

щелкните вкладку "Крюки службы" = > "URL веб-хоста"

и добавьте

http://your-domain-name/git_test.php

затем создайте git_test.php

<?php 
try
{
  $payload = json_decode($_REQUEST['payload']);
}
catch(Exception $e)
{
  exit(0);
}

//log the request
file_put_contents('logs/github.txt', print_r($payload, TRUE), FILE_APPEND);


if ($payload->ref === 'refs/heads/master')
{
  // path to your site deployment script
  exec('./build.sh');
}

В build.sh вам нужно будет поместить обычные команды для извлечения вашего сайта из github

Ответ 2

Было несколько упоминаний о крюках Git как ответы/комментарии, которые работали для меня в прошлом.. поэтому здесь мой рецепт должен кому-то еще требовать более подробных сведений.

Я использую комбинацию git post-receive hook и node-supervisor, чтобы выполнить простое автоматическое развертывание (если вы используете удаленный репозиторий Git на этом компьютере).


Установите свой почтовый крюк

В вашем репозитории: sudo vi hooks/post-receive

И он должен выглядеть примерно так:

#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f

Установить права доступа к файлам: chmod +x hooks/post-receive

git обновит файлы в каталоге приложения после нажатия на репо.


Запустите Node с помощью Node -Supervisor

Вам потребуется установить Node -Supervisor на свой компьютер в качестве глобального модуля Node: sudo npm install supervisor -g

Теперь просто запустите приложение Node с помощью Node -supervisor и он будет следить за изменениями файлов в вашем рабочем каталоге:

supervisor /home/path/to/your/www/server.js (обратите внимание supervisor вместо node).

Ответ 3

Возможно, очень поздно ответить здесь. Но я нашел этот проект на github и, кажется, делаю то, что вы хотите, но гораздо более чистым способом.

https://github.com/logsol/Github-Auto-Deploy

Проверьте это. Было бы также интересно узнать, что другие думают об этом с точки зрения комментариев и прогнозов.

Cheers,
S

Ответ 4

В проекте, который я сейчас разрабатываю, я следую рекомендациям, изложенным в блестящей книге Jez Humble "Непрерывная доставка" (хорошо стоит прочитать).

Это означает создание конвейера развертывания с использованием какой-либо формы сервера непрерывной интеграции (я использую бесплатную версию сообщества Thoughtworks Go), то есть ответственный за первую проверку кода на качество, сложность и тесты на единичный блок. Затем он может следовать за конвейером развертывания, что приводит к нажатию на ваши рабочие серверы.

Это звучит очень сложно, но не обязательно, и делает весь процесс написания кода, и он превращает его в безопасный и безопасный продукт (без страшных дней выпуска!).

Я использую полный конвейер развертывания для живых систем и сокращенную версию для модулей npm, которые я пишу, и оба используют один и тот же метод развертывания с одним щелчком.

Ответ 5

Я только что опубликовал решение на основе node для вашей проблемы: node-cd

Он состоит из простого приложения node, запущенного на вашем VPS, которое получит Gitub post-receive Hooks и выполнит script, который вам нравится (например оболочка script, которая убьет ваше приложение, git pull и перезагрузите его).

Ответ 6

Вот еще одна простая реализация nodeJS.

Это очень простой сервер node, который запускается на имя хоста и порт, который вы настраиваете, и может быть настроен для обработки веб-крючков GitHub post. И фактические действия pul/test/deploy могут быть настроены так, чтобы делать все, что вы хотите. В текущей реализации это команда оболочки, которая указана в строке на сервере nodeJS script. Кроме того, существует очень простая схема безопасности на основе секретных ключей.

https://github.com/shyam-habarakada/rscds

У моего промежуточного сервера уже был установлен node, поэтому запись этого была быстрой и легкой.

Ответ 7

Я нашел, что проект для простого развертывания использует git.

git-play

Я думаю, что это правильный путь для вас.

Проверьте это.

Ответ 8

Вы можете использовать https://github.com/adnanh/webhook

Ознакомьтесь с вики для подробного описания создания крючков:-)

Ответ 9

Если вы хотите решение на основе python/tornado, я написал script для обработки запросов POST от Github Webhook Services. Вы можете найти его на https://github.com/Akobi/ops/tree/master/autodeploy

В основном он использует конфигурационный файл JSON, чтобы перечислять, какие репозиции вы ожидаете, от каких команд вы хотите запускать при развертывании, и в каком каталоге должны выполняться команды. Все, что вам нужно сделать, это изменить файл конфигурации на ваш любите и запускайте script!

Кроме того, я использую Nginx в качестве обратного прокси для пересылки этих POST на мой script. Вы можете найти конфигурацию Nginx в том же репозитории Github в папке "nginx".

Счастливое нажатие!

Ответ 10

Ответ на PHP вполне оправдан, по моему мнению, но если вы предпочитаете Ruby, я написал сообщение о решении. это то же самое, что и ответ PHP, просто на другом языке. вы используете веб-крючок, и у вас есть простой script прослушивать соответствующие HTTP-запросы.

http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html

Ответ 11

Я создал свой собственный рудиментарный инструмент развертывания, который автоматически вытащил новые обновления из репо - https://github.com/jesalg/SlimJim - В основном он слушает github post-receive-hook и использует прокси-сервер для запуска обновления script.

Ответ 12

Я основатель https://commando.io, и недавно мы объявили о интеграции с GitHub через службу. Интеграция позволяет запускать выполнение на серверах при нажатии на репозиторий GitHub. Это отличная возможность автоматически запускать сценарии развертывания при нажатии кода.

Выполнение - это script, который вы пишете внутри Commando.io, который может быть записан в bash, perl, python, ruby, go или node.js. Чтобы узнать больше и посмотреть пример выполнения script для запуска git pull, см. наше сообщение в блоге: http://blog.commando.io/run-executions-via-github-push/

Ответ 13

Deepl.io кажется новым и перспективным соперником в этом пространстве.

Особенности (взяты с его сайта):

  • Поиск веб-узлов GitLab и GitHub
  • Настройка нескольких репозиториев
  • Настройка нескольких веток в репозитории
  • Используйте свои собственные сценарии развертывания, будь то PHP, shell или оба
  • Отправляет письма с подтверждением

Ответ 14

Также обратите внимание, что там есть бесплатные/недорогие сервисы, такие как REPOMAN.IO, которые автоматизируют почти все это для вас.