Как я могу автоматически развернуть свое приложение после git push (GitHub и node.js)? - PullRequest
92 голосов
/ 03 февраля 2012

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

Ответы [ 13 ]

63 голосов
/ 05 февраля 2012

Пример в PHP:

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

нажмите вкладку «Сервисные хуки» => «URL-адреса WebHook»

и добавьте

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

23 голосов
/ 12 марта 2012

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

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


Настройте ваш хук после получения

В вашем хранилище: 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-Supervisor

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

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

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

18 голосов
/ 21 марта 2013

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

Приветствия,
S

8 голосов
/ 01 августа 2012

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

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

8 голосов
/ 03 февраля 2012

В проекте, который я сейчас разрабатываю, я следую указаниям, изложенным в блестящей книге Джеза Хамбла «Непрерывная доставка» (которую стоит прочитать).

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

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

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

3 голосов
/ 05 апреля 2013

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

git-play

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

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

3 голосов
/ 08 октября 2012

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

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

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

На моем промежуточном сервере уже был установлен и запущен узел, поэтому его написание было быстрым и простым.

2 голосов
/ 18 мая 2014

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

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

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

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

1 голос
/ 10 ноября 2015

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

1 голос
/ 01 июля 2015

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

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

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