IE-Concept

Docker, Gitlab, tests unitaires et Registry

Introduction

Lorsque vous avez besoin de déployer une solution open-source pour gérer vos projets, faire des tests unitaire ou encore du déploiement rapide sur des nouveaux serveurs, la solution qui nous vient tout de suite, c’est Gitlab CE. Nous allons donc le conteneuriser pour le rendre accessible au sein de votre machine.
Prérequis : Avoir suivi ce tutoriel sur Nginx et Let’s Encrypt

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.