Industrialisation PHP - Canal+

Post on 20-Jul-2015

885 views 2 download

Transcript of Industrialisation PHP - Canal+

Indu

stria

lisat

ion

chez

Can

al+

2 2

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

Thomas Rabaix Architecte Logiciel ekino.

3

La théorie

De l’industrialisation à l’industrialisation

4

5

6 6

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

Industrialisation

7 7

Accompagnement Provisionning Qualité Automatisation Scalabilité Livraison

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

Industrialisation

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

9

Contexte

Comprendre les enjeux

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

11

Un développeur

Le codeur de vos besoins métiers

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

13

14 14

Le choix des outils

15 15

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

Vagrant

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

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

19

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

Définitions des environnements

Scripts de configurations

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

21 21

Readme

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      

   

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

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

26

Une équipe

La cohérence des solutions réalisées

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

28 28

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

Github

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

30 30

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

Github –

Peer Review

31 31

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

Flowdock

32

Une infrastructure

Supporte votre projet

33

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

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

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

37

38

Un assistant

… pour automatiser les actions

39 39

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

Jenkins

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

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

42

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

44

45

46 46

Accompagnement Provisionning Qualité Automatisation Scalabilité Livraison

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

Industrialisation

47

Comment faire ?

Détruire les mythes

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

49

Questions ?