Tenho meu aplicativo (node.js) implantado em um VPS (linux). Estou usando o git hub como repositório. Como posso implantar o aplicativo automaticamente, no git push?
Tenho meu aplicativo (node.js) implantado em um VPS (linux). Estou usando o git hub como repositório. Como posso implantar o aplicativo automaticamente, no git push?
Respostas:
Exemplo em PHP:
Navegue até o github em seu repositório github adicionar clique em "Admin"
clique na guia 'Ganchos de serviço' => 'URLs de WebHook'
e adicione
http://your-domain-name/git_test.php
então crie 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');
}
No build.sh você precisará colocar comandos usuais para recuperar seu site do github
Houve algumas menções de ganchos do Git como respostas / comentários, o que funcionou para mim no passado ... então aqui está minha receita, caso alguém precise de mais detalhes.
Eu uso uma combinação de git post-receive hook e node-supervisor para realizar uma implantação automática simples (supondo que você esteja usando um repositório remoto git nessa máquina).
Configure o seu gancho de pós-recebimento
Em seu repositório: sudo vi hooks/post-receive
E deve ser algo como:
#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f
Definir permissões de arquivo: chmod +x hooks/post-receive
O Git atualizará os arquivos no diretório do seu aplicativo após um envio para o repo.
Executar Nó com Supervisor de Nó
Você precisará instalar o Node-Supervisor em sua máquina como um módulo de nó global: sudo npm install supervisor -g
Agora, simplesmente execute seu aplicativo de nó com supervisor de nó e ele observará as alterações nos arquivos em seu diretório de trabalho:
supervisor /home/path/to/your/www/server.js
(note em supervisor
vez de node
).
npm install -l
no servidor remoto é inteligente. Isso pode, é claro, ser acoplado ao seu método usando ganchos pós-recebimento.
Provavelmente muito tarde para responder aqui. Mas eu encontrei esse projeto no github e parece fazer o que você quer, mas de uma forma muito mais limpa.
https://github.com/logsol/Github-Auto-Deploy
Confira. Também estaria interessado em saber o que os outros pensam sobre isso em termos de comentários e votos positivos.
Saúde,
S
Em um projeto que estou desenvolvendo atualmente, sigo as diretrizes abordadas no brilhante livro "Entrega Contínua" de Jez Humble (vale a pena ler).
Isso significa criar um pipeline de implantação usando alguma forma de servidor de integração contínua (eu uso a edição gratuita da comunidade da Thoughtworks do Go ), que é responsável por primeiro verificar seu código quanto à qualidade, complexidade e executar testes de unidade. Ele pode então seguir um pipeline de implantação, resultando em um envio para seus servidores de produção.
Isso parece muito complicado, mas não precisa ser, e torna todo o processo de escrever código e torná-lo seguro e sem preocupações (sem dias de lançamento assustadores!).
Eu uso um pipeline de implantação completo para sistemas ativos e uma versão reduzida para módulos npm que escrevo, e ambos compartilham a mesma técnica de implantação com um clique.
Acabei de publicar uma solução baseada em nó para o seu problema: node-cd
Consiste em um aplicativo de nó simples executado em seu VPS que receberá Github pós-receber Ganchos e executará um script de sua preferência (por exemplo, um script de shell que matará seu aplicativo, git pull e reiniciá-lo).
Aqui está outra implementação simples de nodeJS.
É um servidor de nó muito simples que é executado em um nome de host e porta que você configura e pode ser configurado para lidar com GitHub pós-recebimento de web hooks. E as ações reais de pul / teste / implantação podem ser personalizadas para fazer o que você quiser. Na implementação atual, é um comando shell especificado sequencialmente no script do servidor nodeJS. E também existe um esquema de segurança baseado em secret_key muito simples.
https://github.com/shyam-habarakada/rscds
Meu servidor de teste já tinha um nó instalado e em execução, portanto, escrever isso foi rápido e fácil.
Achei que o projeto para fácil implantação usa git.
Acho que é a maneira correta para você.
Confira.
Se você quiser uma solução baseada em python / tornado, escrevi um script para lidar com solicitações POST dos serviços de Webhook do Github . Você pode encontrá-lo em https://github.com/Akobi/ops/tree/master/autodeploy
Basicamente, ele usa um arquivo de configuração JSON para listar de quais repositórios você espera envios, quais comandos você deseja executar na implantação e em qual diretório os comandos devem ser executados. Tudo o que você precisa fazer é modificar o arquivo de configuração de acordo com sua preferência e executar o script!
Além disso, uso o Nginx como proxy reverso para encaminhar esses POSTs para o meu script. Você pode encontrar a configuração do Nginx no mesmo repositório Github na pasta 'nginx'.
Feliz empurrando!
a resposta do PHP é totalmente legítima na minha opinião, mas se você preferir Ruby, eu coloquei uma solução no blog. é a mesma coisa que a resposta do PHP, só que em uma linguagem diferente. você usa um web hook e tem um script simples para ouvir as solicitações HTTP relevantes.
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
Eu criei minha própria ferramenta de implantação rudimentar que puxaria automaticamente novas atualizações do repo - https://github.com/jesalg/SlimJim - Basicamente, ela escuta o github post-receive-hook e usa um proxy para acionar um script de atualização.
Sou o fundador da https://commando.io e recentemente anunciamos uma integração com o GitHub por meio de um serviço. A integração permite que você execute execuções em servidores ao enviar para um repositório GitHub. Esta é uma oportunidade perfeita para executar scripts de implantação automaticamente ao enviar código.
Uma execução é um script que você escreve dentro de Commando.io que pode ser escrito em bash, perl, python, ruby, go ou node.js. Para ler mais e ver um exemplo de script de execução em execução git pull
, consulte o anúncio da postagem do nosso blog: http://blog.commando.io/run-executions-via-github-push/
Deepl.io parece ser um candidato novo e promissor neste espaço.
Recursos (retirados de seu site):
Observe também que existem serviços gratuitos / baratos por aí, como REPOMAN.IO, que automatizam quase tudo isso para você.