Table des matières

Introduction

GitLab Runner est un projet open source qui est utilisé pour exécuter vos travaux et renvoyer les résultats à votre plateforme GitLab. Il est utilisé en conjonction avec GitLab CI/CD, le service d'intégration continue open-source inclus avec GitLab qui coordonne les travaux.

Pré-requis

GitLab Runner est écrit en Go et peut être exécuté comme un binaire unique.

Il est conçu pour fonctionner sur les systèmes d'exploitation GNU/Linux, macOS et Windows. Les autres systèmes d'exploitation fonctionneront probablement tant que vous pourrez compiler un binaire Go sur eux.

Si vous voulez utiliser Docker, installez la dernière version.

GitLab Runner nécessite un minimum de Docker v1.13.0.

Caractéristiques

Compatibilité avec les versions de GitLab

La version GitLab Runner doit être synchronisée avec la version GitLab. Bien que les anciens Runners puissent toujours fonctionner avec les nouvelles versions de GitLab, et vice versa, dans certains cas, des fonctionnalités peuvent ne pas être disponibles ou fonctionner correctement s'il y a une différence de version.

La rétrocompatibilité est garantie entre les mises à jour de versions mineures, mais sachez que les mises à jour de versions mineures de GitLab peuvent introduire de nouvelles fonctionnalités qui nécessiteront que le Runner soit sur la même version mineure.

Installer le GitLab Runner

GitLab Runner peut être installé et utilisé sur GNU/Linux, macOS, FreeBSD et Windows. Vous pouvez l'installer à l'aide du Docker, télécharger le binaire manuellement ou utiliser le dépôt de paquets rpm/deb que GitLab propose.

Nous allons dans notre cas déployer le gitlab-runner sur une distribution Linux.

Pour installer le Runner :

Ajoutez le dépôt officiel du GitLab :

# For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
 
# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

Installez la dernière version de GitLab Runner, ou passez à l'étape suivante pour installer une version spécifique :

# Pour Debian/Ubuntu/Mint
sudo apt-get install gitlab-runner
 
# Pour RHEL/CentOS/Fedora
sudo yum install gitlab-runner

Mise à jour du Runner

Il suffit de l'exécuter pour installer la dernière version :

# Pour Debian/Ubuntu/Mint
sudo apt-get install gitlab-runner
 
# Pour RHEL/CentOS/Fedora
sudo yum install gitlab-runner

Enregistrement des Runners

L'enregistrement d'un Runner est le processus qui lie le Runner à une instance GitLab.

Pour enregistrer un Runner sous GNU/Linux :

Exécutez la commande suivante :

sudo gitlab-runner register

Entrez l'URL de votre instance GitLab :

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.oowy.fr

Saisissez le jeton que vous avez obtenu pour inscrire le coureur :

Please enter the gitlab-ci token for this runner:
u7cQyssKyWHyUrdd-c-A

Entrez une description pour le Runner, vous pourrez la modifier plus tard dans l'interface utilisateur du GitLab :

Please enter the gitlab-ci description for this runner:
[runner]: Generic Runner

Veuillez entrer les balises gitlab-ci pour ce runner

Please enter the gitlab-ci tags for this runner (comma separated):

Entrez l'exécuteur testamentaire du coureur :

Please enter the executor: docker+machine, docker-ssh+machine, shell, ssh, docker-ssh, parallels, virtualbox, kubernetes, custom, docker:
shell

Fin de la configuration du runner :

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Gitlab Runner in Docker

# docker run -d --name gitlab-runner --restart always \
   -v /srv/gitlab-runner/config:/etc/gitlab-runner \
   -v /var/run/docker.sock:/var/run/docker.sock \
   gitlab/gitlab-runner:latest

Enregistrement

[user@docker ~]$ docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=8 revision=943fc252 version=13.7.0
Running in system-mode.
 
Enter the GitLab instance URL (for example, https://gitlab.com/):
https://gitlab.oowy.fr
Enter the registration token:
4qD5Erkb9x3py15CMjSs
Enter a description for the runner:
[f0e9ac1fff98]: Docker-Runner
Enter tags for the runner (comma-separated):
 
Registering runner... succeeded                     runner=4qD5Erkb
Enter an executor: docker, docker-ssh, parallels, shell, ssh, virtualbox, docker-ssh+machine, custom, kubernetes, docker+machine:
docker
Enter the default Docker image (for example, ruby:2.6):
ruby:2.6
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Une fois le runner enregistré, celui-ci remonte dans gitlab

Gitlab Runner in Kubernetes

Ajouter le repository helm de gitlab.

bastion:~$ helm repo add gitlab https://charts.gitlab.io

Une fois que nous aurons configuré GitLab Runner dans un fichier values.yaml, nous exécuterons ce qui suit :

bastion:~$ helm install --namespace <NAMESPACE> gitlab-runner -f <CONFIG_VALUES_FILE> gitlab/gitlab-runner

Où :

Note:

Si l'on souhaite installer une version spécifique du Helm charts du GitLab Runner, ajoutez –version <RUNNER_HELM_CHART_VERSION>.

Création d'un fichier values.yaml avec les informations nécessaires pour que gitlab-runner se rattache à la plateforme gitlab

bastion:~$ nano values.yaml
gitlabUrl: https://gitlab.oowy.fr/
runnerRegistrationToken: drJDdsg2js3LdBJED29d
concurrent: 20
rbac:
  create: true
  clusterWideAccess: false
runners:
  image: ubuntu:18.04
  privileged: false
  builds:
    memoryRequests: 1000Mi

On créer le namespace gitlab-runner si ce dernier n'existe pas

bastion:~$ kubectl create ns gitlab-runner

On déploie le gitlab-runner

bastion:~$ helm install --namespace gitlab-runner gitlab-runner -f values.yaml gitlab/gitlab-runner

Création du fichier .gitlab-ci.yml

Votre dépôt gitlab est créé, vous avez cloner celui-ci, vous pouvez maintenant créer votre configuration.

Le fichier .gitlab-ci.yml est l'endroit ou vous allez configurer votre processus d'intégration continue. Il se place à la racine de votre projet.

A chaque push, GitLab va regarder dans ce fichier et lancer les tâches dans le Runner précédemment créer.

Je vous invite à créer ce fichier à la racine de votre projet et coller le contenu suivant :

build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"
 
test-job1:
  stage: test
  script:
    - echo "This job tests something"
 
test-job2:
  stage: test
  script:
    - echo "This job tests something, but takes more time than test-job1."
    - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
    - echo "which simulates a test that runs 20 seconds longer than test-job1"
    - sleep 20
 
deploy-prod:
  stage: deploy
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

Cette configuration créée 3 jobs : build, test et deploy. Ces jobs (=tâches) ne font rien à part écrire du texte.

Plus tard vous pourrez mettre toutes vos commandes comme “apt install, npm install, phpunit, gulp …

On commit puis push le fichier :

git add .gitlab-ci.yml
git commit -m "Add .gitlab-ci.yml"
git push origin master

Sur l'interface GitLab, dans votre projet / CI/CD / Pipelines :

Annexe

https://docs.gitlab.com/

https://docs.gitlab.com/runner/

https://docs.gitlab.com/runner/commands/#gitlab-runner-uninstall

https://docs.gitlab.com/ee/ci/runners/#shared-runners

https://docs.gitlab.com/runner/install/docker.html

https://docs.gitlab.com/runner/register/index.html#docker

https://docs.gitlab.com/runner/install/kubernetes.html

https://gitlab.com/gitlab-org/charts/gitlab-runner/-/blob/master/values.yaml

https://docs.gitlab.com/ee/ci/docker/using_docker_build.html