🥇 Variables

Ya hemos utilizado variables en lecciones pasadas, cuando creamos las credenciales SURGE_LOGIN y SURGE_TOKEN. Sin embargo también existen variables a nivel de nuestro archivo yaml.

En nuestra configuración actual hemos definido dos dominios, uno para staging (arumals-staging-static.surge.sh) y otro para producción (arumals-static.surge.sh).

Creamos nuestro bloque con variables enseguida de cache.

cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
        - node_modules/

variables:
    STAGING_DOMAIN: dominio-staging-static.surge.sh
    PRODUCTION_DOMAIN: dominio-static.surge.sh

Ahora podemos reemplazar los lugares en donde estos dominios están referenciados.

deploy staging:
    ...
    environment:
        name: staging
        url: https://$STAGING_DOMAIN
   ...

deploy production:
    ...
    environment:
        name: production
        url: https://$PRODUCTION_DOMAIN
    script:
        ...
        - surge --project ./public --domain $PRODUCTION_DOMAIN

test deployment:
    ...
    script:
        ...
        - curl -s "https://$PRODUCTION_DOMAIN/" | grep -q "Hi people"
        - curl -s "https://$PRODUCTION_DOMAIN/" | grep -q "$CI_COMMIT_SHORT_SHA"

Cuando volvamos a empujar los cambios podremos ver que nuestro despliegue funciona reemplazando las variables por su respectivo valor.

$ surge --project ./public --domain $STAGING_DOMAIN
   Running as ##@gmail.com (Student)
        project: ./public
         domain: dominio-static.surge.sh
     encryption: *.surge.sh, surge.sh (124 days)
             IP: ###.###.###.###

Las variables permiten almacenar valores que después son reutilizados a través de la configuración de nuestro archivo .gitlab-ci.yml. Esto simplifica su mantenimiento ya que en caso de realizar actualizaciones, solo requerimos hacerlas sobre el valor de la variable y este se propagara a todos los lugres donde esta se utilice.