Crear una imagen de Docker para GitLab: ¿Cómo hacerlo?

Crear una imagen de Docker para GitLab: ¿Cómo hacerlo?

¿Qué es Docker?

Docker es una tecnología basada en contenedores para proveer virtualización. Imaginemos por ejemplo que tenemos que instalar una aplicación como nodejs pero no deseamos realizar dicha instalación dentro de nuestro sistema operativo. Para esto Docker provee imágenes que pueden ser descargadas y utilizadas inmediatamente. Al ejecutar nuestra maquina virtual podemos personalizar las herramientas y paquetes que necesitamos.

Creación de nuestra pipeline

Empezamos creando nuestro archivo .gitlab-ci.yml en donde vamos a definir nuestras stages.

build website:
    script:
        - npm i
        - npm i -g gatsby-cli
        - gatsby build

Guardamos los cambios y empujamos a GitLab.

git add .gitlab-ci.yml
git commit -m "Agregada la configuración de la pipeline"

En este momento veremos que empieza a ejecutarse el job dentro de la pipeline de nuestro proyecto en GitLab. También veremos que se ejecuta un error dentro de la ejecución.

Command npm not found.

GitLab por default utiliza una imagen de Docker para ruby que no dispone del paquete npm, pero GitLab también nos permite especificar una imagen alternativa.

Cambiamos nuestro código para utilizar la imagen de Docker llamada node.

build website:
    image: node
    script:
        - npm i
        - npm i -g gatsby-cli
        - gatsby build

Volvemos a empujar nuestros cambios, ahora veremos que se ejecutan todos los pasos correctamente y al final el mensaje.

Job succeeded

Para validar los archivos compilados podemos definir nuestros artifacts que en este caso sería todo el directorio public.

build website:
    image: node
    script:
        - npm i
        - npm i -g gatsby-cli
        - gatsby build
    artifacts:
        paths:
            - ./public

Empujamos los cambios, esperamos a que se vuelva a completar el job en la pipeline y descargamos el artifact. El zip contendrá todo el directorio public con los archivos compilados por Gatsby.