Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
Industrialisation PHP - Canal+
-
Upload
ekino -
Category
Technology
-
view
885 -
download
2
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 [email protected]:vendor/infra.git . vagrant up --provision # install code vagrant ssh cd /vagrant git clone [email protected]: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 ?