Recent Posts

Instalar PyCharm en Ubuntu 16.04

Instalar PyCharm en Ubuntu 16.04

Por cosas que van más allá de la psiquis humana, parece que cuando algo anda mal hace que muchas más cosas salgan mal. La Ley de Murphy se hizo notar (nuevamente) dañando la máquina del lugar donde trabajo. Y he ahí la motivación para hacer […]

Accede rápidamente a una carpeta

Accede rápidamente a una carpeta

Si alguna vez has tenido un folder contenido en millones de otros folders y te gustaría acceder rápidamente a él, los enlaces simbólicos te serán de mucha ayuda. cd ~/my_keys bash: cd: /home/manre/my_keys: No such file or directory ln -s /home/manre/my/folder/hiden/for/security/reasons/my_keys /home/manre/my_keys cd ~/my_keys manre@manre-pc:~/my_keys$ […]

Despliegue automático a Heroku en Jenkins

Despliegue automático a Heroku en Jenkins

En estos días estuve configurando una tarea en Jenkins para realizar despliegue automático a una aplicación en Heroku, comparto a nivel general mis anotaciones.

¿Cómo crear una tarea en Jenkins?

  • Dependiendo de los permisos del usuario, en el dashboard inicial aparecerá la opción “New Item
  • Nombrar la tarea acorde con la actividad
  • Escoger “Freestyle project
  • Ir a “configure

¿Cómo configurar una tarea de Jenkins?

Una tarea en Jenkins de tipo “Freestyle project” se ejecuta teniendo en cuenta el siguiente flujo:

  • General: Define aspectos generales del proyecto
  • Source Code Management: Define dónde se encuentra el proyecto (CVS, Git, etc)
  • Build Triggers: Define qué acción va a hacer que el proyecto que estamos creando se ejecute
  • Build Environment: Define el entorno en el que se ejecutará la tarea
  • Build: Define qué acciones realizar al momento de realizar la ejecución de la tarea, por ejemplo, ejecutar un comando en una linea de comandos
  • Post-build Actions: Define acciones posteriores a la ejecución de la tarea

Para el ejemplo crearemos un flujo configurando algunos aspectos a manera de ejemplo.

General

En esta pestaña añadiremos la opción “discard old builds“, esto nos permitirá eliminar antiguas ejecuciones. Los parámetos para la configuración son:

  • Strategy: Log Rotation
  • Days to keep builds: 30
  • Max # of builds to keep: 10

 

Source Code Management

En esta pestaña configuraremos Git como el repositorio donde se encuentra el código a desplegar:

  • * Repositorio 1:
    • Repository URL: url donde se encuentra el código (github, bitbucket, gitlab, etc)
    • Credentials: Credenciales para el ingreso a este repositorio
  • Repositorio 2:
    • Repository URL: url del repositorio en heroku
    • Credentials: Credenciales para el ingreso a este repositorio

Notas:

  • En nuestro caso tendremos que agregar otro repositorio ya que descargaremos el código de un origen y lo subieremos a otro (heroku), no olvidar añadir el nombre de este nuevo origen.
  • No olvidar que si queremos que las pruebas se ejecuten en una rama en particular, debemos configurar la rama en el parámetro “branches to build”, en nuestro caso, develop

Build Triggers

Queremos que la tarea de Jenkins se ejecute cada vez que existe un cambio en la rama develop de nuestro repositorio, para esto seleccionamos la opción “Build when a change is pushed to BitBucket

Build Environment

Debido a que no tenemos alguna restricción respecto al entorno en el que se ejecutará la tarea de Jenkins, no configuraremos nada en particular en esta sección.

Build

Debido a que en este proyecto necesitamos ejecutar ciertas operaciones particulares en bash, hemos creado un archivo “jenkins.sh” el cual contiene los comandos a ejecutar en la ejecución. Para ejecutar este archivo debemos:

  • Agregar un nuevo paso dando click en el botón “Add build step
  • Adicionar la siguiente para que ejecute el archivo que hemos creado:

bash ./jenkins.sh

Acá un ejemplo de este archivo:

set -e # detiene ejecución al encontrar un error
set -x # imprime los comandos
# Python/Django Stuff
pip install -r requirements.txt
# Environment Variables
export SUPER_SECRET_KEY="i-am-your-father"
# Run the tests
python manage.py test

Post-build Actions

En este paso realizaremos dos acciones:

Despliegue en Heroku

Después de ejecutar las pruebas queremos que se realice el despliegue automático de nuestra aplicación en Heroku, ya que para hacer el despliegue en Heroku tan solo es necesario realizar push a la rama master del proyecto, debemos:

  • Añadir la acción “Git Publisher” en la opción “Add post-build action
  • Habilitar las siguientes opciones:
    • Push Only If Build Succeeds: Esto permitirá que se realice el push siempre y cuando las acciones anteriores hayan sido exitosas
    • Añadiremos un branch con el botón “Add Branch
    • En “branch to push” configuraremos el nombre de la rama donde queremos hacer el push, master
    • En “target remote name” configuraremos el nombre del repositorio remoto, heroku

Notificación a Slack

Por último, queremos que Jenkins nos avise el estado de los builds en slack, para esto:

  • Añadimos la acción “Slack Notifications” en la opción “Add post-build action
  • Y habilitamos:
    • Notify Failure
    • Notify Success

Cualquier duda o comentario es bienvenido!

Diagramas de Arquitectura

Diagramas de Arquitectura

Hace un par de días tuve la necesidad de documentar un diagrama de arquitectura para la empresa donde trabajo y después de buscar un par herramientas, comparto con ustedes las que más me gustaron: CloudCraft Sitio Web: https://cloudcraft.co Ventajas: Gratuito, con espacio de trabajo limitado. Crear […]

Wallpapers – Enero 2018

Wallpapers – Enero 2018

Si eres como yo que disfruta viendo wallpapers de alta calidad, con seguridad te gustarán estas páginas. alpha.wallhaven.cc moviemania.io

¿Cómo montar un disco en OpenELEC?

¿Cómo montar un disco en OpenELEC?

Siempre que instalo OpenELEC tengo que recordar nuevamente cómo montar el disco, después de revisar en un par de blogs se me ocurrió que en lugar de buscar en otros blogs, debería buscar en el mío. Y esa es la razón de este primer post, so… comencemos.

Conectarse por SSH

Si no has cambiado la contraseña, el siguiente comando debería funcionar.

ssh root@192.168.10.1
# password: openelec

Montar Unidad

Primero es necesario crear la carpeta donde se va a montar el disco

mkdir /storage/RASPDATA

Ahora utilizaremos el comando mount, debes cambiar los siguientes parámetros:

  • username
  • password
  • source, para el ejemplo la IP es 192.168.10.1/volume9
  • destination, para el ejemplo /storage/RASPDATA
mount -t cifs -o username=mi-user,password=mi-pass,rw,sec=ntlm //192.168.10.1/volume9 /storage/RASPDATA

Montar unidad al inicio

Si reinicias en este momento, la unidad no quedará montada por defecto por lo que siempre será necesario volver a ejecutar el comando. Para que esto sea automático cada vez que reinicies, deberás:

> cd /storage/.config/
# Crear autostart.sh
> touch autostart.sh
# asignar permisos
> chmod +x autostart.sh
# editar el archivo y agregar
> cat autostart.sh
#!/bin/sh
mount -t cifs -o username=mi-user,password=mi-pass,rw,sec=ntlm //192.168.10.1/volume9 /storage/RASPDATA

Y listo, si reinicias, revisas el directorio y debería aparecer la información del disco.

ls /storage/RASPDATA