Taille de texte par Defaut
Agrandir la Taille du Texte
Réduire la Taille du Texte
Options d'accessibilité
Informatique

Gitlab-ci : docker in docker pour de l’intégration continue

Avatar photo Romain
23 novembre 2017
Pas de commentaires

Gitlab et tout particulièrement gitlab-ci sont des outils très précieux pour ITK. Nous les utilisons tous les jours et nous en sommes très contents.

Voici un petit tip pour ceux qui souhaitent faire du docker in docker avec gitlab-ci.

Pourquoi ?

Il y a plein de raisons pour vouloir faire ça :

  • votre ci est en docker, et vous souhaitez créer une image docker pour la pousser sur votre repository favori
  • vous souhaitez réaliser des tests intégration avec docker-compose

Comment ?

Chez ITK nous avons des gitlab runners que nous administrons nous-mêmes, nous pouvons donc tout simplement suivre la doc :

sudo gitlab-ci-multi-runner register -n \
  --url https://gitlab.domain.fr \
  --registration-token REGISTRATION_TOKEN \
  --executor docker \
  --description "My Docker Runner" \
  --docker-image "docker:latest"

Sans oublier la configuration :

sudo cat /etc/gitlab-runner/config.toml
...
[[runners]]
  ...
  [runners.docker]
    ...
    volumes = ["/var/run/docker.sock:/var/run/docker.sock"]
    ...

Ainsi lors du build, il suffira d’une image docker contenant le client docker et la socket unix sera partagée avec l’host.

Par contre si vous n’hébergez pas vos runners vous êtes dépendants de ceux fournis par Gitlab lui même. Le plus simple alors est d’utiliser un service docker dans votre gitlab-ci.yml :

integration:
  stage: integration
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
  script:
    - docker version
    - docker-compose version
  tags:
    - docker

En n’oubliant pas d’utiliser une image de base contenant un client docker et/ou docker-compose. En effet, le docker deamon se trouvant dans un autre docker qui est linké avec votre container courant, tout se passera bien.

De plus, vous aurez remarqué que cette 2ème solution vous permet de faire fonctionner votre gitlab-ci.yml aussi bien sur un runner hosté avec le partage de la socket de base que sur les runners offerts par gitlab.

J’espère que ce petit trick vous sera utile !

Enfin, si vous avez des problèmes avec gitlab et gitlab-ci n’hésitez pas à ajouter un commentaire, nous sommes fans de cet éco-système et commençons à avoir une petite expertise. Si nous avons la réponse nous vous aiderons avec plaisir.

Ecrit par : Romain Maneschi

Commentaires 0

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *