.gitlab-ci.yml
Sur cette page
Le fichier .gitlab-ci.yml
permet de scénariser les étapes d’intégration (build) et de déploiement afin réaliser une “Pipeline” (enchainement automatique des étapes sur le serveur de CI) depuis Gitlab :
Définir les étapes
Dans le fichier .gitlab-ci, on liste dans l’ordre les étapes de la pipeline qui seront lancées par la CI:
# stages to run in the ci (ordered)
stages:
- build # build the image, push to the Gitlab registry
- staging # deploy the compose project on a staging server
- production # deploy the compose project on a production server
Construction de l’image
La CI va construire l’image Docker contenant l’application, et va la pousser dans le registre Gitlab.
build:
stage: build
image: docker
services:
- docker:dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
script:
# pull latest image required for our build
- docker pull bearstech/python:3
# build image
- docker build -t $(CI_REGISTRY_IMAGE)/app:$(CI_COMMIT_SHA) --build-arg=uid=$(id -u) .
# login to the local registry
- echo $(CI_BUILD_TOKEN) | docker login -u $(CI_REGISTRY_USER) --password-stdin $(CI_REGISTRY)
# push image
- docker push $(CI_REGISTRY_IMAGE)/app:$(CI_COMMIT_SHA)
Déploiement
La CI va déclencher le déploiement, qui utilisera la ou les images Docker disponibles dans le registre, tel que décrit dans le fichier docker-compose.yml.
NB: la phase de déploiement décrite ci-dessous concerne une application conteneurisée. Dans le cadre d’un déploiement en natif de l’application, pas besoin de builder l’image Docker.
staging:
stage: staging
image: bearstech/deploy
environment:
name: staging
url: http://<myapp>.staging.bearstech.com
only:
- master
script:
# use the deploy service to deploy the compose project
# this will (re)start docker-compose on the target after pulling the new image
- deploy
production:
stage: production
image: bearstech/deploy
environment:
name: production
url: http://yourwebsite.com
script:
- deploy yourwebsite.com
# we trigger deployement on the production serveur manualy
when: manual
# only for branch master
only:
- master
# and we force this step to fail on failure
allow_failure: false
Ici la phase de déploiement se fait sur 2 environnements: staging et production. Le déclenchement du déploiement en production est manuel: un bouton apparaît dans la pipeline uniquement lorsque le code est poussé sur la branche master.
Au final, vue dans Gitlab, la pipeline récapitule l’éxecution de toutes les étapes définies dans le .gitlab-ci.yml
du projet (dans la capture ci-dessous, l’étape des tests a été ajoutée), où le déploiement en production reste une étape manuelle.
Pour réaliser des tests de l’application qui seront joués dans la CI, nous avons ajouté quelques exemples dans la documentation.