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.