Skip to content

Latest commit

 

History

History
174 lines (140 loc) · 3.43 KB

19.Optimiser-gitlab-ci.md

File metadata and controls

174 lines (140 loc) · 3.43 KB

Optimiser votre fichier gitlab-ci.yml

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

Les ancres

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"

Les ancres pour les scripts

.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

Extends

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

Utiliser extends et include ensemble

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

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]