L'intégration continue est morte ?

Vive le déploiement continu !

Rémi Alvado / @remialvado / Shopping Adventure

Principe : faire des petits pas

Waterfall

Agile

Continuous Deployment

Objectifs

  • Créer de la valeur dès que possible pour l'utilisateur.
  • Réduire le temps de debug et augmenter celui de création de valeur
  • Arrêter de faires des releases Big bang
  • Arrêter de perdre son temps avec des branches, rebase, merge, cherry-pick, ...
  • Rendre vos tests utiles

Les étapes

Layer 1 Tests automatisés Déploiement automatisé du serveur Déploiement automatisé de l'infra Déploiement automatisé du code Rollback automatique

Déploiement automatisé du code - Outils

  • Bash
  • Perl / Ruby
  • Capistrano / Capifony
  • Puppet / Chef

Chef

  • Solution Open Source + SaaS
  • Ruby + DSL
  • Rôle, Noeuds et Recettes
  • Nombreuses recettes open source

Chef - Example

deploy_revision "website" do
 user app['owner']
 group app['group']
 deploy_to ::File.join('/home/kbrw',#{app[:id]})
 repository app['repository']
 revision 'master'
 template "#{release_path}/app/config/parameters.yml" do
  source "#{release_path}/app/config/parameters.yml.erb"
   variables(
    :specificConfiguration => app['specificConfiguration']
   )
 end
 template "#{node[:apache][:dir]}/sites-available/website.conf" do
  source "#{release_path}/app/Resources/apache/website.conf.erb"
  owner "root"
  group "root"
  variables( 
   :docroot => ::File.join(app['deploy_to'],'current/web'),
  )
 done
done
service "apache2" do action :restart; end

Déploiement automatisé du code - Conseils

  • Faites le tout de suite - Sprint 0.
  • Construisez petit à petit.
  • Utilisez la même méthode en QA.
  • Refusez de tricher ou de court-circuiter.
  • Automatisez tout avec de revenir au "push-button"
  • Procédure de rollback

Tests automatiques - Conseils

  • Feedback, feedback, feedback, ...
  • Tourner les tests sur du code déployé
  • Iso-prod en QA et en Dev

Déploiement automatisé du Serveur

include_recipe "php"
include_recipe "apache"

deploy_revision "website" do
 user app['owner']
 group app['group']
 deploy_to ::File.join('/home/kbrw',#{app[:id]})
 repository app['repository']
 revision 'master'
 template "#{release_path}/app/config/parameters.yml" do
  source "#{release_path}/app/config/parameters.yml.erb"
   variables(
    :specificConfiguration => app['specificConfiguration']
   )
 end
 template "#{node[:apache][:dir]}/sites-available/website.conf" do
  source "#{release_path}/app/Resources/apache/website.conf.erb"
  owner "root"
  group "root"
  variables( 
   :docroot => ::File.join(app['deploy_to'],'current/web'),
  )
 done
done
service "apache2" do action :restart; end

Déploiement automatisé de l'infra - Outils

  • Cloud Public : EC2, Heroku, ...
  • Bash
  • Puppet / Chef
  • Open Stack / Cloud Stack

Déploiement automatisé de l'infra - Conseils

  • Rien de manuel !
  • Pas besoin de recette de mise à jour
  • Attention au réseau
  • Avoir des compétences de sysadmin

Rollback & Blue Green

Questions ?

Fork me on GitHub