Baptiste Foucher, 31/07/2017

CD Act 1 : Déployer une application avec Gitlab CI et Capistrano

4 minutes de lecture

Pour avancer vers le déploiement continu, nous allons aborder la 1ère étape, à savoir : Comment déployer une application avec Gitlab CI ? Pour cela, nous nous appuierons sur notre outil actuel : Capistrano.

Tout d'abord, en partant du script existant que nous lançons à partir de notre CI, il convient de préparer le serveur afin d’autoriser Gitlab CI à déployer sur celui-ci.


Préparer son serveur au déploiement continu


Il nous faut d’abord créer un utilisateur qui servira exclusivement à déployer les applications.

sudo adduser deployer-agent


Nous allons également créer 2 clés rsa :

  • la première pour que le job gitlab puisse se connecter au serveur avec cet utilisateur ;

  • la seconde pour que cet utilisateur ait un accès aux dépots git afin de récupérer les projets.

Ces 2 clés ne doivent pas avoir de passphrase.

su deployer-agent
ssh-keygen -f /home/deployer-agent/.ssh/id_rsa
ssh-keygen -f /home/deployer-agent/.ssh/id_rsa_deployer

Poursuivre le déploiement avec Gitlab


Il faut ensuite ajouter le contenu de la première clé publique dans les clés de déploiement du projet Gitlab :

Settings -> Repository -> Deploy Keys

Ensuite copiez le contenu de la clé privée id_rsa_deployer dans une variable secrète dans le projet Gitlab :

Settings -> CI/CD Pipeline -> Secret Variables

Accordons les droits en éciture sur le répertoire du projet pour l’utilisateur deployer-agent :


setfacl -R -m u:www-data:rwX -m u:deployer-agent:rwX /var/www/projectFolder
setfacl -dR -m u:www-data:rwX -m u:deployer-agent:rwX /var/www/projectFolder

Déployer une application avec Gitlab CI


Créons maintenant le job de déploiement dans le fichier .gitlab-ci.yml

stages:
  - install
  - tests
  - deploy

deploy:preprod:
  image: ruby:latest
  stage: deploy
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$DEPLOYMENT_PRIVATE_KEY")
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - bundle install
  environment:
    name: preprod
    url: http://preprod.troopers.agency
  when: manual
  script:
    - cap preprod deploy
  only:
    - develop


Résultat : désormais quand tous les tests passent sur la branche develop nous n'avons plus qu'à appuyer sur "play" pour lancer le déploiement.


Si nous souhaitons que le déploiement soit automatique il suffit d'enlever la ligne suivante dans fichier .gitlab-ci.yml


when: manual

Cette première étape est très rapide à mettre en oeuvre et permet d'habituer nos équipes à des déploiements plus fréquents et rapides sur un environnement préparé. Pour le faire en toute sérénité je vous conseille fortement d'avoir une bonne couverture de tests unitaires et fonctionnels.

comments powered by Disqus

Nos derniers articles