
La implementación continua es algo hermoso. Comprometer su proyecto y ver cómo se construye e implementa sin tener que hacer nada es fascinante.
Y en este artículo, quiero mostrarte cómo hacerlo fácilmente en el proyecto de tu hogar.
Para aclararlo, aquí hay un diagrama de flujo que muestra las diferencias entre Entrega continua y Implementación continua.

Dado que la mayoría de las veces nadie más que usted depende de su proyecto doméstico, optamos por un flujo de trabajo con implementación continua, ya que desea ver sus cambios implementados de inmediato. Si ese no es el caso, puede cambiar el flujo de trabajo más tarde.
Aprenderá sobre lo siguiente:
- Cómo hacer un Dockerfile
- Cómo enviar su proyecto a GitHub
- Crear automáticamente la imagen de la ventana acoplable en Docker Hub
- Descargar y ejecutar automáticamente la imagen con Watchtower
Prerrequisitos:
- Algunos conocimientos sobre Docker y Dockerfile, aunque explicaré algunos de ellos en el camino
- Tener instalado git
- Una cuenta de Docker Hub
- Un servidor (Linux) (ya sea físico o virtual) que ejecute Docker
Como referencia, este es el repositorio de GitHub de ejemplo, y este es el repositorio de Docker Hub de ejemplo que usaré.
Por lo tanto, este tutorial solo será útil si tiene la intención de ejecutar su software con Docker (que recomiendo ya que Docker es fantástico).
¿Por qué utilizar Docker?
Docker le permite tener el mismo entorno para el desarrollo y la producción, lo que elimina los errores Heisenbugs y el problema de "funciona en mi máquina". Además, los contenedores están aislados lo que nos brinda beneficios de seguridad.
Hay más, pero estos dos beneficios hacen que siempre entregue mi software en contenedores Docker.
Configurando su Dockerfile
Primero, crearemos un Dockerfile para el proyecto. Este archivo especial siempre se llama "Dockerfile" sin una extensión y se encuentra en el directorio superior de su proyecto.
Un Dockerfile comienza con la FROM
declaración que le dice a Docker con qué imagen base desea comenzar. Puede imaginar esto como si estuviera usando un lienzo con el fondo ya dibujado y solo falta la parte central (su programa).
La mayoría de las veces, la imagen que desea extraer es la imagen base de su lenguaje de programación, que puede encontrar en el Docker Hub mencionado anteriormente.
A continuación, copiamos nuestros archivos de proyecto en el contenedor de la ventana acoplable con el COPY..
comando. ¿Qué hace esto?
Toma los archivos del primer directorio (el punto se refiere al directorio actual del archivo, que incluye todos los archivos de su proyecto) y los coloca en el directorio actual de su contenedor Docker (recuerde que su contenedor Docker es su propio sistema operativo). Sus archivos están ahora en el directorio base allí, que es posible que desee cambiar.
A continuación, necesitamos instalar las dependencias, que utilizaré python pip
, pero cualquier sistema de gestión de paquetes equivalente, según el idioma que elija, servirá. Lo fundamental que hay que aprender aquí es cómo ejecutar comandos en el contenedor con RUN.
From python:3.7COPY . .RUN pip install -r requirements.txt
Fácil, ¿no? Ahora tenemos que iniciar nuestro programa en el contenedor.
CMD ["python", "./my_script.py"]
La declaración CMD es única. Cada Dockerfile debe tenerlo como última línea porque inicia el proceso principal en el contenedor.
¡Ha terminado su Dockerfile! Ahora puede crear manualmente su imagen y contenedor, pero lo omitiremos por ahora.
Ahora, crearemos nuestro repositorio en GitHub, pero recuerde dejar "Inicializar este repositorio con un README" sin marcar.

Entonces necesitaría copiar la URL remota.

Abra un cmd / shell en el directorio raíz de su proyecto.
Necesita inicializar su repositorio de git, agregar sus archivos, configurar el control remoto, confirmar los archivos y enviar su proyecto a GitHub.
git initgit add *git remote add origin //github.com//.gitgit commit -a -m "Make Dockerfile ready for CD"git push -u origin master
Ahora, su repositorio de GitHub debería verse así:

¡Felicitaciones, estás a medio camino!
El siguiente paso es conectar GitHub a Docker Hub. Para ello, vaya a la configuración de la cuenta.

Desplácese hacia abajo y conecte su host git.

Cree su repositorio en Docker Hub ahora.

Dale un nombre al repositorio y haz clic en el ícono de GitHub (o Bitbucket, si eso es lo tuyo). Ahora elija su organización (generalmente su nombre de usuario) y el nombre de su proyecto. Si desea utilizar su imagen maestra para la compilación y siempre actualizar a la última versión, ahora puede hacer clic en "Crear y compilar" y ver cómo se construye su imagen. De lo contrario, debe editar la configuración de compilación.

¡Últimos pasos! Ahora necesitas Watchtower en tu máquina de destino.
Watchtower es un programa que extrae las imágenes de la ventana acoplable en ejecución y busca actualizaciones. Si hay alguna actualización, apaga elegantemente el contenedor original y crea un contenedor a partir de la nueva imagen con la misma configuración.
¡Lo mejor es que también podemos instalar Watchtower con Docker!
Ingrese lo siguiente en su terminal:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower
¡Entonces necesitas ejecutar el contenedor Docker para tu proyecto!
docker run -d --name /
La opción "-d" hace que su programa se ejecute en segundo plano, por lo que el programa no se apaga si cierra la terminal.
Entonces, para resumir, si envía una confirmación a su repositorio de GitHub, el centro de Docker creará automáticamente una imagen de Docker para usted. Esta imagen luego es extraída por WatchTower y se ejecuta con todas las opciones originales.
Si necesita ayuda en algún momento, no dude en preguntar, estaré feliz de poder ayudar.
Si se trata de un problema técnico, ¡un problema en el proyecto GitHub sería increíble!
Pero ¿qué pasa con las pruebas?
¡Buena pregunta!
Puede utilizar Travis CI para ejecutar sus pruebas al mismo tiempo.
Puede leer sobre esto aquí, pero la esencia es que agrega otro archivo a su repositorio que tiene instrucciones para que un servidor externo ejecute pruebas unitarias o cualquier otra instrucción.
Pero, ¿qué pasa si solo quiero que se compile mi imagen de Docker si pasan las pruebas?Esto rompe un poco nuestro flujo de trabajo.
Ahora ya no podemos confiar en Docker Hub para crear nuestras imágenes. En cambio, también será Travis CI el que produzca la imagen y luego la envíe a su repositorio de Docker Hub. Lea sobre esto aquí.