Gitlab

Plateforme pour déployer du code sur un serveur

Documentation

Du local à Gitlab

Pour pusher du code local sur Gitlab, il faut créer un repository sur la plateforme.

  1. Aller dans Settings > CI / CD et ajouter votre clé publique SSH dans Deploy Keys.

Si vous avez déjà utilisé votre clé SSH locale dans un projet de votre Gitlab, allez la chercher dans l'onglet Privately accessible deploy keys.

Il est possible que la clé n'ai pas les droits d'écriture sur le repository. Dans ce cas, éditer la clé dans Gitlab et cocher la case Write access allowed.

De Gitlab au serveur

Pour mettre en place du code sur un serveur, il faut que Gitlab puisse accéder au serveur via SSH pour récupérer le code.

Configuration

  1. Aller dans le projet, puis Settings > Repository > Deploy Keys.

  2. Sur le serveur, créer une nouvelle clé SSH : ssh-keygen -o -t rsa -C "sebastien@wecoprod.com" -b 4096 (id_rsa.pub).

  3. Ajouter le contenu du fichier id_rsa.pub dans le formulaire.

Attention : si le serveur est déjà présent, il faut passer par la liste des clés SSH utilisées dans Gitlab.

Il faut ensuite ajouter les variables pour le CI.

  1. Aller dans Settings > CI / CD > Variables.

  2. Sur le serveur, créer une nouvelle clé SSH (pour Gitlab) : ssh-keygen -o -t rsa -C "sebastien+gitlab@wecoprod.com" -b 4096 . Utiliser id_rsa_gitlab.pub comme nom du fichier.

  3. Ajouter la clé publique aux accès autorisés : cat .ssh/id_rsa_gitlab.pub >> .ssh/instance_keys.

  4. Copier la clé privée dans la variable SSH_PRIVATE_KEY.

J'utilise le fichier instance_keys pour stocker la clé publique de Gitlab car le fichier autorized_keys peut être écrasé au démarrage. C'est le cas dans les instances Scaleway…

Initialiser le repository GIT : git init

Fichier de conf

Variables :

  • DEPLOYMENT_SERVER_IP : IP du serveur distant

  • SSH_USER : utilisateur SSH du serveur distant

  • SSH_PRIVATE_KEY : clé privée du serveur distant

Copier la clé privée du serveur distant dans la variable .

# gitlab-ci.yml
image: node:8

services:
- docker:dind

stages:
- deploy

deploy_production:
	stage: deploy
	image: docker:git
	before_script:
		- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
		- mkdir -p ~/.ssh
		- eval $(ssh-agent -s)
		- '[[ -f /.dockerenv ]] && echo -e "Host *\\nStrictHostKeyChecking no\\n" > ~/.ssh/config'
		- echo -e "$SSH_PRIVATE_KEY" > key
		- chmod 600 key
		- ssh-add key
		- ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts
	script:
		- ssh root@$DEPLOYMENT_SERVER_IP "touch ~/test_deploy_gitlab.txt"
		- ...
	only:
		- master

Dernière mise à jour