Anclas dentro de templates: ¿Cómo reutilizar de código YAML?

Anclas dentro de templates: ¿Cómo reutilizar de código YAML?

¿Cómo se utilizan las anclas (anchors) dentro de los templates de GitLab?

En este punto tenemos en nuestra pipeline una serie de jobs muy similares, estos corresponden a la acción deploy en diferentes stages/environments.

deploy staging website:
    stage: deploy staging
    image: node
    environment:
        name: staging
        url: https://misitioestatico-staging.surge.sh
    when: manual
    allow_failure: false
    only:
        - main
    script:
        - npm i -G yarn
        - yarn global add surge
        - surge --project public --domain $STAGING_DOMAIN

deploy production website:
    stage: deploy production
    image: node
    environment:
        name: production
        url: https://misitioestatico.surge.sh
    when: manual
    allow_failure: false
    only:
        - main
    script:
        - npm i -G yarn
        - yarn global add surge
        - surge --project public --domain $PRODUCTION_DOMAIN

Vamos a simplificar la estructura yaml anterior echando mano de anclas, para ello creamos un template base llamado .deploy_template precedido por un punto.

.deploy_template: &deploy
    image: node
    environment:
        url: https://$DOMAIN
    when: manual
    allow_failure: false
    only:
        - main
    script:
        - npm i -G yarn
        - yarn global add surge
        - surge --project public --domain $CI_ENVIRONMENT_URL

deploy staging website:
    <<: *deploy
    stage: deploy staging
    environment:
        name: staging
    variables:
        DOMAIN: $STAGING_DOMAIN

deploy production website:
    <<: *deploy
    stage: deploy production
    environment:
        name: production
    variables:
        DOMAIN: $PRODUCTION_DOMAIN

Como podemos ver, mediante el uso de templates podemos simplificar la sintaxis de nuestro pipeline cuando este utiliza bloques de código recurrentes a través de los diferentes jobs.