Industrialisation PHP - Canal+

49
Industrialisation chez Canal+

Transcript of Industrialisation PHP - Canal+

Page 1: Industrialisation PHP - Canal+

Indu

stria

lisat

ion

chez

Can

al+

Page 2: Industrialisation PHP - Canal+

2 2

Sonata Project Lead dev Polyglot: PHP, Python, Go, Javascript, Puppet, etc … @th0masr github.com/rande

Thomas Rabaix Architecte Logiciel ekino.

Page 3: Industrialisation PHP - Canal+

3

La théorie

De l’industrialisation à l’industrialisation

Page 4: Industrialisation PHP - Canal+

4

Page 5: Industrialisation PHP - Canal+

5

Page 6: Industrialisation PHP - Canal+

6 6

Aussi vieux que l’informatique Nouveaux outils Accessibilité des outils

Industrialisation

Page 7: Industrialisation PHP - Canal+

7 7

Accompagnement Provisionning Qualité Automatisation Scalabilité Livraison

Sérénité Confiance Création de valeur Limiter la dette technique Travailler en équipe

Industrialisation

Page 8: Industrialisation PHP - Canal+

8 8

ü  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

Rule of thumb

Page 9: Industrialisation PHP - Canal+

9

Contexte

Comprendre les enjeux

Page 10: Industrialisation PHP - Canal+

10 10

•  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

Page 11: Industrialisation PHP - Canal+

11

Un développeur

Le codeur de vos besoins métiers

Page 12: Industrialisation PHP - Canal+

12 12

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

Page 13: Industrialisation PHP - Canal+

13

Page 14: Industrialisation PHP - Canal+

14 14

Le choix des outils

Page 15: Industrialisation PHP - Canal+

15 15

Contrôle des VMs Wrapper en mode cli de virtualbox, vmware, etc … Machines ISO production Attention à la configuration de vagrant

Vagrant

Page 16: Industrialisation PHP - Canal+

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 …

Page 17: Industrialisation PHP - Canal+

17 17

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

Page 18: Industrialisation PHP - Canal+

18

Page 19: Industrialisation PHP - Canal+

19

Définitions des rôles pour mieux intégrer les modules avec les besoins

Définitions des environnements

Scripts de configurations

Page 20: Industrialisation PHP - Canal+

20 20

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

Page 21: Industrialisation PHP - Canal+

21 21

Readme

Page 22: Industrialisation PHP - Canal+

22 22

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      

   

Page 23: Industrialisation PHP - Canal+

23 23

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

Page 24: Industrialisation PHP - Canal+

24

# setup infra git clone [email protected]:vendor/infra.git . vagrant up --provision # install code vagrant ssh cd /vagrant git clone [email protected]:vendor/code.git . make install

Page 25: Industrialisation PHP - Canal+

25

Page 26: Industrialisation PHP - Canal+

26

Une équipe

La cohérence des solutions réalisées

Page 27: Industrialisation PHP - Canal+

27 27

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

Page 28: Industrialisation PHP - Canal+

28 28

Repos de code Gestion des issues Intégration facile d’outils externes via la gestion des hooks Pull Request

Github

Page 29: Industrialisation PHP - Canal+

29 29

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

Page 30: Industrialisation PHP - Canal+

30 30

Pouce Driven Development Partage des connaissances Accompagnement des nouveaux sur le projet

Github –

Peer Review

Page 31: Industrialisation PHP - Canal+

31 31

Communication et agrégateur de flux Accès rapide à l’information et aux changements S’intègre à des services tiers

Flowdock

Page 32: Industrialisation PHP - Canal+

32

Une infrastructure

Supporte votre projet

Page 33: Industrialisation PHP - Canal+

33

Page 34: Industrialisation PHP - Canal+

34 34

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

Page 35: Industrialisation PHP - Canal+

35 35

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

Page 36: Industrialisation PHP - Canal+

36 36

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

Page 37: Industrialisation PHP - Canal+

37

Page 38: Industrialisation PHP - Canal+

38

Un assistant

… pour automatiser les actions

Page 39: Industrialisation PHP - Canal+

39 39

Ordonnanceur de tâches Permets de lancer •  Les déploiements •  Les tests sur les machines Historisation des lancements des tâches

Jenkins

Page 40: Industrialisation PHP - Canal+

40 40

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

Page 41: Industrialisation PHP - Canal+

41 41

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

Page 42: Industrialisation PHP - Canal+

42

Page 43: Industrialisation PHP - Canal+

43 43

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

Page 44: Industrialisation PHP - Canal+

44

Page 45: Industrialisation PHP - Canal+

45

Page 46: Industrialisation PHP - Canal+

46 46

Accompagnement Provisionning Qualité Automatisation Scalabilité Livraison

Sérénité Confiance Création de valeur Limiter la dette technique Travailler en équipe

Industrialisation

Page 47: Industrialisation PHP - Canal+

47

Comment faire ?

Détruire les mythes

Page 48: Industrialisation PHP - Canal+

48 48

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

Page 49: Industrialisation PHP - Canal+

49

Questions ?