¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Git
  3. Git en implementación continua
Extrait - Git Controle la gestión de sus versiones (conceptos, utilización y casos prácticos) (2a edicion)
Extractos del libro
Git Controle la gestión de sus versiones (conceptos, utilización y casos prácticos) (2a edicion) Volver a la página de compra del libro

Git en implementación continua

Objetivos del capítulo

El propósito de este capítulo es servir como una introducción a la configuración de una implementación continua automatizada solo con Git. Para abordar de manera seria y completa el despliegue continuo se requeriría un libro completo, si no más. Ésta es la razón por la que este capítulo se centrará en un ejemplo sencillo de implementación.

Este capítulo explicará paso a paso la implementación de un proyecto codificado en Python/ Django en un alojamiento online. Los conceptos básicos del desarrollo en Django se explicarán a lo largo del proyecto para mejorar la comprensión del capítulo, el propósito de estas explicaciones es comprender el proyecto y los elementos necesarios para configurar la implementación continua.

El proyecto de ejemplo se puede encontrar en el repositorio de GitHub accesible en la siguiente URL: https://github.com/SamuelDauzon/ci-git-only

El proyecto

Un joven estudiante, Elías, quiere escribir artículos sobre desarrollo informático. Le gustaría crear un proyecto muy simple que le permitiera tener visibilidad en línea. Para eso, decide crear un blog en Django. Siendo más un desarrollador que un administrador de sistemas, a Elías no le gustan las implementaciones y quiere automatizar este paso tanto como sea posible usando Git.

El proyecto del capítulo será un proyecto deliberadamente simple, la idea no es desarrollar un proyecto complejo, sino explicar la implementación de la implementación continua automatizada con Git. El proyecto implementado es un blog personal cuyas funcionalidades son:

  • lectura de artículos,

  • sistema de paginación para mostrar la lista de artículos,

  • sistema WYSIWYG para la edición de los artículos,

  • sistema de categorías que permite filtrar los artículos.

Inicialmente, las funcionalidades esenciales se agregarán al proyecto y se implementarán en un alojamiento en línea. Luego, las funcionalidades adicionales serán desarrolladas, versionadas en Git y desplegadas de forma automatizada gracias a Git.

Presentación de Django

Django es un framework web gratuito desarrollado en Python. Su lema refleja a la perfección la filosofía del framework: "El framework web para perfeccionistas bajo presión" (The Web framework for perfectionists with deadlines). El framework fue creado en 2003 para el periódico local de Lawrence (Estados Unidos - Kansas). Fue lanzado bajo la licencia libre BSD en julio de 2005.

Django ofrece muchas herramientas para facilitar, hacer confiable y acelerar el desarrollo de sitios web. Es posible citar por ejemplo:

  • un sistema de migración automatizado basado en modelos compatibles con múltiples SGBD (PostgreSQL, SQLite, MySQL, etc.),

  • un sistema de herencia de plantillas con posibilidad de sobrecarga,

  • una interfaz de administración fácilmente configurable y personalizable,

  • varios sistemas para crear formularios basados en los modelos extensibles que permiten automatizar operaciones como la visualización del formulario HTML, la validación del formulario, el registro de datos en la base de datos, etc.

A diferencia de otros frameworks (como Symfony u otros), Django ofrece poca generación automática de código. De hecho, las herramientas de generación automática de código facilitan el desarrollo de funcionalidades, pero complican significativamente el mantenimiento del proyecto. Para hacer esto, Django está diseñado para hacer...

Desarrollo de la versión inicial

Esta parte mostrará paso a paso el desarrollo del proyecto y su versionado en Git.

1. Instalación

Para usar Django, necesita instalar Python. Este capítulo se escribió utilizando la versión 3.7 del lenguaje. Para Windows y Mac OS, puede encontrar los ejecutables de instalación en la siguiente dirección: https://www.python.org/downloads/release/python-370/

Para distribuciones de Linux basadas en Debian, es posible usar el comando:

apt-get install python3.7 

Para iniciar el intérprete de Python 3.7 en Mac OS y Linux, use el comando:

python3 

En Windows, use el siguiente comando:

py 

Antes de instalar Django, es mejor crear un entorno virtual Python. Este tipo de entorno se utiliza para aislar bibliotecas de Python. Por lo tanto, las bibliotecas instaladas en un entorno virtual no tendrán ningún impacto en el entorno Python del sistema o en otro entorno virtual.

En primer lugar, debe crear la carpeta del proyecto:

mkdir simpleblog 

Luego, debe crear el entorno virtual en la carpeta del proyecto:

cd simpleblog 

Para Linux y Mac OS:

python3 -m venv venv_simpleblog 

Para Windows:

py -m venv venv_simpleblog 

Luego, para utilizar el entorno virtual, es necesario activarlo. En Mac OS y Linux, debe usar el comando:

source venv_simpleblog/bin/activate 

En Windows, debe usar el comando:

venv_simpleblog/Scripts/activate 

Una vez activado el entorno virtual, es posible ejecutar el intérprete de Python 3.7 de la misma forma en Linux, Mac OS y Windows con el comando:

python 

2. Creación del proyecto

El primer paso de desarrollo será la creación del proyecto Django, la inicialización del repositorio Git, la escritura del archivo .gitignore adaptado a la tecnología así como la creación de la rama develop.

a. Creación del proyecto Django

Para comenzar a desarrollar un proyecto de Django, necesita crear un nuevo proyecto. Para hacer esto, primero debe instalar Django en el entorno virtual. Para ello, debe utilizar el administrador de paquetes Pip (presente por defecto desde Python 3.4):

pip install django 

Para crear el proyecto Django, vaya a la carpeta simpleblog y use el siguiente comando:

django-admin startproject simpleblog 

Una vez hecho esto, el comando ls debería mostrar las carpetas: simpleblog y venv_simpleblog.

Este comando creó una carpeta simpleblog en la que hay otra carpeta...

Implementación inicial

Elías cree que ha desarrollado suficientes funciones para implementar una primera versión. Para la implementación, tiene la intención de utilizar los servicios ofrecidos por el host Webfaction. Este host le permite instalar proyectos de Django sin tener que encargarse del mantenimiento de los servidores de aplicaciones (Apache, PostgreSQL, etc.).

Los precios de los servicios de Webfaction son los siguientes:

images/s13e01.png

Elías selecciona la opción 2, que le permite beneficiarse de un sistema (virtual) dedicado.

1. Configuración de los identificadores SSH

Después de solicitar su alojamiento, se conecta a la interfaz de administración para recuperar sus credenciales SSH. Para ello, se conecta a la página https://my.webfaction.com. Una vez conectado, sigue los menús Account y luego Services. Esta página muestra los servidores a los que tiene acceso, la dirección IP de cada servidor está escrita en una línea. En ocasiones, es necesario esperar varios minutos para acceder a la página y que el servidor se muestre correctamente.

Para configurar su identificador SSH, sigue los menús de usuarios de Account y luego SSH/SFTP. Un usuario debe estar en la lista, de lo contrario es necesario crear uno nuevo. Desde esta interfaz, es posible crear nuevos usuarios con contraseñas, o modificar la contraseña del usuario principal del servidor. Para simplificar su primer despliegue, Elías opta por utilizar el usuario principal del servidor.

2. Creación de un sitio web Webfaction

Una vez conectado a la interfaz de administración de Webfaction, haga clic en el enlace del menú Domains/websites y luego websites. Este enlace proporciona acceso a la lista de sitios web adjuntos a la cuenta de usuario. Luego debe hacer clic en el botón Add new website. Luego debe completar el formulario con el nombre interno del sitio web (aquí: simpleblogsite), así como el nombre de host que se utilizará para el sitio web (si aún no se ha declarado en Webfaction, se mostrará una ventana para agregar lo).

images/s13e02.png

Elías asegura que los DNS de los nombres de dominio utilizados se dirigen a los servidores DNS de Webfaction.

3. Creación de las aplicaciones Webfaction

En el formulario de creación del sitio web, es posible crear una aplicación Webfaction. Para...

Implementación automatizada

Una vez completada la implementación inicial, Elías podrá poner en práctica su implementación automatizada. Él ya ha comenzado configurando la opción receive.denyCurrentBranch de su repositorio que le permite actualizar el directorio de trabajo con cada push. El siguiente paso será el desarrollo de un hook Git realizando las siguientes acciones:

  • instalación de las bibliotecas gestionadas por Pip,

  • ejecución de las migraciones,

  • sincronización de archivos estáticos,

  • reiniciar Apache.

Cuando Elías haya automatizado estas cuatro acciones, podrá generar la gran mayoría de sus futuras implementaciones.

1. Desarrollo de hook en el repositorio

Para iniciar esta nueva funcionalidad, Elías primero debe volver a la rama develop y luego crear una nueva rama usando los siguientes comandos:

git co develop  
git checkout -b f-hook-production 

Elías pretende versionar los hooks de su proyecto. Para hacer esto, crea una carpeta productionHooks en la raíz de su proyecto local:

mkdir productionHooks 

Estos hooks solo se reservarán para el servidor de producción, de ahí el nombre de la carpeta productionHooks. Para hooks de tipo de desarrollo más generales, la forma más común de compartirlos es ponerlos en una carpeta hooks en la raíz del proyecto.

Para programar el hook, hace un archivo...

Funcionalidad: campo WYSIWYG para el artículo

Por ahora, para publicar un artículo en HTML, Elías tenía que crear su contenido HTML en un editor de su elección, copiar el código HTML y pegarlo en su interfaz de administración. Esto no es práctico, sería más eficiente si un WYSIWYG (What You See Is What You Get; en otras palabras, el editor muestra el resultado final del código HTML) se integrara en la administración.

1. Desarrollo

Para iniciar la funcionalidad de editar fácilmente el contenido de un artículo, Elías primero crea la siguiente rama usando este comando:

git checkout -b f-article-admin-editor 

Para desarrollar eficazmente esta funcionalidad, Elías encontró una biblioteca que se puede integrar en Django y que utiliza el editor WYSIWYG summernote. Antes de elegir una biblioteca, Elías comprueba ciertos puntos para asegurarse de que la solución ofrece una cierta durabilidad:

  • El proyecto está publicado bajo una licencia MIT, por lo que se puede utilizar incluso para proyectos comerciales.

  • El proyecto tiene 533 estrellas (equivalente a un «me gusta»), lo que es tranquilizador para un proyecto específico como este.

  • El proyecto cuenta con 48 colaboradores, lo que es reconfortante en el caso hipotético de la marcha del propietario del proyecto.

  • El último commit fue hace tres semanas, lo que indica que la biblioteca se ha mantenido recientemente.

A partir de esta información, Elías optó por integrar esta biblioteca en su proyecto. La elección de una biblioteca no debe basarse en valores absolutos. De hecho, diferentes tipos de bibliotecas no tendrán la misma popularidad, pero pueden ser igual de duraderas. Por ejemplo, la popularidad de un wrapper OpenSSL no se puede comparar...