Saltar al contenido

Los mismos pasos para múltiples entornos con nombre con GitLab CI

Si encuentras algún detalle que no entiendes puedes dejarnos un comentario y trataremos de ayudarte lo mas rápido que podamos.

Solución:

Además de lo que ofreció la respuesta, me gustaría agregar otra forma similar de lograr lo mismo, pero es más flexible en lugar de usar una plantilla y luego fusionarla en una etapa.

Lo que puedes hacer es crear un oculto key también, pero en este formato, por ejemplo,

.login: &login |
  cmd1
  cmd2
  cmd3
  ...

Y luego puede aplicarlo a diferentes etapas usando el ‘*’, el asterisco, como:

deploy:
  stage: deploy
  script:
    - ...
    - *login
    - ...

bake:
  stage: bake
  script:
    - ...
    - *login
    - ...

Y el resultado sería equivalente a:

deploy:
  stage: deploy
  script:
    - ...
    - cmd1
    - cmd2
    - cmd3
    - ...

bake:
  stage: bake
  script:
    - ...
    - cmd1
    - cmd2
    - cmd3
    - ...

Basado en el recurso de: https://gitlab.com/gitlab-org/gitlab-ce/issues/19677#note_13008199

En cuanto a la implementación de la plantilla, está “fusionada”. Según mi propia experiencia, si agrega más secuencias de comandos después de fusionar una plantilla, las secuencias de comandos de la plantilla se sobrescribirán. Y no puede aplicar varias plantillas a la vez. Solo se ejecutarán los últimos scripts de plantilla. Por ejemplo:

.tmp1: &tmp1
  script:
    - a
    - b

.tmp2: &tmp2
  script:
    - c
    - d

job1:
  <<: *tmp1
  <<: *tmp2
  stage: xxx

job2:
  <<: *tmp2
  stage: yyy
  script:
    - e
    - f

El resultado equivalente sería:

job1:
  stage: xxx
  script:
    - c
    - d

job2:
  stage: yyy
  script:
    - e
    - f

Si no está seguro de la corrección de la sintaxis, simplemente copie y pegue su .gitlab.yml contenido del archivo a "CI Lint" para validar. El botón está en la pestaña de Pipelines.

gitlab gitlab-ci yaml

Sí, puedes usar anclas. Si sigo la documentación correctamente, la reescribiría usando un oculto key .XX y luego aplicarlo con <<: *X.

Por ejemplo esto para definir el key:

.job_template: &deploy_definition
    environment:
         url: $CI_ENVIRONMENT_SLUG.mydomain.com
    scripts:
         - deploy $CI_ENVIRONMENT_SLUG

Y luego todos los bloques se pueden escribir usando <<: *job_template. Asumo environment combinará el nombre con la URL predefinida.

deploy_to_test:
   <<: *deploy_definition
    environment:
         name: test

deploy_to_stage:
   <<: *deploy_definition
    environment:
         name: stage

 deploy_to_prod:
   <<: *deploy_definition
    environment:
         name: prod

Sección completa de documentos desde el enlace de arriba:

YAML tiene una característica útil llamada 'anclajes', que le permite duplicar contenido fácilmente en su documento. Las anclas se pueden usar para duplicar/heredar propiedades, y es un ejemplo perfecto para usar con propiedades ocultas. keys para proporcionar plantillas para sus trabajos.

El siguiente ejemplo utiliza anclas y combinación de mapas. Creará dos trabajos, test1 y test2, que heredarán los parámetros de .job_template, cada uno con su propia secuencia de comandos personalizada definida:

.job_template: &job_definition  # Hidden key that defines an anchor named 'job_definition'
  image: ruby:2.1
  services:
    - postgres
    - redis

test1:
  <<: *job_definition           # Merge the contents of the 'job_definition' alias
  script:
    - test1 project

test2:
  <<: *job_definition           # Merge the contents of the 'job_definition' alias
  script:
    - test2 project

& configura el nombre del ancla (job_definition), << significa "combinar el hash dado con el actual", y * incluye el ancla con nombre (job_definition nuevamente). La versión ampliada se ve así:

.job_template:
  image: ruby:2.1
  services:
    - postgres
    - redis

test1:
  image: ruby:2.1
  services:
    - postgres
    - redis
  script:
    - test1 project

test2:
  image: ruby:2.1
  services:
    - postgres
    - redis
  script:
    - test2 project

Por si acaso: Gitlab ofrece (desde 11.3) un extiende palabra clave, que se puede usar para "plantillas" de entradas yaml (hasta donde yo lo entiendo):

Ver el documento oficial

Reseñas y valoraciones del tutorial

Puedes auxiliar nuestra labor mostrando un comentario y dejando una valoración te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *