Nous sommes partis d’un constat très simple : comment un non développeur ou un client pourrait déployer son application sans avoir à mettre les mains dans le code ?
PBTD (Push Button To Deploy) tente de résoudre ce problème en permettant à quiconque de déployer directement un projet utilisant capistrano depuis une interface web.
PBTD fonctionne avec des projets sous capistrano 2 et capistrano 3. Il va extraire les configurations capistrano de vos projets pour différencier les environnements.
Pour ce faire vos configurations capistrano devront contenir les mêmes variables que celles des exemples de configuration fournis avec PBTD.
La fonction principale de PBTD est de pouvoir déployer une application sur un environnement spécifique: staging, production ou n’importe quel autre environnement que vous utilisez.
IL vous permet également de visualiser la distance de commits entre le dépôt git et l’application déployée, ce qui vous permet de rapidement constater que votre version déployée a X commits de retard par rapport à votre branche.
Lors de l’ajout d’une application sur PBTD, vous pourrez choisir les environnements à afficher sur la page principale.
Vous pouvez ne vouloir configurer que votre environnement de pré-production par exemple. Le cas typique est une application en cours de développement que vous déployez régulièrement en pré-production mais qui n’est pas encore partie en production.
PBTD est un outil pratique pour votre intégrateur ou votre client qui ne maîtrise pas l’outil capistrano. Il peut également vous être utile si vous avez besoin de déployer un projet et que vous n’avez pas le code sous la main.
Le déploiement de vos applications Ruby on Rails s’en trouve simplifié.
Sidekiq est une gem permettant de faire tourner des processus Ruby en arrière plan.
Au sein de PBTD, cette gem permet de lancer trois actions:
Sidekiq est dépendant de Redis, une base de donnée NoSQL orientée clé/valeur. Nous verrons l’installation de Redis dans la suite de l’article.
Faye est un serveur publish/subscribe de messages. Il est disponible en NodeJS ou en Ruby. Pour PBTD Nous utilisons naturellement la version Ruby.
Sur PBTD, Faye à pour but d’afficher en temps réel les actions lancées par l’utilisateur:
Une clé SSH est nécessaire pour l’utilisation de PBTD. Elle permet la connexion à votre dépôt git et aux serveurs distants sur lesquels PBTD va déployer vos applications.
Nous verrons la création d’une clé ssh dans la suite de l’article.
Sur l’environnement de développement et de test, aucune configuration en plus de la création de la clé SSH n’est demandée, l’application utilisant votre agent local.
Sur un environnement de pré-production ou de production l’ajout du chemin vers la clé ssh créée est à spécifier dans le fichier config/settings.yml
de sorte que celle ci puisse lancer son propre agent.
Sur un serveur distant ajouter le contenu de la clé SSH publique dans le fichier ~/.ssh/known_hosts
.
Ce script bash est propre à PBTD, il est à ajouter dans le fichier config/settings.yml
que nous verrons par la suite. Il est à ajouter pour les environnements autres que ceux de développement et de test.
Ce script permet de lancer un agent ssh sur un serveur distant car les commandes shell que va lancer PBTD se trouve dans un sous processus shell.
Whenever est une gem permettant de lancer des tâches cron en Ruby. Sur PBTD cette gem est configurée dans config/schedule.rb
.
Dans PBTD whenever lance toutes les 10h une mise à jour de la distance des commits pour tous les projets.
Libre à vous de modifier dans ce fichier l’intervalle de mise à jour.
$ git clone git@github.com:synbioz/pbtd.git
Pbtd utilisant Sidekiq nous allons avoir besoin d’installer redis.
Installons redis:
Linux (Debian ou dérivé):
$ sudo apt-get install redis-server
osx:
$ brew install redis-server
Pour l’accès aux dépôts git nous utilisons la gem Rugged qui est un binding en Ruby de libgit2.
Rugged nécessite que ces librairies soient présentes sur le système:
Nous pouvons maintenant lancer l’installation de notre projet:
$ bundle install
Les applications Rails que vous allez configurer dans PBTD utilise certainement des versions de ruby différentes.
Il est de votre responsabilité de les installer au préalable sur le serveur faisant tourner PBTD.
À l’heure actuelle nous ne gérons que rbenv car c’est l’outil que nous utilisons mais la prise en charge de RVM ne devrait pas être particulièrement complexe.
Si vous avez déjà un jeu de clés ssh publique/privée vous pouvez passer cette étape.
$ cd ~
$ mkdir .ssh
$ cd ~/.ssh/
$ ssh-keygen
Ce fichier joue une place centrale dans PBTD. Il contient toutes les variables de configuration par environnement:
repositories_path
répertoire où les projets vont être clonésfaye_server
adresse de votre serveur fayedefault_branch
La branche par défaut de votre dépôt git où se trouve la configuration capistranoPour les environnements autres que celui de développement ou de test:
ssh_public_key
chemin où se trouve la clé publique *.pubssh_private_key
chemin où se trouve la clé privéebasic_auth_user
nom d’utilisateur pour l’authentification httpbasic_auth_password
mot de passe pour l’authentification httpssh_agent_script
chemin où se situe enable-ssh.sh
Il Vous suffit de mettre à jour suivant votre configuration le fichier config/deploy.rb
qui contient la configuration capistrano.
PBTD à besoin de plusieurs variables dans la configuration de base d’un environnement capistrano:
Exemple sur notre environnement de staging config/deploy/staging.rb
:
server 'pbtd.dev.synbioz.com', user: 'synbioz', roles: %w{web app db}
set :rails_env, 'staging'
set :branch, 'develop'
Nous allons commencer par le démarrage de redis comme suit:
$ redis-server
Nous pouvons maintenant lancer sidekiq :
$ bundle exec sidekiq
Faye est notre serveur de pub/sub, par défaut il tournera sur http://127.0.0.1:9292/faye
. Il nous sert principalement à afficher en temps réel le retour du déploiement:
$ bundle exec rackup faye.ru -E production -s thin -p 9292
Nous pouvons à présent lancer notre serveur puma pour lancer l’application rails:
$ bundle exec rails s puma
Les tests au sein de PBTD utilisent:
Le point bloquant actuellement sur les tests concerne les tests des Workers Sidekiq.
Les tests ne passent pas pour ces Workers, le problème venant du fait que nous essayons de contacter une application distante.
En effet, les tests des workers ont besoin d’un projet réel et déployé pour fonctionner correctement.
Nous n’avons pas encore trouvé la solution idéale, le mocking ferait perdre tout son sens aux tests des Workers.
Lors du lancement de notre application nous arrivons sur une page présentant les différents projets que nous utilisons dans PBTD.
De cette page nous avons accès à la possibilité d’ajouter un nouveau projet ainsi que de mettre à jour tous les projets.
Sur chaque projet nous avons la possibilité d’accéder à son édition, de le mettre à jour ou de déployer l’application.
La mise à jour d’un projet consiste à regarder si la version actuellement déployée pour un environnement est toujours issue du dernier commit de la branche git.
La création d’un projet se fait à partir de son url git. Vérifiez donc d’avoir bien accès au dépôt.
PBTD va récupérer votre projet git et vous afficher les environnements trouvés pour votre application.
Vous avez la possibilité de supprimer un environnement, mais aussi d’en ajouter un nouveau en rechargeant la liste des environnements.
Lors du lancement d’un déploiement une console s’ouvre avec la sortie capistrano en temps réel:
PBTD est un projet open-source disponible sur Github.
Nous espérons qu’il simplifiera vos déploiement et sommes à l’écoute de vos retours et contributions.
L’équipe Synbioz. Libres d’être ensemble.