🔥 Fundamentos de Gitlab

☆ Variables de entorno predefinidas

Gitlab provee una gran lista de variables predefinidas, la lista de estas variables puede ser consultada en el sitio https://docs.gitlab.com/ee/ci/variables/predefined_variables.html.

Por ejemplo la variable CI_COMMIT_SHORT_SHA provee un identificador único asociado al hash de nuestro commit.

Vamos a abrir el archivo src/pages/index.js y podemos agregar la siguiente línea como parte del cuerpo del componente REact.

<div>Version %%VERSION%%</div>

Para mostrar la versión podemos reemplazar el contenido utilizando el comando sed posterior a la compilación del projecto Gatsby.

build website:
    stage: build
    script:
        - npm i
        - npm i -g gatsby-cli
        - gatsby build
        - sed -i "s/%%VERSION%%/$CI_COMMIT_SHORT_SHA/" ./public/index.html

Al empujar los cambios veremos que en el lugar del texto %%VERSION%% podemos ver el valor del hash del commit.

☆ Tests sobre deployments

Al finalizar el despliegue de una aplicación podemos realizar un test sobre un deployment. Para ello creamos un nuevo stage para este propósito.

stages:
    - build
    - test
    - deploy
    - deployment test

image: node

build website:
    stage: build
    script:
        - npm i
        - npm i -g gatsby-cli
        - gatsby build
        - sed -i "s/%%VERSION%%/$CI_COMMIT_SHORT_SHA/" ./public/index.html
    artifacts:
        paths:
            - ./public

test index:
    stage: test
    script:
        - grep "Gatsby" "./public/index.html"

deploy static website:
    stage: deploy
    script:
        - npm i -g surge
        - surge --project ./public --domain arumals-static.surge.sh

test deployment:
    image: alpine
    stage: deployment test
    script:
        - apk add --no-cache curl
        - curl -s "https://subdominio.surge.sh/" | grep -q "Hi people"
        - curl -s "https://subdominio.surge.sh/" | grep -q "$CI_COMMIT_SHORT_SHA"

Al ejecutar el post deployment usamos la imagen optimizada alpine, instalamos sobre esta curl y verificamos que sobre la url que hemos desplegado sea visible el contenido de la página.