Skip to content

Instantly share code, notes, and snippets.

@djom202
Forked from SOLUNTECH/AUTODEPLOY.md
Last active August 29, 2015 14:13
Show Gist options
  • Save djom202/9913a9dccbf05704d209 to your computer and use it in GitHub Desktop.
Save djom202/9913a9dccbf05704d209 to your computer and use it in GitHub Desktop.

Gomosoft

AUTO DESPLIEGUE DE CODIGO DESDE GITHUB

Con este pequeño código haremos un autodespliegue de nuestro repositorio en nuestro servidor. Debemos tener instalando Node.js con Npm (Instalar nodejs y npm), también es necesario GIT (Instalar Git) previamente. Luego podemos seguir con las instruciones.

Instruciones:

  1. copia todos los archivos en la carpeta de tu app, excepto "gitpull.sh", trata de salvar este ultimo en una ruta superior a la de tu directorio público.

  2. en la carpeta donde has copiado todos los archivos, haz que npm instale todos los paquetes:

$ npm install

  1. ahora inicia el servicio:

$ npm start

  1. Ves a las configuraciones de tu repositorio en Github, entra a WebHooks, y agrega un nuevo webhook, en este debes ingresar la url que apunte a tu app (teniendo en cuenta que no usamos proxy, entonces podemos asumir que la URL sería algo como http://tudominio.com:8080/api/git). En type seleccionemos la opción "application/x-www-form-urlencoded".

  2. Clona tu repositorio en el servidor ej:

$ git clone https://github.com/user/repo.git

Nota: usa la ruta donde clonaste tu repo en gitpull.sh, ten en cuenta que debe ser relativa a la ubicación de gitpull.sh

  1. Salva en el servidor las credenciales de tu cuenta de github con permisos al repositorio:

$ git config credential.helper store

  1. ahora solo debes hacer un PUSH a tu repo master, y verás como los cambios se verán reflejados en tu servidor.
#!/bin/bash
cd ruta/donde/clonaste/el/repositorio
git pull
forever restart main.js
#salva este archivo en un ruta superior a tu directorio publico
var restify = require('restify');
var server = restify.createServer({
name: 'gitPullTest',
});
server.use(restify.urlEncodedBodyParser({
mapParams: true
}));
server.use(restify.queryParser());
server.use(restify.gzipResponse());
//soporte de crossdomain
server.pre(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
});
function gitPull(req, res, next){
var POST = (req.body instanceof Object) ? req.body : req.params;
var exec = require('child_process').exec;
if(POST.payload)
// trata de que tu gitpull .sh quede en un directorio superior al publico y dale permisos de ejecución
exec('/ruta/a/gitpull.sh', function( err, stdout, stderr ) {
if(!err)
{
res.send(200,{response:{stdout : stdout}, message : "ok"});
return;
}
console.log(err,stdout, stderr);
res.send(500, {stderr : stdout} );
});
}
server.post('/api/git', gitPull);
server.listen(8080);
console.log('Hoorra puerto 8080');
{
"name" : "gitPullTest",
"version" : "0.0.1b",
"main" : "main.js",
"description" : "Auto Despliegue de codigo desde github",
"repository": {
"type": "git",
"url": "https://github.com/SOLUNTECH/cyz.git"
},
"dependencies" : {
"restify" : "latest",
"forever" : "latest",
"body-parser" : "latest"
},
"scripts" : {
"start" : "forever start main.js",
"restart" : "forever restart main.js",
"stop" : "forever stop main.js",
"test" : "node main.js",
"dev" : "forever main.js"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment