C'est un de ces jours où je me demande: Comment est-ce que je pourrais bien optimiser la manière de déployer mon code sans devoir tout faire manuellement. Je passe plusieurs heures et une fois satisfait je range mon bordel et passe à d'autres occupations. Le soucis c'est qu'il y a une pléthore de manière de faire et que parfois j'oublie ce que j'ai mis en place et comment j'ai fait: Je vais donc écrire ici à propos de mon dernier oléoduc.

Comme indiqué, il y a beaucoup de manières de faire, je vais exposé ce que j'ai fait, je sais que ce n'est pas parfait, qu'il y a mieux et que je vais pouvoir itérer pour aller vers quelque chose de plus sécurisé et plus optimal. Pour le moment, le but de cet oléoduc est de remplir des objectifs précis:

  • Une fois que je push mon code avoir un build
  • Le build doit pouvoir être testé
  • Le build doit être envoyé sur mon Hub Docker
  • Le build doit être déployé sur mon serveur ou dans le cloud

Pour se faire, je me suis débarassé de Gitea pour passer à nouveau à Gitlab: À l'époque je passais par Gitea avec Drone et Drone Runner pour avoir cycle de développement complet: C'était bien mais il y a beaucoup de limitations. Gitlab est une giga usine mais pour de bonnes raisons: gestion de projets intégré, documentation, ... et surtout la gestion de l'intégration continue et du déploiement continue.

Il me faut bien évidemment Docker d'installé sur ma machine cible et avoir un gitlab-runner, j'ai tenté d'en avoir un dans docker (docker-in-docker) et ce n'était pas convaincant. Je passe désormais par un gitlab-runner installé directement avec un utilisateur du même nom. Pour qu'il puisse fonctionner correctement il doit être dans le groupe docker et il faut commenter dans /home/gitlab-runner/.bash_logout cette partie:

# ~/.bash_logout: executed by bash(1) when login shell exits.

# when leaving the console clear the screen to increase privacy

#if [ "$SHLVL" = 1 ]; then
#    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
#fi

pour l'ajout au groupe:

usermod -aG docker gitlab-runner

Example de configuration:

# .gitlab-ci.yml

variables:
  IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG


build-n-push-job:
  image: docker:latest
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $IMAGE_TAG .
    - docker push $IMAGE_TAG

Pour le $CI_REGISTRY_PASSWORD j'ai généré un token sur le portail Docker Hub.

Lorsque je veux déployer je me content de faire un docker-compose up avec le fichier en conséquence, pour qu'il soit directement avec la bonne url je l'ajoute dans un groupe Nginx-Proxy. À terme je passerai par docker swarm ou Kubernetes.

Il me reste désormais à voir comment déployer directement sur Azure mais il semble que ça soit de la même manière que pour docker hub.