Docker, Gitlab, tests unitaires et Registry
Introduction
1 - Gitlab
Installation
Pour installer Gitlab, nous allons rédiger un docker-compose pour que nous puissions redéployer rapidement le conteneur :
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
ports:
- "22222:22"
volumes:
- /docker/gitlab/config:/etc/gitlab:Z
- /docker/gitlab/logs:/var/log/gitlab:Z
- /docker/gitlab/data:/var/opt/gitlab:Z
- /docker/ssl:/etc/gitlab/ssl:ro # Volume qui pointe sur la liste des certificats SSL
# - /docker/gitlab/registry:/var/opt/gitlab/registry:rw
# - /docker/gitlab/certs:/certs:rw
# Pour Let's Encrypt
environment:
- LETSENCRYPT_HOST=gitlab.votre-domaine.com
- LETSENCRYPT_EMAIL=votre-email@votre-domaine.com
- 'VIRTUAL_HOST=gitlab.votre-domaine.com'
hostname: gitlab.votre-domaine.com
Dans notre cas, nous pouvons voir que les volumes indiqués sont pour la persistance de la data, de la configuration et des logs Gitlab. Nous avons aussi un lien vers les certificats SSL générés par Let’s Encrypt mais aussi pour (pour le moment, commentés) un lien avec le registre d’images, que nous déploierons plus tard. Notez aussi que le port 22 ne peut pas être utilisé dans notre cas, car le port 22 est déjà utilisé pour la connexion SSH de la machine hôte.
Utilisez la commande pour démarrer les machines, puis naviguer sur le nom de domaine que vous avez renseigné.
docker-compose down
docker-compose up -d
Entrez le mot de passe de l’administrateur root et connectez-vous.
Configuration
Retournez dans votre machine et allez dans le répertoire /docker/gitlab/config et modifiez le fichier gitlab.rb.
Dans un premier temps, entrez les informations concernant votre serveur de mail :
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.votre-domaine.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "gitlab@votre-domaine.com"
gitlab_rails['smtp_password'] = "mot-de-passe-smtp"
gitlab_rails['smtp_domain'] = "mail.votre-domaine.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = "gitlab@votre-domaine.com"
gitlab_rails['gitlab_email_reply_to'] = "gitlab@votre-domaine.com"
A présent, modifier les paramètres de certificats SSL :
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.votre-domaine.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.votre-domaine.fr.key"
Enfin, indiquez à gitlab que le port de communication SSH est différent de 22, pour la génération automatique des liens :
gitlab_rails['gitlab_shell_ssh_port'] = 22222
Quittez votre éditeur et reconfigurez Gitlab en utilisant la commande :
docker exec -it gitlab gitlab-ctl reconfigure
2 - Les runners
Les runners dans Gitlab sont les conteneurs qui vont vous permettre de tester, construire et mettre à jour vos projets. Dans notre cas, nous allons en déployer un seul, mais la procédure est la même à chaque nouveau runner.
Installation
De la même manière que Gitlab, nous allons utiliser un docker-compose pour créer notre conteneur :
gitlab_runner:
image: gitlab/gitlab-runner
container_name: Gitlab-Runner
restart: always
volumes:
- /docker/gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
- /docker/ssl:/etc/gitlab-runner/certs
Là encore, nous mettons en place les volumes pour sauvegarder la configuration de notre runner, mais nous lui partageons aussi les certificats SSL.
Lancez la commande suivante pour lancer le runner :
docker-compose up -d
Configuration
Une fois l’installation terminée, il faut indiquer certaines propriétés à notre runner. Dans un premier temps, rendez-vous sur l’espace administrateur de votre Gitlab (avec l’indentifiant root) et munissez vous des informations dans sur la page “Overview > Runners”.
Ensuite, entrez les commandes suivantes :
docker exec -it Gitlab-Runner bash
gitlab-runner register
https://gitlab.votre-domaine.com/
yrpor********************** (votre token)
Runner (Mettez la description que vous souhaitez)
(appuyez sur entrée pour passer l'étape des tags)
false
docker
alpine
Actualisez maintenant votre page d’administration Gitlab et vous verrez votre nouveau runner apparaître. Vous pouvez à présent l’utiliser dans vos projets.
3 - Registry
Maintenant que notre Gitlab et nos test unitaires sont mis en place, il nous reste l’étape de la création des images Docker, pour vos propres projets.
Installation
Comme à l’accoutumée, nous allons modifier notre docker-compose pour intégrer notre registry :
docker-registry:
image: registry:latest
restart: always
container_name: docker-registry
environment:
- LETSENCRYPT_HOST=registry.votre-domaine.com
- LETSENCRYPT_EMAIL=votre-email@votre-domaine.com
- VIRTUAL_HOST=registry.votre-domaine.com
- VIRTUAL_PROTO=https
- REGISTRY_AUTH=token
- REGISTRY_AUTH_TOKEN_REALM=https://gitlab.votre-domaine.com/jwt/auth
- REGISTRY_AUTH_TOKEN_SERVICE=container_registry
- REGISTRY_AUTH_TOKEN_ISSUER=gitlab
- REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/registry-certs/registry-gitlab/registry.votre-domaine.com.crt
- REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.votre-domaine.com.crt
- REGISTRY_HTTP_TLS_KEY=/certs/registry.votre-domaine.com.key
volumes:
- /docker/ssl:/certs:ro
- /docker/gitlab/certs:/registry-certs
hostname: registry.votre-domaine.fr
Cette installation est dite sécurisée, c’est-à-dire que l’accès est uniquement accordé aux utilisateurs enregistrés sur le Gitlab. Au niveau des volumes, nous avons comme d’habitude les certificats SSL de Let’s Encrypt, mais aussi les certificats générés par Gitlab, permettant la communication entre les deux. Revenez alors sur le docker-compose de Gitlab, et dé-commentez les volumes précédés d’un “#” :
- /docker/gitlab/registry:/var/opt/gitlab/registry:rw
- /docker/gitlab/certs:/certs:rw
Exécutez les commandes de démarrage du docker-compose :
docker-compose down
docker-compose up -d
Configuration
Ensuite, nous devons configurer Gitlab pour qu’ils puissent communiquer ensemble. Retournez dans le fichier de configuration “/docker/gitlab/config/gitlab.rb” et modifiez les paramètres suivant :
registry_external_url 'https://registry.votre-domaine.com'
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/registry.votre-domaine.com.crt"
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/registry.votre-domaine.com.key"
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "registry.votre-domaine.com"
gitlab_rails['registry_api_url'] = "https://registry.votre-domaine.com"
gitlab_rails['registry_key_path'] = "/certs/registry-gitlab/registry.votre-domaine.com.key"
gitlab_rails['registry_issuer'] = "gitlab"
registry['rootcertbundle'] = "/certs/registry-gitlab/registry.votre-domaine.com.crt"
Rendez-vous ensuite dans le répertoire “/docker/gitlab/certs” où vous trouverez un fichier .key. Si celui-ci ne correspond pas aux informations que vous avez entrez, renommez-le en “registry.votre-domaine.com” puis exécutez la commande suivante :
openssl x509 -inform DER -outform PEM -in registry.votre-domaine.com.crt -out registry.votre-server.com.pem
Une dernière commande pour reconfigurer Gitlab :
docker exec -it gitlab gitlab-ctl reconfigure
Pour tester le bon fonctionnement, vous pouvez vous connecter en utilisant vos identifiants Gitlab grâce à la commande suivante :
docker login registry.votre-domaine.com
Vous devriez voir “Login succeeded”.
Conclusion
Après ce long tutoriel, vous êtes maintenant capable de mettre vos projet dans un Gitlab privé, couplé à ses runners pour les tests et les constructions mais aussi à son registry privé, permettant uniquement aux personnes autorisées à accéder aux images Docker construites. En tant qu’administrateur, n’hésitez pas à fouiller dans les options de Gitlab pour améliorer certaines choses, modifier les autorisations, ou encore interdire la création de compte par une autre personne que vous.