En un post anterior, os mostré cómo instalar y desplegar contenedores con docker, usando Gitbucket, como repositorio y Dockerfiles, con comandos ssh.
En este post, os mostraré como desplegarlos, con pipelines.
¿Y qué son los pipelines? En la documentación de jenkins, nos indican lo siguiente:
Jenkins Pipeline (or simply «Pipeline» with a capital «P») is a suite of plugins which supports implementing and integrating continuous delivery pipelines into Jenkins.
A continuous delivery (CD) pipeline is an automated expression of your process for getting software from version control right through to your users and customers. Every change to your software (committed in source control) goes through a complex process on its way to being released. This process involves building the software in a reliable and repeatable manner, as well as progressing the built software (called a «build») through multiple stages of testing and deployment.
Resumiendo, un pipeline es una nueva forma de trabajar en el mundo devops en la integración continua. Utilizando pipeline y Jenkins, podemos definir el ciclo de vida completo de una aplicación (descargar código, compilar, test, desplegar, etc.) mediante código.
Osea, esto.!
Ahora, nos ponemos manos a la obra.
Creamos una nueva tarea, en nuestro Jenkins
Le damos un nombre al job y seleccionamos Pipeline
En esta Pipeline, solo tenemos que configurar los parámetros de la Pipeline, qué es la url del repositorio, usuario, contraseña y el path del script, en este caso, nuestro Jenkinsfile.
Una vez guardado y pulsado en construir ahora, vemos que realiza los pasos indicados en el Jenkinsfile
Todos estos pasos, los veremos ahora, viendo mi Jenkinsfile, para este grupo de 5 contenedores.
El contenido es el siguiente:
Al principio del fichero, le indicamos a Jenkins, el nombre del servidor, ip, usuario, password y que ejecute los comandos en un host remoto.
1º Borra los contenedores actuales:
stage('Borrado de contenedores antiguos')
2º Hace docker login, para descargar la imagen del registry local (Harbor):
stage('Nos logamos en el registry')
3º Clona el repositorio, con todo lo que necesita:
stage('Clona el repositorio de Github')
4º Construye la imagen, usando el Dockerfile del repositorio y descargando la imagen base, de Harbor.
stage('Construye la imagen')
5º Escanea la nueva imagen en busca de vulnerabilidades con Clair
stage('Escaner de vulnerabilidades')
6º Despliega 5 contenedores
stage('Despliega los contenedores x5')
7º Borra el contenido del repositorio local (ahorramos espacio )
stage('Borrado del repositorio git local')
8º Borra la imagen base descargada de Harbor (volvemos con el ahorro de espacio, soy catalán XD)
stage('Borrado de imagen temporal')
El resultado, el que os he mostrado al principio
En portainer, vemos que ya los tenemos construidos y corriendo
Lo mismo nos muestra un docker ps
Y con esto, nos olvidamos de teclear demasiados comandos y automatizar despliegues, centralizando todo en un solo lugar (con esto, los de desarrollo os harán un monumento, como a mí :P)