Mise en place d'un serveur Gitlab

Installation, configuration et utilisation

Introduction

$ Whois

Contenu
  • Kevin Gautreau
  • Développeur Back freelance
  • Clermont-Ferrand (depuis Septembre 2015)
  • Spécialisé Drupal
  • Twitter / Github : @Kgaut
  • Mail : contact@kgaut.net

Image retirée.

 

Buts de la formation

Contenu
  • Installer et prendre en main un serveur Gitlab
  • Comprendre les bases de l'intégration continue
  • Installer Gitlab CI
  • Expérimenter les possibilités

Autre chose ?

À noter

Contenu
  • Je ne suis pas un expert mais un experimenteur
  • Domaine en constante évolution
  • => Avoir les clés pour être autonome pour la suite

Cette présentation

Pourquoi Gitlab

Gitlab ?

Contenu

Solution SASS

  • Pas de serveur à configurer
  • Moins la main sur la configuration

Solution auto-hébergée

  • Configuration au "petits" oignons
  • Possibilité d'héberger où l'on veut
  • Backups facilités

 

Concurents SAAS

Contenu
  • Github
  • Bitbucket
  • ...

Repo publics gratuits, privés payants.

Concurents auto-hébergés

Contenu

Avantages de gitlab auto-hébergé

Contenu
  • Solution robuste et éprouvée
  • Beaucoup d'intégrations
  • Intégration de Mattermost
  • CI incluse

One more thing

Contenu

Image retirée.

Avant l'installation

Pré-requis

Contenu
  • Serveur sous CentOS ou Debian / Ubuntu
  • Accès SSH
  • Compte e-mail type gitlab@entreprise.com avec accès pop et SMTP
  • Connaissances basiques en CLI GNU/Linux

Deux types d'instalation

Contenu

Depuis les sources

Compilation, récupération à la main...

=> Si besoin de config spécifique (MySQL à la place de PosgreSQL)

Paquet Omnibus

Un seul paquet yum ou deb.

=> Solution privilégiée maintenant

 

Installation depuis les sources

Installation "omnibus"

Contenu

CF : https://about.gitlab.com/downloads/

  • Ubuntu 12.04, 14.04, 16.04 (recommended)
  • Debian 7, 8
  • CentOS 6, 7
  • OpenSUSE 12.1, 13.2
  • Raspberry PI 2 on Raspbian

Installation sous Centos

Constantes

Contenu
  • OS : CentOS 7 minimal
  • IP : 192.168.1.18
  • Domaine : gitlab.vm

Prise en main : SSH

Contenu

Depuis un autre poste : ssh root@gitlab.vm

Si cela ne fonctionne pas :

  • installation de ssh-server
  • vérification du fichier /etc/ssh/sshd_config (PermitRootLogin yes)

Updates du serveur

Contenu

yum update

yum install vim

Installation gitlab - dépendances

Contenu

Procédure : https://about.gitlab.com/downloads/


sudo yum install curl policycoreutils openssh-server openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

Installation gitlab

Contenu

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

sudo gitlab-ctl reconfigure

http://gitlab.vm

Contenu

Image retirée.

Modification compte utilisateur

Contenu

Identifiant : http://gitlab.vm/profile/account

Image retirée.

email, mot de passe : http://gitlab.vm/profile

La configuration

Principe

Contenu


# Modification du fichier de configuration
vim /etc/gitlab/gitlab.rb

# Reconfiguration de gitlab
gitlab-ctl reconfigure

Passage en revue du fichier

Contenu

...

L'intégration continue

Principe

Contenu

Automatiser la construction d'une "build"

  • Génération des assets
  • « Compilation »
  • Tests unitaires
  • ...

Solutions SAAS

Contenu

Github + Travis CI (https://travis-ci.org/)

Quand push sur "master" -> lancement de tests

Les hooks git

Contenu
  • Script exécuté lors d'une action
  • Local (pre commit) distant (post receive)
  • scripts dans le .git/hooks d'un dépot

Attention : Gitlab utilise déjà ces hooks pour fonctionner, ne pas les modifier ! utiliser les "custom_hooks"

Exemple.

 

Gitlab CI

Contenu
  • Solution type "travis"
  • Intégrable facilement à côté d'un gitlab
  • n gitlab <=> n gitlab CI (même sur des serveurs différents)
  • Principe de "Runner"

Installation et configuration de Gitlab CI

Installation

Prise en main de gitlab CI

Premiers tests

Contenu
  1. Création d'un dépot
  2. Création du fichier .gitlab-ci.yml
  3. Tests

.gitlab-ci.yml

Contenu

Défini le comportement.


stages:
  - deploy

prod-deployment:
  stage: deploy
  script:
    -  ssh slides_kgaut_net@slides.kgaut.net 'bash -s' < scripts/prod-deployment.sh
  only:
    - master

Proof of concept

Contenu


mail:
  script: "echo 'coucou' | mail -s 'test email' contact@kgaut.net"

Définition de plusieurs «jobs»

Contenu


mail:
  script: "echo 'coucou' | mail -s 'test email' contact@kgaut.net"
mail2:
  script: "echo 'coucou' | mail -s 'test email 2' contact+test@kgaut.net"

Ajout condition de branche

Contenu


mail:
  script: "echo 'push sur master' | mail -s 'push sur master' contact@kgaut.net"
  only:
    - master
mail2:
  script: "echo 'coucou' | mail -s 'push une branche' contact+test@kgaut.net"

Les «stages»

Contenu

Groupement de jobs qui seront exécutés en parallèle.

Si plusieurs étapes, alors l'étape N+1 ne sera lancée que si l'étape N s'est correctement exécutée.

NB : la clé allow_failure : true permet de ne pas impacter la suite au niveau d'un job

Exemple «stages»

Contenu


stages:
  - etape_1
  - etape_2

mail_admin:
  script: "echo 'push sur master' | mail -s 'push sur master' contact@kgaut.net"
  stage: etape_1
  only:
    - master
fail:
  script: "lorem"
  stage: etape_1

mail_2:
  script: "echo 'coucou' | mail -s 'push une branche' contact+test@kgaut.net"
  stage: etape_2

Plus d'exemples

Connexion distante via Gitlab CI

Principe

Contenu

Au push :

  1. Le runner va se connecter à notre serveur distant
  2. Il va exécuter une ou plusieurs commande commande
  3. Nous en retournera le résultat

Autoriser le runner à se connecter

Contenu

Genérer une clé SSH :


sudo -u gitlab-runner -H ssh-keygen -t rsa -C "contact@kgaut.net"

Ajouter la clé au trousseau du serveur distant


sudo -u gitlab-runner -H ssh-copy-id user@serveur

Note : Il peut être pratique d'ajouter cette clé dans /etc/skel/.ssh/authorized_keys.

Tester


sudo -u gitlab-runner -H ssh user@serveur

Authoriser notre serveur à se connecter à gitlab

Contenu

Génération d'une clée :


ssh-keygen -t rsa -C "contact@kgaut.net"

cat .ssh/id_rsa.pub

Ajout de cette clé aux clés de déploiements du dépôt.

Tests

Contenu

Serveur :
User :
Password :

Script de déploiement

Contenu

Script bash qui sera executé sur le serveur distant :


ssh user@serveur 'bash -s' < scripts/prod-deployment.sh
  • Le script sera versionné.
  • Langage "bash"

Exemple script de déploiement D8

Contenu


#!/bin/bash
set -e
cd /home/slides_kgaut_net
~/vendor/bin/drush @sli sql-dump --gzip > db/`date +%Y-%m-%d_%H-%M-%S`-slides.kgaut.net-drush.sql.gz
git pull
composer install
composer install
cd web
~/vendor/bin/drush @sli updb -y
~/vendor/bin/drush @sli cr
~/vendor/bin/drush @sli config-import

Jouons un peu

Contenu

git clone git@github.com:kgaut/silex-composer-example.git
git remote rm origin
git remote add origin ...
git push -u origin master