Skip to content

Instantly share code, notes, and snippets.

@fastcodecoq
Last active June 18, 2024 22:03
Show Gist options
  • Save fastcodecoq/ee6c970169f490123280 to your computer and use it in GitHub Desktop.
Save fastcodecoq/ee6c970169f490123280 to your computer and use it in GitHub Desktop.
Con este código vamos a hacer un autodespliegue de Código desde Github, cuando halla un PUSH a un repositorio.

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