El video
Algunos enlaces
Todos los videos del curso: http://furycode.com/curso-ruby/
Todos los videos del curso (lista de reproducción en youtube): http://goo.gl/t6D5TV
Ejemplos en Github: https://github.com/Writkas/Curso-de-Ruby
Hace unos días estaba creando una aplicación en Velneo para actualizar otras aplicaciones utilizando GitHub como repositorio para mi fuente y me comentaron acerca de los auto-deploy con GitHub como una funcionalidad para mi aplicación así que me di a la tarea de investigar un poco cuales eran las mejores opciones para hacer funcional esta idea.
Luego de leer mucho, probar y demás... utilizando php, ruby, python, me decidí por NodeJS, ya que tiene una facilidad increible para crear "webserver's" sencillos, asi que es sumamente fácil poner en práctica un auto-deploy con github y sus webhooks utilizando alguna librería. Comenzaré entonces explicando paso a paso como lograr esto.
Debes tener en cuenta que para lograr esto, la máquina o servidor donde deseas hacer el auto-deploy debe tener una ip pública o algún dns para que por medio de los webhooks reciba la petición.
Cual es el funcionamiento de los webhooks? Bueno, cuando hacemos un push a un repositorio en github, este enviará una petición POST a la URL que hayamos configurado. Esta URL se especifica en la configuración del repositorio. Esta petición POST incluira una variable "payload" con información del ultimo commit del repositorio.
Luego de esto entonces nosotros nos encargaremos de ejecutar cualquier acción que deseemos al recibir esta petición, ya sea utilizando NodeJS directamente o algún script .sh
Bueno, comenzaremos con cumplir los requerimientos básicos, aquí probaremos con un servidor Centos, así que comenzaremos con instalar NodeJS y NPM
yum install nodejs npm -y
Con esto instalamos directamente los dos paquetes, y con "-y" aceptamos directamente y así no nos pide confirmación.
Luego tenemos que movernos a la carpeta donde crearemos nuestro script, en este caso la crearemos y nos moveremos dentro para instalar gith, que usaremos para escuchar y recibir el payload.
# Creamos la carpeta
mkdir nodeapp
# Nos movemos a la carpeta creada
cd nodeapp
# Instalamos gith en esta carpeta
npm install gith
# Abrimos un archivo para el contenido de nuestro script
nano script.js
ya que tenemos instalado gith, procedemos a crear nuestro script JS
// Escuchamos en el puerto que deseemos
var gith = require('gith').create( 9001 );
// Importamos execFile, para correr nuestro script de bash
var execFile = require('child_process').execFile;
// Usamos gith
gith({
// Repositorio
repo: 'xploshioOn/autodeploy'
// Le decimos que se ejecute esto cuando se agreguen, eliminen o modifiquen archivos
}).on( 'file:all', function( payload ) {
// Si la rama es la master
if( payload.branch === 'master' )
{
// Ejecutamos nuestro script
execFile('/nodeapp/script.sh', function(error, stdout, stderr) {
// Finalizó sin problemas
console.log( 'script completado' );
});
}
});
Comento la mayoría de las lineas para un mejor entendimiento de este.
Igualmente dejo un enlace a Gith para que puedan tener información completa de la librería.
Luego procedemos a jugar con nuestro script shell
nano /nodeapp/script.sh
#!/bin/bash
# Inicializamos git
git init
# Hacemos pull del repositorio
git pull
Esto teniendo en cuenta que nuestro repositorio haya sido clonado directamente y ya tenga el remote.origin.url bien...
Teniendo esta estructura, podemos agregar mas lineas a nuestro script JS o sh para ejecutar las acciones que creamos convenientes cada vez que se actualice nuestro repositorio en github o se haga un push.
Ahora luego de configurar el webhook en nuestro repositorio a http://nuestroservidor.com:9001, ya tenemos nuestro script que escucha, github que nos enviará una petición y al recibir ejecutará nuestro sh, solo nos queda una cosa por hacer, necesitamos que el script js se ejecute automatcamente y esté escuchando siempre. para eso utilizamos forever.
# Instalar forever globalmente
sudo npm install -g forever
# Inicializamos nuestro script
forever start /nodeapp/script.js
puedes detenerlo con stop apuntando a la misma ruta o ver todos los scripts levantados con list.
En mi aplicación envío correos, para lo cual utilicé nodemailer en mi script node, e igualmente agregué un par de cosillas mas a mi script sh...
Espero les sirva y pues cualquier duda, o algún funcionamiento mas que necesiten, no duden en comentar.
Saludos.
=begin
Programa que lea una cantidad dada de numeros y
que luego diga cual de esos numeros son menores
a 0
=end
=begin
Escribir un programa que lea 5 números por el
teclado y diga, cuál de esos números pertenece
al rango de 3..7
=end
=begin
Pedir un numero al usuario y a partir de ese numero, crear un
array con n elementos (dependiendo del numero que ingreso el
usuario). Luego leer todos los numeros por medio de un bucle
while o until. Y al final mostrarlos en pantalla en una sola
linea.
=end
=begin
Pedir un numero al usuario y a partir de ese numero, crear un
array con n elementos (dependiendo del numero que ingreso el
usuario). Luego almacenar sólo los números pares en un array,
y luego mostrarlos.
=end
=begin
Pedir un numero al usuario y a partir de ese numero, crear un
array con n elementos (dependiendo del numero que ingreso el
usuario). Luego revertir y mostrar el arreglo pero sin utilizar
el método reverse.
=end
=begin
Cree un array con los siguientes elementos:
6, 5, -4, 8
Cree un programa que que tenga un menú de opciones
como el siguiente:
1) Mostrar el primer elemento del arreglo
2) Mostrar el último elemento del arreglo
3) Mostrar si el arreglo esta vacio o no
4) Mostrar la cantidad de elementos del arreglo
5) Ordenar arreglo de forma accendente
6) Ordenar arreglo de forma decendente
7) Remover el último elemento del arreglo
8) Ingresar elemento al final del arreglo
9) Borrar arreglo
Use case y muestre un resultado después de ejecutar
cada opción.
=end
=begin
Pedir al usuario la edad y que el programa
le diga si es: "un bebe", "un niño", "un adulto",
"un adulto mayor". Utilice rangos y case.
=end