Industrialisation PHP - Canal+

2 346 vues

Publié le

Présentation de l'industrialisation d'une application PHP mise en place chez Canal+

Publié dans : Technologie
0 commentaire
7 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 346
Sur SlideShare
0
Issues des intégrations
0
Intégrations
108
Actions
Partages
0
Téléchargements
29
Commentaires
0
J’aime
7
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Industrialisation PHP - Canal+

  1. 1. Industrialisation chezCanal+
  2. 2. 22 Sonata Project Lead dev Polyglot: PHP, Python, Go, Javascript, Puppet, etc … @th0masr github.com/rande ThomasRabaix ArchitecteLogiciel ekino.
  3. 3. 3 Lathéorie Del’industrialisationàl’industrialisation
  4. 4. 4
  5. 5. 5
  6. 6. 66 Aussi vieux que l’informatique Nouveaux outils Accessibilité des outils Industrialisation
  7. 7. 77 Accompagnement Provisionning Qualité Automatisation Scalabilité Livraison Sérénité Confiance Création de valeur Limiter la dette technique Travailler en équipe Industrialisation
  8. 8. 88 ü  Respecter les standards ü  Ne pas réinventer la roue ü  Sélectionner vos outils ü  Créer un workflow ü  Ne jamais casser ce workflow ü  Automatiser ce workflow Ruleof thumb
  9. 9. 9 Contexte Comprendrelesenjeux
  10. 10. 1010 •  Mise en place d’une nouvelle plateforme web •  Intégrer plusieurs projets Canal+ •  Être plus efficace pour les livraisons •  Avoir de la visibilité sur les développements •  Réversibilité facile Enjeux
  11. 11. 11 Undéveloppeur Lecodeurdevosbesoinsmétiers
  12. 12. 1212 Utilisation des outils standards PHP •  Respecter les normes PSR-X •  Composer Utilisation des outils front •  Npm, Bower et Gulp •  Babel (ECMA 6), ReactJS Editeur •  PHPStorm (Gratuit pour les projets open source) •  Autocomplete, service définition Développement
  13. 13. 13
  14. 14. 1414 Lechoixdesoutils
  15. 15. 1515 Contrôle des VMs Wrapper en mode cli de virtualbox, vmware, etc … Machines ISO production Attention à la configuration de vagrant Vagrant
  16. 16. 16 Est il possible d’écrire une documentation d’installation des outils suivant ? composer, php, php-fpm, phpunit, blackfire/xdebug/ xhprof, lib oracle, jvm, elasticsearch, redis, ruby, puppet, jenkins, plugins jenkins, node, npm, sass, bower, python, supervisor, mysql, apache, nginx, varnish, haproxy, vim, tmux, capistrano, gulp, sensu, supervisord, graphite, grafana, rabbitmq, jasmine, fluentd, behat, htop, iotop, fail2ban, memcached, mongodb, cron, postgresql, ulimit, pip, rvm, virtualenv, gunicorn, logrotate, dns, ntp, postfix, collectd, logstash, iptable, shorewall …
  17. 17. 1717 Infra-as-Code: Définitions de configurations systèmes On peut supprimer facilement les machines et les remonter. Utilisation des modules de la communauté et enrichissement grâce aux rôles: http_role, http_cache_role, php_role, deploy_role, ci_role, … La doc est dans le repository d’infra, suit les changements d’infra; pas de décalage Outil de provisioning de machines Puppet
  18. 18. 18
  19. 19. 19 Définitions des rôles pour mieux intégrer les modules avec les besoins Définitions des environnements Scripts de configurations
  20. 20. 2020 Permets aux développeurs de se concentrer sur le code et pas sur la configuration d’outils Le code puppet utilisé sera le même sur l’ensemble des environnements Détection très tôt des problèmes possibles sur la production. Vagrant + Puppet
  21. 21. 2121 Readme
  22. 22. 2222 Point d’entrée principal pour toutes les commandes du projet Simplification des docs « make install » Makefile test-­‐unit:          ./bin/phpunit  -­‐-­‐testsuite=unit     test-­‐front:          cd  ./assets_src  &&  gulp  karma     test-­‐behat:          ./bin/qa_behat.sh     test-­‐all:  test-­‐unit  test-­‐front  test-­‐behat       optimize:  composer-­‐optimize  clean  assets     composer-­‐optimize:          composer  dump-­‐autoload  -­‐o          
  23. 23. 2323 Pourquoi tester ? •  S’assurer que le code fonctionne correctement •  Permets de refactoriser le code •  « Sorte de documentation » d’usage du code Les outils •  Tests unitaires: PHPUnit •  Tests fonctionnels: Behat + Selenium Tests
  24. 24. 24 # setup infra git clone git@github.com:vendor/infra.git .
 vagrant up --provision
 # install code vagrant ssh
 cd /vagrant git clone git@github.com:vendor/code.git . make install
  25. 25. 25
  26. 26. 26 Uneéquipe Lacohérencedessolutionsréalisées
  27. 27. 2727 L’industrialisation est également une histoire de méthodologie Accepter par les personnes de l’équipe. Echange efficace de l’information, pas de perte de temps Tout le monde peut voir le statut du projet Transparence des choix lors des réunions Permets de se concentrer sur les futurs besoins Méthodologie Agile
  28. 28. 2828 Repos de code Gestion des issues Intégration facile d’outils externes via la gestion des hooks Pull Request Github
  29. 29. 2929 Pas de commits dans le master / develop Zone tampon pour échanger sur le code Chaque PR doit avoir : •  Des tests •  De la documentation •  Du code Github – Pull Request
  30. 30. 3030 Pouce Driven Development Partage des connaissances Accompagnement des nouveaux sur le projet Github – Peer Review
  31. 31. 3131 Communication et agrégateur de flux Accès rapide à l’information et aux changements S’intègre à des services tiers Flowdock
  32. 32. 32 Uneinfrastructure Supportevotreprojet
  33. 33. 33
  34. 34. 3434 Machines et Réseaux Services Bases de données Amazon Web Services Amazon EC2 Amazon VPC Elastic Load Balancing Amazon Route 53 Amazon S3 Amazon EBS Amazon RDS Redis
  35. 35. 3535 Définition des instances dans Cloud Formation Autoscaling pour les montées en charge de la production Destruction des environnements non critiques en heures non ouvrées Amazon Web Services
  36. 36. 3636 Le provisionnement des machines est lancé automatiquement lors de la création des instances EC2. Utilisation de l’outil en mode masterless Pas d’AMI prébuildé (pas le besoin pour le moment) Puppet
  37. 37. 37
  38. 38. 38 Unassistant …pourautomatiserlesactions
  39. 39. 3939 Ordonnanceur de tâches Permets de lancer •  Les déploiements •  Les tests sur les machines Historisation des lancements des tâches Jenkins
  40. 40. 4040 Outil de déploiement Tâches lancés en parallèle sur les serveurs Gestion de rôles et d’environnements Utilisation des tags aws pour dynamiquement charger les rôles des machines Capistrano
  41. 41. 4141 1.  Connexion sur le serveur de test 2. Déploiement de l’applicatif: chargement des dépendances et lancement des tests 3. Récupération des rapports pour consolidation sur le serveur jenkins 4. Push du code dans un répository de build Tests
  42. 42. 42
  43. 43. 4343 Déploiement sur la dev 1.  Si les tests sont verts alors on push sur la dev automatiquement 2. Recette possible par les ingénieurs / consultants / clients Déploiement sur la production 1.  Les PO taggent la release sur github 2. Lance une tâche jenkins avec la release 3. Wait and See … Releases
  44. 44. 44
  45. 45. 45
  46. 46. 4646 Accompagnement Provisionning Qualité Automatisation Scalabilité Livraison Sérénité Confiance Création de valeur Limiter la dette technique Travailler en équipe Industrialisation
  47. 47. 47 Commentfaire? Détruirelesmythes
  48. 48. 4848 Etape 0 •  L’équipe doit pousser les actions •  On définit la vision cible, et les étapes pour y arriver Etape 1: la base •  A faire : tests, respecter les normes de codages •  Déploiement: Utilisation de Capistrano Etape 2: code review •  On arrête de faire un push sur le master •  Pull Request •  Utilisation des fonctions de Github Etape 3: automatisation •  On rajoute Jenkins pour ordonnancer les tâches •  On rajoute des outils de notifications Etape 4: provisioning •  On utilise Puppet pour gérer l’infra •  On forme les équipes de Dev à parler avec les Ops Etape 5: amélioration •  On améliore les étapes précédentes
  49. 49. 49 Questions?

×