/ Python

CI y CD con Django y Jenkins en Heroku

Ejecutar pruebas con Django y desplegar, es el objetivo de esta entrada, hay muchos tutoriales de instalación. En la sección de referencias puede encontrarse algunos artículos y otros manuales para iniciar con Django, Heroku o con Jenkins.

Jenkins se encarga de crear los ambientes necesarios y las dependencias para poder correr aquello que sea necesario para Django. Hay muchos plugins, pero estos en general no son auditados y no tienen una buena reputación.

CI para pruebas

Instalación Inicial

Para hacer instalación inicial y crear el ambiente virtual en el espacio de configuración de jenkins se puede colocar lo siguiente

set -e  # stop on error
set -x  # print commands as they get run
export WORKSPACE=`pwd`
virtualenv -p python3 venv
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py --force-reinstall
pip install -U setuptools

La ejecución continua

Para las ejecuciones subsiguientes

set -e  # stop on error
set -x  # print commands as they get run

export WORKSPACE=`pwd`
source venv/bin/activate
pip install -r requirements.txt

export SECRET_KEY="super_secret_key"

python manage.py test

CD en Heroku

En Heroku de forma predeterminada la rama que permite publicación es master, con lo cual el truco requerido es garantizar que las referencias van a esa rama, en este caso usando una rama cuya fuente es distinta a master.

Primero se configura el repositorio desde donde se descarga, en este caso con la rama development, teniendo en cuenta que también se configura el repositorio de Heroku, en el cual se va a hacer push, allí en advanced se puede definir el nombre herokuy refspec con +refs/heads/*:refs/remotes/heroku/*
configuregitreposjenkins-1

Posteriormente se configura la publicación en Heroku hacia la rama master, en este caso con el nombre que definimos anteriormente heroku para publicar en la rama master.
gitpusherconf

Dudas y sugerencias

Hay otros sistemas de integración continua que pueden ser más rápidos o económicos, tiene algunas recomendaciones o entradas que puedan contar cómo se usan para CI y CD? En comentarios ideal compartirlos.

Referencias