Tengo mi aplicación (node.js) implementada en un VPS (linux). Estoy usando git hub como repositorio. ¿Cómo puedo implementar la aplicación automáticamente en git push?
Tengo mi aplicación (node.js) implementada en un VPS (linux). Estoy usando git hub como repositorio. ¿Cómo puedo implementar la aplicación automáticamente en git push?
Respuestas:
Ejemplo en PHP:
Navegue a github en su repositorio de github agregue haga clic en "Admin"
haga clic en la pestaña 'Ganchos de servicio' => 'URL de WebHook'
y añadir
http://your-domain-name/git_test.php
luego crea 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');
}
En build.sh, deberá poner los comandos habituales para recuperar su sitio de github
Hubo algunas menciones de ganchos de Git como respuestas / comentarios, lo que me ha funcionado en el pasado ... así que aquí está mi receta en caso de que alguien más requiera más detalles.
Utilizo una combinación del gancho posterior a la recepción de git y el supervisor de nodo para lograr una implementación automática simple (asumiendo que estás usando un repositorio remoto de git en esa máquina).
Configure su gancho posterior a la recepción
En tu repositorio: sudo vi hooks/post-receive
Y debería verse algo como:
#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f
Establecer permisos de archivo: chmod +x hooks/post-receive
Git actualizará los archivos en el directorio de su aplicación después de un empujón al repositorio.
Ejecute Node con Node-Supervisor
Deberá instalar Node-Supervisor en su máquina como un módulo de nodo global: sudo npm install supervisor -g
Ahora simplemente ejecute su aplicación de nodo con node-supervisor y observará los cambios en los archivos en su directorio de trabajo:
supervisor /home/path/to/your/www/server.js
(nota en supervisor
lugar de node
).
npm install -l
en el servidor remoto es inteligente. Por supuesto, esto se puede combinar con su método mediante ganchos posteriores a la recepción.
Probablemente sea muy tarde para responder aquí. Pero encontré este proyecto en github y parece hacer lo que quieres pero de una manera mucho más limpia.
https://github.com/logsol/Github-Auto-Deploy
Echale un vistazo. También estaría interesado en saber qué piensan los demás de esto en términos de comentarios y votos a favor.
Saludos,
S
En un proyecto que estoy desarrollando actualmente sigo las pautas cubiertas en el brillante libro de Jez Humble "Continuous Delivery" (vale la pena leerlo).
Esto significa crear una canalización de implementación utilizando algún tipo de servidor de integración continua (yo uso la edición comunitaria gratuita de Thoughtworks de Go ), que es responsable de verificar primero la calidad, complejidad y ejecución de pruebas unitarias de su código. Luego, puede seguir una canalización de implementación que resulte en un impulso a sus servidores de producción.
Esto suena muy complicado, pero no tiene por qué serlo, y hace que todo el proceso de escritura de código y su entrada en producción sea segura y sin preocupaciones (¡sin días de lanzamiento de miedo!).
Utilizo una canalización de implementación completa para sistemas en vivo y una versión reducida para los módulos npm que escribo, y ambos comparten la misma técnica de implementación con 1 clic.
Acabo de publicar una solución basada en nodos para su problema: node-cd
Consiste en una aplicación de nodo simple que se ejecuta en su VPS que recibirá los Hooks posteriores a la recepción de Github y ejecutará el script que desee (por ejemplo, un script de shell que matará su aplicación, git pull y la reiniciará).
Aquí hay otra implementación simple de nodeJS.
Es un servidor de nodo muy simple que se ejecuta en un nombre de host y un puerto que configura y puede configurarse para manejar los enlaces web de recepción de publicaciones de GitHub. Y las acciones reales de pul / prueba / implementación se pueden personalizar para hacer lo que desee. En la implementación actual, es un comando de shell que se especifica en línea en el script del servidor nodeJS. Y también existe un esquema de seguridad basado en claves secretas muy simple.
https://github.com/shyam-habarakada/rscds
Mi servidor de ensayo ya tenía un nodo instalado y en ejecución, por lo que escribir esto fue rápido y fácil.
Encontré que el proyecto para una implementación fácil usa git.
Creo que es la forma adecuada para ti.
Echale un vistazo.
Si desea una solución basada en python / tornado, escribí un script para manejar las solicitudes POST de los servicios Webhook de Github . Puede encontrarlo en https://github.com/Akobi/ops/tree/master/autodeploy
Básicamente, usa un archivo de configuración JSON para enumerar los repositorios de los que espera que se envíen, los comandos que desea ejecutar en la implementación y en qué directorio deben ejecutarse los comandos. Todo lo que tendría que hacer es modificar el archivo de configuración a su gusto y ejecutar ¡la secuencia de comandos!
Además, uso Nginx como proxy inverso para reenviar estos POST a mi script. Puede encontrar la configuración de Nginx en el mismo repositorio de Github en la carpeta 'nginx'.
¡Feliz empuje!
la respuesta de PHP es totalmente legítima en mi opinión, pero si prefieres Ruby, escribí una solución en un blog. es lo mismo que la respuesta de PHP, solo que en un idioma diferente. utiliza un enlace web y tiene un script simple que escucha las solicitudes HTTP relevantes.
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
Creé mi propia herramienta de implementación rudimentaria que automáticamente extraería nuevas actualizaciones del repositorio - https://github.com/jesalg/SlimJim - Básicamente escucha el post-receive-hook de github y usa un proxy para activar un actualizar el script.
Soy el fundador de https://commando.io y recientemente anunciamos una integración con GitHub a través de un servicio. La integración le permite ejecutar ejecuciones en servidores cuando empuja a un repositorio de GitHub. Esta es una oportunidad perfecta para ejecutar scripts de implementación automáticamente cuando inserta código.
Una ejecución es un script que escribe dentro de Commando.io que se puede escribir en bash, perl, python, ruby, go o node.js. Para leer más y ver un script de ejecución de ejemplo de ejecución git pull
, consulte el anuncio de nuestra publicación en el blog: http://blog.commando.io/run-executions-via-github-push/
Deepl.io parece ser un competidor nuevo y prometedor en este espacio.
Características (tomadas de su sitio web):
También tenga en cuenta que existen servicios gratuitos / económicos como REPOMAN.IO que automatizan casi todo esto por usted.