Déploiement automatisé d applications Ruby on Rails Etienne Charlier 20/03/2014
Qui suis-je? E"enne Charlier Au CETIC depuis 2008 So8ware and Services Technologies Expert technique Senior Administra"on d infrastructure IT Missions d'aide à l'innova"on Projets de recherche Cloud e"enne.charlier@ce"c.be
Où travaille-je? Centre de R&D en TIC au service des entreprises ACADEMICS INDUSTRY Recherche appliquée Etudes de faisabilité Preuves de concept Transfert technologique
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Constat 1: Produit OFF- THE- SHELF INFRASTRUCTURE CLIENT Fournisseur livre un produit à installer Déploiement par le client sur son infrastructure
Constat 1: Produit OFF- THE- SHELF SaaS INFRASTRUCTURE CLIENT FOURNISSEUR Fournisseur offre un service prêt à l emploi Déploiement opéré par le fournisseur de la solu"on
Constat 1: Produit OFF- THE- SHELF SaaS INFRASTRUCTURE CLIENT FOURNISSEUR Fournisseur offre un service prêt à l emploi Déploiement opéré par le fournisseur de la solu"on Améliorer le déploiement
Constat 2: Méthodologie WATERFALL AGILE EQUIPE OPS Releases régulières rares Déploiements rares Effort de déploiement doit être allégé
Constat 2: Méthodologie WATERFALL AGILE EQUIPE OPS Releases régulières Equipe surchargée
Constat 2: Méthodologie WATERFALL AGILE EQUIPE OPS Releases régulières Equipe surchargée Alléger le déploiement
Constat 3: Infrastructure SERVEUR PHYSIQUE EQUIPE OPS µ Serveur unique, nommé, connu et chouchouté Si malade à on le soigne Si abîmé à on le répare Equipe surchargée
Constat 3: Infrastructure SERVEUR PHYSIQUE VIRTUALISATION EQUIPE OPS Serveurs clonés, anonymes et maltraités Si malade, euthanasié Equipe sur- surchargée
Constat 3: Infrastructure SERVEUR PHYSIQUE VIRTUALISATION EQUIPE OPS Serveurs clonés, anonymes et maltraités Si malade, euthanasié Equipe sur- surchargée Automa4ser le déploiement
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
DEV + OPS => DEVOPS
DEV + OPS => DEVOPS
DEV + OPS => DEVOPS DEVOPS INFRASTRUCTURE AS CODE
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Infrastructure as code Développement du code pour automa"ser le déploiement à U"liser les techniques de so8ware engineering dans le cadre de ces développements à Ou"ls à Langages
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Rappel: Dans la tête d un DEV «APP» OUTILS LANGAGES?
Dans la tête d un DEV «OPS» OUTILS LANGAGES DEVOPS
Rappel: Outils du dev «APP» Environnement de travail du développeur «APP» Environnement de développement Déboggeur/Environnement de test Ges"onnaire de sources
Outils du dev OPS Environnement de travail du développeur «OPS» Environnement de développement Environnement de test des déploiements Ges"onnaire de sources
Outils OPS
Outils OPS
Outils OPS
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Illustration : timetrack Dev Interne Web based Ruby on Rails MySql VM Ubuntu Cloud privé
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Sélection des outils de DEV OUTILS LANGAGES?
Sélection des outils de DEV OUTILS LANGAGES
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Vagrant But: exécuter le code de déploiement dans un environnement de test Principe: pilotage de virtual box via l API pour cloner, démarrer et supprimer des vms sur la sta"on du DEVOPS Basé sur des baseboxes disponibles sur hgp://vagrantcloud.com Fabriquées sur mesure hgp://www.vagrantup.com/
Vagrant
vagrant box add Vagrant
vagrant up Vagrant
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Puppet But: configurer la vm pour qu elle puisse héberger l applica"on Installa"on Configura"on MW Principe: Décrire les configura"ons des vms (paquets, services, fichiers de configura"on) et puppet prend en charge l applica"on des configura"ons. hgps://puppetlabs.com/ Note: exécute les ac"ons root
Puppet catalogue des configura"ons id id catalogue effec"f
Puppet id id catalogue effec"f
Puppet état actuel catalogue effec"f ac"ons à effectuer
Puppet effectue les ac"ons ac"ons à effectuer
vm dans l état spécifié dans le catalogue Puppet
Puppet Morceaux choisis Installa"on des paquets Installa"on de mysql Créa"on de la db Créa"on de l u"lisateur Installa"on de rbenv Compila"on d une version de ruby
Puppet Morceaux choisis Installa"on des paquets Installa"on de mysql Créa"on de la db Créa"on de l u"lisateur Installa"on de rbenv Compila"on d une version de ruby
Puppet Morceaux choisis Installa"on des paquets Installa"on de mysql Créa"on de la db Créa"on de l u"lisateur Installa"on de rbenv Compila"on d une version de ruby
Puppet Morceaux choisis Installa"on des paquets Installa"on de mysql Créa"on de la db Créa"on de l u"lisateur Installa"on de rbenv Compila"on d une version de ruby
Puppet Morceaux choisis Installa"on des paquets Installa"on de mysql Créa"on de la db Créa"on de l u"lisateur Installa"on de rbenv Compila"on d une version de ruby
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Capistrano But: Déployer l applica"on sur la vm Principe: Exécuter les tâches désirées (task) sur une ou plusieurs vms appartenant à un environnement (stage) Se connecte en ssh à la vm Exécute des commandes en fonc"on de receges décrites dans le code (deploy.rb et deploy/*.rb) Les tâches consistent principalement à déployer une version d une applica"on, venant du SCM. Les stages définissent les environnements des"na"on Références des serveurs Branche du SCM à déployer (trunk ou release par exemple) hgp://www.capistranorb.com/
Capistrano
Capistrano
Capistrano Pour RoR, fournit un ensemble de receges (classes rb) de base qui déploie l applica"on Ges"on de l historique des déploiements Installa"on des dépendances OPT: précompila"on des assets Migra"on du schéma de db Chargement des données ini"ales Redémarrage du démon
Capistrano Pour RoR, fournit un ensemble de receges (classes rb) de base qui déploie l applica"on Ges"on de l historique des déploiements Installa"on des dépendances OPT: précompila"on des assets Migra"on du schéma de db Chargement des données ini"ales Redémarrage du démon
Capistrano Pour RoR, fournit un ensemble de receges (classes rb) de base qui déploie l applica"on Ges"on de l historique des déploiements Installa"on des dépendances OPT: précompila"on des assets Migra"on du schéma de db Chargement des données ini"ales Redémarrage du démon
Capistrano Pour RoR, fournit un ensemble de receges (classes rb) de base qui déploie l applica"on Ges"on de l historique des déploiements Installa"on des dépendances OPT: précompila"on des assets Migra"on du schéma de db Chargement des données ini"ales Redémarrage du démon
Capistrano Pour RoR, fournit un ensemble de receges (classes rb) de base qui déploie l applica"on Ges"on de l historique des déploiements Installa"on des dépendances OPT: précompila"on des assets Migra"on du schéma de db Chargement des données ini"ales Redémarrage du démon
Capistrano Pour RoR, fournit un ensemble de receges (classes rb) de base qui déploie l applica"on Ges"on de l historique des déploiements Installa"on des dépendances OPT: précompila"on des assets Migra"on du schéma de db Chargement des données ini"ales Redémarrage du démon
Capistrano Pour RoR, fournit un ensemble de receges (classes rb) de base qui déploie l applica"on Ges"on de l historique des déploiements Installa"on des dépendances OPT: précompila"on des assets Migra"on du schéma de db Chargement des données ini"ales Redémarrage du démon
Exemples de commandes Capistrano cap [stage] deploy:setup crée la structure de base des répertoires cap [stage] deploy déploie l applica"on et ses dépendances et migre le schéma de db cap [stage] seed charge la db avec les données ini"ales
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Sélection des outils de OPS OUTILS LANGAGES DEVOPS
Specs ops - Applica"on Migra"on Schéma de DB Create table, alter table, Dépendances Ruby Rails, Thin, driver Mysql, Processus Web, Worker, Specs ops - Système Configura"on Paquets à installer, ports, bibliothèques,
Structure du dépôt
Structure du dépôt
Structure du dépôt
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on EXTRAS CONCLUSIONS
DEV - Etape 1
Vagrantfile
vagrant up
DEV - Etape 2
puppet apply
DEV - Etape 3
DEV - Etape 4
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
PROD- Etape 1
bootstrap-aws.sh
PROD - Etape 2
PROD - Etape 2 cap aws deploy:setup
PROD - Etape 3
Contenu du dépôt
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Agenda INTRODUCTION 3 Constats sur le déploiement Impacts Infrastructure as code Ou"ls et langages ILLUSTRATION : Applica"on Ruby on Rails Descrip"on Sélec"on des ou"ls de développement Déploiement sur l environnement de développement Déploiement sur l environnement de produc"on CONCLUSIONS
Infrastructure as code Nécessité d automa"ser les déploiements Développer du code de déploiement Appliquer les méthodes de So8ware Engineering au code de déploiement Conclusions Ou"ls présentés Vagrant: environnement de test des procédures de déploiement Puppet: installa"on des composantes MW nécessaires et configura"on de l OS Capistrano: déploiement du code de l applica"on et de ses dépendances
Avantages Meilleures connaissances des procédures de déploiement Entretenues régulièrement Partagées entre les DEV et OPS Conclusions Réduc"on des régressions Contenu des releases plus pe"ts Releases très régulières Réduc"on du temps entre la correc"on d un bug et sa mise en produc"on Releases très régulières Réduc"on du risque du déploiement Automa"sa"on de déploiement
Difficultés Changement de mé"er pour les OPS => DEV- OPS <= DEV Conclusions Nouveaux langages et ou"ls à maitriser Puppet: Nouveau paradigme : «procédure» => «état» Diagnos"c parfois plus difficile Choix entre réu"lisa"on de modules tout faits et implémenta"on from scratch
Extra: 12 factors Ensemble de bonnes pra"ques éditées par les développeurs de Heroku hgp://12factor.net
Score timetrack
Thank you Merci Remerciements: Orlando CASSANO Michaël VAN DE BORNE et Louis- Marie CROISEZ, pour AWS Nicolas DEVOS, pour les slides Aéropôle de Charleroi-Gosselies Rue des Frères Wright, 29/3 B-6041 Gosselies info@cetic.be www.cetic.be
Extra? Upstart RBENV Puppet master