Gitlab

Quick-start

Démarrer un projet de conteneurisation d'application en utilisant le workflow devops de Bearstech

Prérequis

Démarrer un projet

Voici l’exemple d’un “Hello World” minimal qui s’intégre dans le workflow devops de Bearstech.

1. Créer le projet dans Gitlab et le récupérer sur sa machine

git clone gitlab@gitlab.bearstech.com:<my-project>.git

2. Rédiger le Dockerfile pour l’image de l’application

En utilisant l’image de base Python fournie par Bearstech, rédiger le Dockerfile de l’application, en spécifiant l’id de l’utilisateur autorisé à exécuter l’application sur l’hôte.

FROM bearstech/python:3.9

RUN mkdir -p /var/www/html && \
    echo "<html><h1>Hi!</h1></html>" > /var/www/html/index.html

USER 1001
EXPOSE 8000

CMD ["python", "-m", "http.server", \
        "--directory", "/var/www/html", \
        "--bind", "0.0.0.0", "8000"]

3. Définir le service dans un docker-compose

Le serveur web contenu dans l’image sera instancié dans un conteneur Docker, il suffit juste d’indiquer l’image à utiliser dans le fichier docker-compose.yml.

---

version: "3"

services:

  app:
    image: ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}
    labels:
      traefik.frontend.rule: Host:${CI_ENVIRONMENT_DOMAIN}

NB: Le workflow utilise un reverse-proxy pour le routage des url et qui nécessite la présence d’un label.

4. Définir la chaîne d’intégration continue

Les étapes qui seront jouées sur le serveur d’intégration de Gitlab sont décrites dans un fichier .gitlab-ci.yml. Ici, son rôle est de construire l’image, de la stocker dans la registry Gitlab, puis de lancer le déploiement du conteneur en production.

---
stages:
  - build
  - deploy


build:
  stage: build
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -f Dockerfile .
    - echo $CI_BUILD_TOKEN | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

deploy:
  stage: deploy
  environment:
    name: staging
    url: http://$your_domain
  script:
    - factory-deploy

NB: la commande factory-deploy est intégrée au workflow, son rôle est d’assurer le déploiement des conteneurs de manière automatique ou manuelle.

5. Déclencher la pipeline dans Gitlab

L’envoi des fichiers vers Gitlab permet de déclencher le build et le déploiement automatique de l’application sur le serveur de CI

git add .
git commit -m "initial commit"
git push origin master

Tester l’application en local

1. Définir les variables d’environnement

Pour reproduire le comportement de Gitlab CI en local, initialiser quelques variables dans un fichier .env

CI_REGISTRY_IMAGE=minimal_app
CI_COMMIT_SHA=dev
CI_ENVIRONMENT_DOMAIN=dev.workflow

2. Builder l’image de l’application

Construire l’image de l’application en local (en utlisant les valeurs définies dans le .env) permettra de l’instancier avec docker-compose.

docker build -t minimal_app:dev .

3. Lancer l’application

La commande docker-compose va lancer le conteneur de l’application. Pour y accéder, récupérer l’IP du conteneur et ouvrir l’adresse http://<ip-conteneur>:8000 dans un navigateur.

docker-compose up -d
Top