Top Banner
Git Flow: un processus de développement Agile Xavier HAUSHERR
35

Git Flow: un processus de développement Agile

Jun 27, 2015

Download

Technology

Xavier Hausherr

Xavier HAUSHERR, CTO chez Overblog, présentera le processus complet de développement du projet Overblog qui est basé sur les méthodologies suivantes: Scrum, Git Flow, Github, Jenkins, PhpUnit/Symfony pour les tests unitaires, Watir/Cucumber pour les tests fonctionnels. La présentation détaillera la façon dont nous avons adapté Git Flow à Scrum, nos processus de déploiement, de tests ainsi que notre flux de mise en production.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 1. Git Flow: un processus dedveloppement AgileXavier HAUSHERR

2. A proposXavier HAUSHERR CTO Twitter: @xkobal Blog: xavier.over-blog.com 3. Git Flow: un processus de dveloppement AgileLe projet Overblog 4. Qui sommes nous ?N en 2004, Overblog est la plateforme de blogs Europenne n1.Nous sommes la premire plateforme a avoir mis en place le partagede revenu publicitaire gnr par laudience.La nouvelle version est sortie en Juin 2012 avec un trs bon retour desblogueurs. Elle ne cesse depuis dvoluer fonctionnellement.Cest aussi: 3 millions de blogs dans 5 langues 38 millions de visiteurs uniques par mois 275 millions pages vues par mois 16me audience franaise Plus de 80 serveurs pour servir les blogs 5. Nom de code KiwiRefonte complte du produitUne forte orientation vers les rseaux sociauxUne quipe de 10 personnesUtilisation de nouvelles technologiesNouvelle architectureUn projet orient service7 mois de dveloppement1 anne dvolutionSortie de nouvelles fonctionalits avant lt 6. Git Flow: un processus de dveloppement AgileDu cycle en V lagilit 7. Evolution du process - Planning en V - Gantt - Flou au dmarrage - Manque de spcications fonctionnelles - Evolution trs rapide des besoins produits Scrum 8. Equipe Scrum Dveloppeurs Scrum Master Product Owner Business Owner Stackholders Quality Manager 9. Scrum 10. Dtail dun sprint Scrum chez OverblogSemaine 1 Lundi MardiMercredi JeudiVendrediSprint Planning Daily MeetingDaily MeetingDaily MeetingDaily Meeting Mise en Prod Release n-1Poker PlanningPoker PlanningSemaine 2 Lundi MardiMercredi JeudiVendrediDaily Meeting Daily MeetingDaily MeetingDaily MeetingDaily MeetingDebug / Refacto Debug / RefactoDemo Code ReviewPoker Planning Feature FreezeRetrospective 11. Nos besoins de dveloppement AgileCoder sans mettre en pril le projetTravailler deux ou plus sur des featuresTester chaque fonctionnalit avant mise en productionIntgration continue pour certaines fonctionnalitsRelease pour les grosses fonctionnalitsGestion des urgencestre accept par lquipe Scrum 12. Git Flow: un processus de dveloppement Agilefeature-*master release-*hotx-* stableTag 1.0 BugxesProductionTag 1.1+ Intgration continueTag 1.2Intgration continueTag 1.3Git Flow Github Flowfeature-*master release-*hotx-* stable Feature forRelease 0 next releaseTag 1.0 Feature for future release Bugxes=ProductionTag 1.1Intgration continueOverblog FlowTag 1.2 Start of Feature release Freeze branch for 2.0Onlybugxes ! Mise enTag 2.0production 13. Git flowfeature-*developrelease-* hotx-* master Feature forRelease 0 next release Tag 1.0 Feature for future releaseBugxes Production Tag 1.1Start of Featurerelease Freezebranch for2.0 Only bugxes ! Mise en Tag 2.0productionhttp://nvie.com/posts/a-successful-git-branching-model/ 14. Git flowfeature-*develop Feature forRelease 0 next release Feature branches 15. Git flow feature-* develop release-*masterRelease 0Tag 1.0Start of Featurerelease Freezebranch for2.0 Only bugxes ! Mise en Tag 2.0production Release branches 16. Git flowfeature-* develop release-*masterRelease 0 Tag 1.0 Feature for future release Start of Feature release Freeze branch for 2.0 Mise enTag 2.0productionLong feature branches 17. Git flow develop hotx-* masterRelease 0 Tag 1.0 BugxesProductionTag 1.1Hotfix branches 18. Nos besoins de dveloppement AgileCoder sans mettre en pril le projetTravailler deux ou plus sur des featuresTester chaque fonctionnalit avant mise en productionIntgration continue pour certaines fonctionnalitsRelease pour les grosses fonctionnalitsGestion des urgencestre accept par lquipe Scrum Connection dcentralise Merge compliqu Qui merge ? Quand tester ? 19. Github Flowfeature-*master develop release-*hotx-*stable master Feature forRelease 0 next releaseTag 1.0 Feature for future releaseBugxes ProductionTag 1.1Intgration continueTag 1.2 Start of Feature release Freeze branch for 2.0Onlybugxes ! Mise enIntgration continueTag 1.32.0productionScott Chacon software developer & Git evangelist @Github http://scottchacon.com/2011/08/31/github-ow.html 20. Github Flowfeature-* master release-*hotx-*stableTag 1.0Bugxes ProductionTag 1.1Intgration continueTag 1.2Intgration continueTag 1.3Scott Chacon software developer & Git evangelist @Github http://scottchacon.com/2011/08/31/github-ow.html 21. Nos besoins de dveloppement AgileCoder sans mettre en pril le projetTravailler deux ou plus sur des featuresTester chaque fonctionnalit avant mise en productionIntgration continue pour certaines fonctionnalitsRelease pour les grosses fonctionnalitsGestion des urgencestre accept par lquipe Scrum Plus de release 22. Overblog Flowfeature-*develop masterrelease-*hotx-* masterstable Feature forRelease 0 next release Tag 1.0 Feature for future releaseBugxes Production Tag 1.1 Intgration continue Tag 1.2Start of Featurerelease Freezebranch for2.0 Only bugxes ! Mise en Tag 2.0production 23. Overblog Flowfeature-*master release-*hotx-* stable Feature forRelease 0 next releaseTag 1.0 Feature for future release BugxesProductionTag 1.1Intgration continueTag 1.2 Start of Feature release Freeze branch for 2.0Onlybugxes ! Mise enTag 2.0production 24. Git Flow: un processus de dveloppement AgileLes Tests unitaires et fonctionnels 25. Un processus de dploiement AgileProd ServerFunc tion a l Tests ProductiondeliveryTe ststio nal c Fun Run Unit Tests Quality Manager V Vall idda at e ets & &es MlT errgna geeStaging Server ioPuPu ctn lll R Fu Req q u ue UnitststTestssts Pull RequeTest ServerDevelopers Product Owner 26. Un processus de dploiement AgileProd ServerFunc tion a l Tests ProductiondeliveryTe ststio nal c Fun Run Unit Tests Quality Manager V Vall idda at e ets & &es MlT errgna geeStaging Server ioPuPu ctn lll R Fu Req q u ue UnitststTestssts Pull RequeTest ServerDevelopers Product Owner 27. Un processus de dploiement AgileProd ServerFunc tion a l Tests ProductiondeliveryTe ststio nal c Fun Run Unit Tests Quality Manager V Vall idda at e ets & &es MlT errgna geeStaging Server ioPuPu ctn lll R Fu Req q u ue UnitststTestssts Pull RequeTest ServerDevelopers Product Owner 28. Un processus de dploiement AgileProd ServerFunc tion a l Tests ProductiondeliveryTe ststio nal c Fun Run Unit Tests Quality Manager V Vall idda at e ets & &es MlT errgna geeStaging Server ioPuPu ctn lll R Fu Req q u ue UnitststTestssts Pull RequeTest ServerDevelopers Product Owner 29. Un processus de dploiement AgileProd ServerFunc tion a l Tests ProductiondeliveryTe ststio nal c Fun Run Unit Tests Quality Manager V Vall idda at e ets & &es MlT errgna geeStaging Server ioPuPu ctn lll R Fu Req q u ue UnitststTestssts Pull RequeTest ServerDevelopers Product Owner 30. Tests unitaires PHPPHPUnitEnvironnement de test Symfony 2Lancs par jenkinsnamespace OverblogBlogBlogBundleTestsTwigNodeVisitor;use OverblogBlogBlogBundleTwigNodeVisitorMethodCallOptimizerNodeVisitor;class MethodCallOptimizerNodeVisitorTest extends PHPUnit_Framework_TestCase{public function testSingle(){$env = $this->getTwig(array(tpl => {{ foo.bar }}));$env->addNodeVisitor(new MethodCallOptimizerNodeVisitor(array( array(foo, getbar))));$src = $env->getLoader()->getSource(tpl);$php = $env->compileSource($src, tpl);$this->assertContains($context["foo"]->getbar(),$php);}} 31. Tests unitaires JavascriptYUI TestLancs par jenkinsNavigateur Chromium dans un environnement VLCvar suite = new Y.Test.Suite("Timeline : TimelineView");suite.add(new Y.Test.Case({name: "Test TimelineView",testRender: function (){Y.Assert.areEqual(4,Y.all(.statuses button).size());Y.Assert.areEqual(2,Y.all(.class button).size());Y.Assert.areEqual(3,Y.all(.advanced select).size());},});Y.Test.Runner.add(suite); 32. Tests fonctionnelsCucumberLancs par jenkinsNavigateurs controls par Watir@comment @ieScenario: I can add a commentWhen I connect to my comment accountWhen I initialize a post with title "Test comments" and text "You can comment"When I publishThen I see success message "POST_PUBLISHED"Then I need to sleep a littleGiven I visit my comment blogWhen I open article "Test comments"Then I dont see errorsWhen I add a comment with:| name| text || Anonym comment | This article is top |Then I dont see errorsThen I should see "Your comment has been published"Given I visit my comment blogWhen I open article "Test comments"Then I see comment:| name| text || Anonym comment | This article is top |When I goto adminWhen I delete the article with:| title || Test comments |Then I see success message "POST_DELETED" 33. Tests fonctionnels 34. Rsultats des tests 35. Merci pour votre attentionQuestions? Prenez le temps de crer votre blog surwww.over-blog.com