Gitlab

.gitlab-ci.yml

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.

Top