У меня есть мое приложение (node.js), развернутое на VPS (linux). Я использую концентратор git как репозиторий. Как я могу развернуть приложение автоматически, на git нажмите?
Как я могу автоматически развернуть мое приложение после нажатия git (GitHub и node.js)?
Ответ 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.
Я думаю, что это правильный путь для вас.
Проверьте это.
Ответ 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, которые автоматизируют почти все это для вас.