Introduction à Gitlab-CI

API-hour #32 - Clermont'ech - 13/12/2017

Introduction

$ whois

Contenu

photo-profil.jpeg

Kevin Gautreau

 

Gitlab ?

Contenu

Forge à logiciels

  • Système de versionnement (git)
  • Gestion de documentation (wiki)
  • Bug tracker
  • Système d'intégration continue

Gitlab et les autres

Contenu

Solutions SASS

  • Pas de serveur à configurer
  • Moins la main sur la configuration

Gitlab, Github, Bitbucket...

Solutions auto-hébergée

  • Configuration au "petits" oignons
  • Possibilité d'héberger où l'on veut
  • Backups facilités

Gitlab, Gitea (Gogs) , USVN...

Qu'est ce que la CI ?

Contenu

Continuous Integration => Intégration Continue

Automatiser la procédure de création d'une version à chaque modification de code en s'assurant de ne pas intégrer de nouveaux problèmes (bugs)

  • Génération des assets
  • Compilation
  • Tests
  • Déploiement
  • ...

 

L'intégration continue simple : Les hooks gits

Contenu
  • Scripts exécuté lors d'une action
  • Local (pre commit) distant (post receive)
  • scripts dans le .git/hooks d'un dépot

Attention : Gitlab utilise déjà ces hooks pour fonctionner, ne pas les modifier ! Utiliser les "custom_hooks"

Exemple de hook git

Contenu

/var/opt/gitlab/git-data/repositories/kgaut/talk-drupal8-quoi-de-neuf.git/custom_hooks/post-receive


#!/bin/sh

ssh -p 1987 kgaut@atila.kgaut.net 'cd /home/formations_kgaut_net/supports/drupal8/;git pull origin master;'

echo "Over ! "

L'intégration continue complexe

Contenu

Plein de trucs : Jenkins, Travis CI, CircleCI, Codeship...

 

Gitlab CI

Qu'est-ce ?

Contenu

Brique CI, intégrée à Gitlab depuis quelques années.

M serveurs Gitlab <=> N serveurs Gitlab CI.

(généralement M = N, et sur le même serveur...)

Les Runners

Contenu

De 1 à X sur le même serveur gitlab CI.

De différents type (docker, virtualbox, shell...)

Principe de fonctionnement

Contenu
  1. À la réception de modification (commit, merge, merge request, tag...)
  2. Un runner exécute une liste de tache (scripts) dans un ordre défini.
  3. Exécution et résultats visibles en temps réel sur l'interface gitlab

Tâches possibles

Contenu
  • Sauvegarde de la base de données
  • Ménage dans les sauvegardes
  • Git pull
  • Génération assets (js, css...)
  • composer install
  • invalidation de cache
  • migration de base de données

=> Basiquement tout ce qui peut se scripter.

Définition des taches : fichier .gitlab-ci.yml

Contenu

mail:
  script: "echo 'coucou' | mail -s 'test email' contact@kgaut.net"

 

=> envoi d'un mail à chaque commit

Définition de plusieurs « jobs »

Contenu

mail:
  script: "echo 'coucou' | mail -s 'test email' contact@kgaut.net"
mail2:
  script: "echo 'coucou' | mail -s 'test email 2' contact+test@kgaut.net"

Ajout condition de branche

Contenu

mail:
  script: "echo 'push sur master' | mail -s 'push sur master' contact@kgaut.net"
  only:
    - master
mail2:
  script: "echo 'coucou' | mail -s 'push une branche' contact+test@kgaut.net"

C'est bien beau d'envoyer un mail...

Contenu

Execution d'une commande ou d'un script à distance


backup:
  - ssh kgaut_net@kgaut.net 'drush @kg cr'
  - ssh kgaut_net@kgaut.net 'drush @kg sql-dump --gzip > "....sql.gz"'
  - ssh kgaut_net@kgaut.net 'bash -s' < scripts/deploy/2-diff.sh

scripts/deploy/2-diff.sh est versionné dans le dépot

Principe

Contenu
  1. Le runner va se connecter à notre serveur distant
  2. Il va exécuter une ou plusieurs commandes (voir un script)
  3. Nous en retournera le résultat

Les stages

Contenu

Groupement de « jobs ».

Au sein d'un groupement : les jobs sont lancés en //

Si un élément échoue => interuption du process (possible de bypass)

Exemple de script

Contenu

stages :
  - predeploy
  - deploy

prod_backup_db:
  script:
    -  ssh kgaut_net@kgaut.net 'drush @kg cr'
    -  ssh kgaut_net@kgaut.net 'drush @kg sql-dump ...'
  stage : predeploy

prod_diff_git:
  script:
    -  ssh kgaut_net@kgaut.net 'bash -s' < scripts/deploy/2-diff.sh
  stage : predeploy

prod_deploy:
  script:
    -  ssh kgaut_net@kgaut.net 'bash -s' < scripts/deploy/4-deploy.sh
  stage : deploy

En image : détail d'une pipeline

Contenu

deploiement-pipeline.png

En image : détail d'un job

Contenu

details-job.png

Conclusion

Tout est possible ou presque

Contenu
  1. Script bash ou autre.
  2. Personnalisable en fonction des besoins
  3. Commencer simple
  4. Nécessite d'avoir les binaires sur le serveur distant