Vous pouvez réduire la complexité et la configuration en double dans vos fichiers de configuration GitLab CI/CD en utilisant :
- Les ancres (&)
- Les alias (*)
- map merging
- Le mot-clé extends
Si des bouts de code se répète, on peut utiliser les ancres pour éviter les doublons.
Exemple :
.job_template:
image: ruby:2.6
services:
- postgres
- redis
test1:
image: ruby:2.6
services:
- postgres
- redis
script:
- test1 project
test2:
image: ruby:2.6
services:
- postgres
- redis
script:
- test2 project
Devient :
.job_template: &job_configuration # Hidden yaml configuration that defines an anchor named 'job_configuration'
image: ruby:2.6
services:
- postgres
- redis
test1:
<<: *job_configuration # Add the contents of the 'job_configuration' alias
script:
- echo "test 1"
test2:
<<: *job_configuration # Add the contents of the 'job_configuration' alias
script:
- echo "test 2"
.some-script-before: &some-script-before
- echo "Execute this script first"
.some-script: &some-script
- echo "Execute this script second"
- echo "Execute this script too"
.some-script-after: &some-script-after
- echo "Execute this script last"
job1:
tags:
- docker
before_script:
- *some-script-before
script:
- *some-script
- echo "Execute something, for this job only"
after_script:
- *some-script-after
job2:
tags:
- docker
script:
- *some-script-before
- *some-script
- echo "Execute something else, for this job only"
- *some-script-after
Vous pouvez utiliser le mot-clé extends
pour réutiliser la configuration dans plusieurs tâches.
C'est similaire aux ancres YAML, mais plus simple et vous pouvez l'utiliser extends avec includes.
.tests:
rules:
- if: $CI_PIPELINE_SOURCE == "push"
.rspec:
extends: .tests
script: echo "venant de .rspec avec la variable $RSPEC_SUITE"
rspec 1:
tags:
- docker
variables:
RSPEC_SUITE: '1'
extends: .rspec
rspec 2:
variables:
RSPEC_SUITE: '2'
extends: .rspec
tags:
- docker
spinach:
extends: .tests
script: echo "from spinach"
tags:
- docker
Pour réutiliser la configuration de différents fichiers de configuration, combinez extendset include.
Dans l'exemple suivant, le script est défini dans le fichier included.yml. Puis, dans le fichier .gitlab-ci.yml, extends fait référence au contenu du script:
- included.yml
.template:
script:
- echo Hello!
- .gitlab-ci.yml
include: included.yml
useTemplate:
image: alpine
extends: .template
La balise !reference
permet de sélectionner la configuration des mots clés dans d'autres sections de travail et réutilisez-la dans la section actuelle. Contrairement aux ancres YAML , vous pouvez également utiliser !referencedes balises pour réutiliser la configuration des fichiers de configuration inclus.
setup.yml:
.setup:
script:
- echo creating environment
.gitlab-ci.yml :
include:
- local: setup.yml
.teardown:
after_script:
- echo deleting environment
test:
script:
- !reference [.setup, script]
- echo running my own command
after_script:
- !reference [.teardown, after_script]