Ce workshop s’effectuer sur la plateforme Gitlab
stages est utilisé pour définir les étapes qui contiennent des travaux et est défini globalement pour le pipeline.
La spécification de stagespermet d’avoir des pipelines flexibles à plusieurs étages. L’ordre des éléments dans stagesdéfinit l’ordre d’exécution des jobs:
Créer un fichier gitlab-ci.yml
image: alpine:3.12.0
stages:
- dependencies
- test
- build
- staging
- preproduction
- release
- production
"dependencies 1":
stage: dependencies
script:
- echo "Je récupère mes dépendances"
Les tâches dependencies 1 et dependencies 2 sont executés en parallèle.
"dependencies 2":
stage: dependencies
before_script :
- echo "Avant le script !"
script:
- echo "Hello World"
- exit 1
after_script :
- echo "Après le script !"
before_scriptest utilisé pour définir une commande qui doit être exécutée avant chaque travail, y compris les travaux de déploiement, Les scripts spécifiés dans before_scriptsont concaténés avec tous les scripts spécifiés dans le main script, et exécutés ensemble dans un seul shell.
after_scriptest utilisé pour définir la commande qui s’exécute après chaque travail, y compris les échecs. Les scripts spécifiés dans after_scriptsont exécutés dans un nouveau shell, séparé de tout script before_scriptou script.
only et except sont deux paramètres qui définissent une stratégie de travail à limiter lorsque des travaux sont créés:
Vous pouvez utiliser l’indicateur | scalaire de bloc multiligne YAML (littéral) pour écrire des commandes sur plusieurs lignes dans la script section d’une description d’une étape. Chaque ligne est traitée comme une commande distincte.
"test 1":
stage: test
script:
- echo "Hello World"
only:
- master
"test 2":
stage: test
script:
- echo "Hello World"
except:
- master
"test 3":
stage: test
script:
- echo "Hello World"
"test 4":
stage: test
script: |
echo "première commande"
echo "deuxième commande"
echo "troisième commande"
On peut spécifier en plus des branches ou des tags des merges requests.
"build":
stage: build
script:
- echo "Hello World"
only :
- merge_request
Créer un fichier nommé README.md
# Hello :smile:
Modifier le fichier .gitlab-ci.yml
"dependencies 1":
stage: dependencies
script:
- echo "Je récupère mes dépendances"
except:
changes:
- "README.md"
environmentest utilisé pour définir qu’un travail se déploie dans un environnement spécifique. Si environmentest spécifié et qu’aucun environnement sous ce nom n’existe, un nouveau sera créé automatiquement.
"delivery staging":
stage: staging
script:
- echo "Hello World"
environment:
name: staging
url: http://localhost:8080/
Dans l’exemple ci-dessus, le delivery staging sera marqué comme effectué un déploiment dans l’enviornnment staging.
releaseindique que le travail crée une version.
Ces méthodes sont prises en charge:
"release":
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest
rules:
- if: $CI_COMMIT_TAG # Run this job when a tag is created manually
script:
- echo 'running release_job'
release:
name: 'Release $CI_COMMIT_TAG'
description: 'Created using the release-cli $EXTRA_DESCRIPTION' # $EXTRA_DESCRIPTION must be defined
tag_name: '$CI_COMMIT_TAG' # elsewhere in the pipeline.
ref: '$CI_COMMIT_TAG'
milestones:
- 'm1'
L’utilisation du includemot - clé permet l’inclusion de fichiers YAML externes. Cela permet de décomposer la configuration CI / CD en plusieurs fichiers et augmente la lisibilité des longs fichiers de configuration. Il est également possible que les fichiers de modèle soient stockés dans un référentiel central et que les projets incluent leurs fichiers de configuration. Cela permet d’éviter la configuration dupliquée, par exemple, les variables globales par défaut pour tous les projets.
includenécessite que le fichier YAML externe ait les extensions .ymlou .yaml, sinon le fichier externe n’est pas inclus.
include prend en charge les méthodes d’inclusion suivantes:
Créer un répertoire template
, dans ce répertoire créer le fichier Delivery-Preproduction.gitlab-ci.yml
.
"delivery preproduction":
stage: preproduction
script:
- echo "Hello World"
environment:
name: preproduction
url: http://localhost:8080/
Ajouter cette ligne dans votre fichier gitlab-ci.yml
include:
- local: '/template/Delivery-Preproduction.gitlab-ci.yml'
Les actions manuelles sont un type spécial de travail qui ne sont pas exécutées automatiquement, elles doivent être explicitement démarrées par un utilisateur. Un exemple d’utilisation d’actions manuelles serait un déploiement dans un environnement de production. Les actions manuelles peuvent être lancées à partir des vues de pipeline, de travail, d’environnement et de déploiement.
"delivery production":
stage: production
script:
- echo "Hello World"
environment:
name: production
url: http://localhost:8080/
only:
- tags
when: manual
image: alpine:3.12.0
stages:
- dependencies
- test
- build
- staging
- preproduction
- release
- production
"dependencies 1":
stage: dependencies
script:
- echo "Je récupère mes dépendances"
except:
changes:
- "README.md"
"dependencies 2":
stage: dependencies
before_script :
- echo "Avant le script !"
script:
- echo "Hello World"
- exit 1
after_script :
- echo "Après le script !"
retry:
max: 2
when: runner_system_failure
allow_failure : true
"test 1":
stage: test
script:
- echo "Hello World"
only:
- master
"test 2":
stage: test
script:
- echo "Hello World"
except:
- master
"test 3":
stage: test
script:
- echo "Hello World"
"test 4":
stage: test
script: |
echo "première commande"
echo "deuxième commande"
echo "troisième commande"
"build":
stage: build
script:
- echo "Hello World"
only :
- merge_request
"delivery staging":
stage: staging
script:
- echo "Hello World"
environment:
name: staging
url: http://localhost:8080/
"release":
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest
rules:
- if: $CI_COMMIT_TAG # Run this job when a tag is created manually
script:
- echo 'running release_job'
release:
name: 'Release $CI_COMMIT_TAG'
description: 'Created using the release-cli $EXTRA_DESCRIPTION' # $EXTRA_DESCRIPTION must be defined
tag_name: '$CI_COMMIT_TAG' # elsewhere in the pipeline.
ref: '$CI_COMMIT_TAG'
milestones:
- 'm1'
"delivery production":
stage: production
script:
- echo "Hello World"
environment:
name: production
url: http://localhost:8080/
only:
- tags
when: manual
include:
- local: '/template/Delivery-Preproduction.gitlab-ci.yml'