Gitlab

.gitlab-ci.yml

Dans le Makefile, des étapes de base ont été définies afin de construire l’image de l’application, la stocker sur la registry, et lancer les services décrits dans le fichier docker-compose.yml.

Pour le moment la CI ne comprend pas encore la phase de tests de l’application, mais on peut déjà scénariser ces étapes de l’intégration en respectant la syntaxe de Gitlab dans le fichier .gitlab-ci.yml:

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:
    - pull       # pull latest images required for our build
    - build      # build the image
    - push       # push the image to the local registry
    - staging    # deploy the compose project on a staging server
    - production # deploy the compose project on a production server

Préparation

Cette étape effectue des compilations diverses et la préparation des assets. Le travail se fait dans un conteneur, mais les sources et les destinations sont des volumes montés, et ainsi le résultat se trouvera sur place, disponible pour les étapes suivantes.

pull:
    # stage for this step
    stage: pull
    # command(s) to run
    script:
        # pull images (see Makefile)
        - make pull

Construction de l’image

La CI va construire la ou les images contenant l’application, et va la pousser dans le registre, dument étiqueté pour pouvoir conserver un historique des versions sans risque de confusion.

build:
    stage: build
    script:
        # build images (see Makefile)
        - make build
push:
    stage: push
    script:
        # login to the local registry
        - echo $CI_BUILD_TOKEN | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
        # push images (see Makefile)
        - make push

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 mode classique pour une application de type LAMP, c’est un autre système qui est utilisé.

staging:
    stage: staging
    environment:
        name: staging
        url: http://<myapp>.staging.bearstech.com
    only:
        - master
    script:
        # use the factory-deploy script to deploy the compose project
        # this will (re)start docker-compose on the target after pulling the new image
        - factory-deploy

production:
    stage: production
    environment:
        name: production
        url: http://yourwebsite.com
    script:
        - factory-deploy
    # 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.

Top