У мене є програма (node.js), розгорнута на VPS (linux). Я використовую git hub як сховище. Як я можу розгорнути додаток автоматично, на git push?
У мене є програма (node.js), розгорнута на VPS (linux). Я використовую git hub як сховище. Як я можу розгорнути додаток автоматично, на git push?
Відповіді:
Приклад в 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
Було кілька згадувань про гачки Git як відповіді / коментарі, що працювало у мене в минулому .. тож ось мій рецепт, якщо хтось інший вимагатиме більше конкретики.
Я використовую комбінацію git пост-отримання гачка та супервайзера вузлів, щоб здійснити просте автоматичне розгортання (припускаючи, що ви використовуєте віддалене сховище 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 на вашому комп'ютері як глобальний модуль вузла: sudo npm install supervisor -g
Тепер просто запустіть свою програму вузла за допомогою node-supervisor, і вона буде стежити за змінами у файлах у вашому робочому каталозі:
supervisor /home/path/to/your/www/server.js
(примітка supervisor
замість node
).
npm install -l
на віддаленому сервері, є розумною. Звичайно, це можна поєднати з вашим методом за допомогою гачків після отримання.
Ймовірно, дуже пізно тут робити репондаж. Але я знайшов цей проект на github і, схоже, роблю те, що ти хочеш, але набагато чистішим чином.
https://github.com/logsol/Github-Auto-Deploy
Перевір. Було б також цікаво дізнатись, що думають про це інші з точки зору коментарів та схвальних голосів.
На ура,
С
У проекті, який я зараз розробляю, я дотримуюсь рекомендацій, викладених у блискучій книзі Джеза Хамбла "Безперервна доставка" (що варто прочитати).
Це означає створити конвеєр розгортання з використанням якоїсь форми сервера безперервної інтеграції (я використовую безкоштовну версію спільноти Thoughtworks Go ), яка відповідає за першу перевірку коду на якість, складність та запуск модульних тестів. Потім він може слідувати за конвеєром розгортання, що призведе до переходу на ваші виробничі сервери.
Це звучить дуже складно, але не повинно бути, і робить весь процес написання коду і робить його шлях до виробництва безпечним і безтурботним (без страшних днів випуску!).
Я використовую повний конвеєр розгортання для живих систем і скорочену версію для модулів npm, які я пишу, і обидва мають однакову техніку розгортання в 1 клік.
Я щойно опублікував рішення вашої проблеми на основі вузла : node-cd
Він складається з простої програми-вузла, що працює на вашому VPS, яка отримає Github після отримання хуків і виконає скрипт, який вам подобається (наприклад, скрипт оболонки, який вб’є вашу програму, git тягне і перезапустить її).
Ось ще одна проста реалізація nodeJS.
Це дуже простий сервер вузлів, який працює на імені хосту та порту, які ви налаштовуєте, і може бути налаштований на обробку веб-хуків отримання GitHub. А фактичні дії pul / test / deploy можуть бути налаштовані так, щоб робити все, що завгодно. У поточній реалізації це команда оболонки, яка вказується вбудовано у сценарій сервера nodeJS. Також існує дуже проста схема безпеки на основі секретних ключів.
https://github.com/shyam-habarakada/rscds
На моєму проміжному сервері вже був встановлений і запущений вузол, тому писати це було швидко і просто.
Я виявив, що проект для простого розгортання використовує git.
Я думаю, що це правильний спосіб для вас.
Перевір.
Якщо ви хочете рішення на основі пітона / торнадо, я написав сценарій для обробки запитів POST від служб Webhook Github . Ви можете знайти його на https://github.com/Akobi/ops/tree/master/autodeploy
В основному він використовує файл конфігурації JSON, щоб перерахувати, з яких репозиторіїв ви очікуєте натискань, які команди ви хочете запустити при розгортанні та в якому каталозі повинні виконуватися команди. Все, що вам потрібно буде зробити, це змінити файл конфігурації на свій смак і запустити сценарій!
Крім того, я використовую Nginx як зворотний проксі-сервер для пересилання цих POST до мого сценарію. Ви можете знайти конфігурацію Nginx у тому ж репозиторії Github у папці 'nginx'.
Щасливого натискання!
відповідь PHP, на мій погляд, є цілком правомірною, але якщо ви віддаєте перевагу Ruby, я написав рішення в блозі. це те саме, що відповідь PHP, просто іншою мовою. Ви використовуєте веб-хук, і у вас є простий скрипт для прослуховування відповідних запитів HTTP.
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
Я створив свій власний засіб розгортання, який автоматично витягуватиме нові оновлення з репо - https://github.com/jesalg/SlimJim - В основному він прослуховує github після прийому і використовує проксі для запуску сценарій оновлення.
Я засновник https://commando.io, і нещодавно ми оголосили про інтеграцію з GitHub через сервіс. Інтеграція дозволяє запускати виконання на серверах при переході до репозиторію GitHub. Це чудова можливість для автоматичного запуску сценаріїв розгортання під час натискання коду.
Виконання - це сценарій, який ви пишете всередині Commando.io, і який можна записати на bash, perl, python, ruby, go або node.js. Щоб прочитати більше та побачити приклад виконання сценарію запуску git pull
, див. Наше повідомлення в блозі: http://blog.commando.io/run-executions-via-github-push/
Deepl.io здається новим і перспективним суперником у цьому просторі.
Особливості (взяті з веб-сайту):
Також зверніть увагу, що там є безкоштовні / недорогі послуги, такі як REPOMAN.IO, які автоматизують майже все це для вас.