Industrialisation
chezCanal+
22
Sonata Project Lead dev
Polyglot: PHP, Python, Go,
Javascript, Puppet, etc …
@th0masr
github.com/rande
ThomasRabaix
ArchitecteLogiciel
ekino.
3
Lathéorie
Del’industrialisationàl’industrialisation
4
5
66
Aussi vieux que l’informatique
Nouveaux outils
Accessibilité des outils
Industrialisation
77
Accompagnement
Provisionning
Qualité
Automatisation
Scalabilité
Livraison
Sérénité
Confiance
Création de valeur
Limiter la dette technique
Travailler en équipe
Industrialisation
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
Contexte
Comprendrelesenjeux
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
Undéveloppeur
Lecodeurdevosbesoinsmétiers
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
1414
Lechoixdesoutils
1515
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 …
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
19
Définitions des rôles pour
mieux intégrer les modules
avec les besoins
Définitions des environnements
Scripts de configurations
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
2121
Readme
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	
  
	
  
	
  
	
  
	
  
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
# 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
Lacohérencedessolutionsréalisées
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
2828
Repos de code
Gestion des issues
Intégration facile d’outils externes via la gestion des
hooks
Pull Request
Github
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
3030
Pouce Driven Development
Partage des connaissances
Accompagnement des nouveaux sur le projet
Github
–
Peer
Review
3131
Communication et agrégateur de flux
Accès rapide à l’information et aux changements
S’intègre à des services tiers
Flowdock
32
Uneinfrastructure
Supportevotreprojet
33
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
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
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
38
Unassistant
…pourautomatiserlesactions
3939
Ordonnanceur de tâches
Permets de lancer
•  Les déploiements
•  Les tests sur les machines
Historisation des lancements des tâches
Jenkins
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
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
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
45
4646
Accompagnement
Provisionning
Qualité
Automatisation
Scalabilité
Livraison
Sérénité
Confiance
Création de valeur
Limiter la dette technique
Travailler en équipe
Industrialisation
47
Commentfaire?
Détruirelesmythes
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
Questions?

Industrialisation PHP - Canal+

  • 1.
  • 2.
    22 Sonata Project Leaddev Polyglot: PHP, Python, Go, Javascript, Puppet, etc … @th0masr github.com/rande ThomasRabaix ArchitecteLogiciel ekino.
  • 3.
  • 4.
  • 5.
  • 6.
    66 Aussi vieux quel’informatique Nouveaux outils Accessibilité des outils Industrialisation
  • 7.
  • 8.
    88 ü  Respecter lesstandards ü  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.
  • 10.
    1010 •  Mise enplace 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.
  • 12.
    1212 Utilisation des outilsstandards 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.
  • 15.
    1515 Contrôle des VMs Wrapperen mode cli de virtualbox, vmware, etc … Machines ISO production Attention à la configuration de vagrant Vagrant
  • 16.
    16 Est il possibled’é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.
    1717 Infra-as-Code: Définitions deconfigurations 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.
    19 Définitions des rôlespour mieux intégrer les modules avec les besoins Définitions des environnements Scripts de configurations
  • 20.
    2020 Permets aux développeursde 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.
  • 22.
    2222 Point d’entrée principalpour 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.
    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 # setup infra gitclone 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.
  • 27.
    2727 L’industrialisation est égalementune 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.
    2828 Repos de code Gestiondes issues Intégration facile d’outils externes via la gestion des hooks Pull Request Github
  • 29.
    2929 Pas de commitsdans 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.
    3030 Pouce Driven Development Partagedes connaissances Accompagnement des nouveaux sur le projet Github – Peer Review
  • 31.
    3131 Communication et agrégateurde flux Accès rapide à l’information et aux changements S’intègre à des services tiers Flowdock
  • 32.
  • 33.
  • 34.
    3434 Machines et Réseaux Services Basesde données Amazon Web Services Amazon EC2 Amazon VPC Elastic Load Balancing Amazon Route 53 Amazon S3 Amazon EBS Amazon RDS Redis
  • 35.
    3535 Définition des instancesdans 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.
    3636 Le provisionnement desmachines 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.
  • 39.
    3939 Ordonnanceur de tâches Permetsde lancer •  Les déploiements •  Les tests sur les machines Historisation des lancements des tâches Jenkins
  • 40.
    4040 Outil de déploiement Tâcheslancé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.
    4141 1.  Connexion surle 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.
    4343 Déploiement sur ladev 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.
  • 47.
  • 48.
    4848 Etape 0 •  L’équipedoit 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.