Git Flow: un processus de développement Agile

Post on 27-Jun-2015

4798 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.

Transcript

Git Flow: un processus de développement Agile

Xavier HAUSHERR

A propos

Xavier HAUSHERRCTO

Twitter: @xkobalBlog: xavier.over-blog.com

Git Flow: un processus de développement Agile

Le projet Overblog

Qui sommes nous ?

C’est aussi:3 millions de blogs dans 5 langues38 millions de visiteurs uniques par mois

275 millions pages vues par mois16ème audience française

Plus de 80 serveurs pour servir les blogs

Né en 2004, Overblog est la plateforme de blogs Européenne n°1.

Nous sommes la première plateforme a avoir mis en place le partage de revenu publicitaire généré par l’audience.

La nouvelle version est sortie en Juin 2012 avec un très bon retour des blogueurs. Elle ne cesse depuis d’évoluer fonctionnellement.

Nom de code «Kiwi»

Refonte complète du produitUne forte orientation vers les réseaux sociauxUne équipe de 10 personnes

Utilisation de nouvelles technologiesNouvelle architectureUn projet orienté service

7 mois de développement1 année d’évolutionSortie de nouvelles fonctionalités avant l’été

Evolution du process

- Planning en V - Gantt- Flou au démarrage- Manque de spécifications fonctionnelles- Evolution très rapide des besoins produits

Scrum

Equipe Scrum

• Développeurs

• Scrum Master

• Product Owner

• Business Owner

• Stackholders

• Quality Manager

Scrum

Détail d’un sprint Scrum chez Overblog

VendrediJeudiMercrediMardiLundiSemaine 1

Sprint Planning

Mise en Prod Release n-1

Daily MeetingDaily Meeting Daily Meeting

Poker Planning

Daily Meeting

Poker Planning

VendrediJeudiMercrediMardiLundiSemaine 2

Daily Meeting

Poker Planning

Daily Meeting

Debug / Refacto

Code Review

Retrospective

Daily Meeting

Feature Freeze

Daily Meeting

Debug / Refacto

Demo

Daily Meeting

Nos besoins de développement Agile

Coder sans mettre en péril le projetTravailler à deux ou plus sur des featuresTester chaque fonctionnalité avant mise en productionIntégration continue pour certaines fonctionnalitésRelease pour les grosses fonctionnalitésGestion des urgencesÊtre accepté par l’équipe Scrum

Git Flow: un processus de développement Agile

feature-* master release-* hotfix-* stable

Release 0

Feature Freeze

Mise en production

Tag 1.0

Tag 1.1

Tag 1.2

Tag 2.0

Bugfixes Production

Start of release

branch for 2.0

Feature for future release

Feature for next release

Only bugfixes !

Intégration continue

Tag 1.0

Tag 1.1

Tag 1.2

Tag 1.3

Bugfixes Production

Intégration continue

Intégration continue

feature-* master release-* hotfix-* stable

=Overblog Flow

+Git Flow Github Flow

Git !ow

http://nvie.com/posts/a-successful-git-branching-model/

feature-* release-* hotfix-* master

Release 0

Feature Freeze

Mise en production

Tag 1.0

Tag 1.1

Tag 2.0

Bugfixes Production

Start of release

branch for 2.0

Feature for future release

Feature for next release

Only bugfixes !

develop

Git !ow

Feature branches

feature-* develop

Release 0Feature for

next release

Git !ow

Release branches

Release 0

Feature Freeze

Mise en production

Tag 1.0

Tag 2.0

Start of release

branch for 2.0

Only bugfixes !

feature-* develop release-* master

Git !ow

Long feature branches

Release 0

Feature Freeze

Mise en production

Tag 1.0

Tag 2.0

Start of release

branch for 2.0

Feature for future release

feature-* develop release-* master

Git !ow

Hot!x branches

Release 0 Tag 1.0

Tag 1.1

Bugfixes Production

develop masterhotfix-*

Nos besoins de développement Agile

Connection décentraliséeMerge compliquéQui merge ?Quand tester ?

Coder sans mettre en péril le projetTravailler à deux ou plus sur des featuresTester chaque fonctionnalité avant mise en productionIntégration continue pour certaines fonctionnalitésRelease pour les grosses fonctionnalitésGestion des urgencesÊtre accepté par l’équipe Scrum

Tag 1.0

Tag 1.1

Tag 1.2

Tag 1.3

Bugfixes Production

Intégration continue

Intégration continue

feature-* master release-* hotfix-* stable

Github Flow

Scott Chaconsoftware developer & Git evangelist @Github

http://scottchacon.com/2011/08/31/github-flow.html

feature-* release-* hotfix-* master

Release 0

Feature Freeze

Mise en production

Tag 1.0

Tag 1.1

Tag 2.0

Bugfixes Production

Start of release

branch for 2.0

Feature for future release

Feature for next release

Only bugfixes !

develop

Tag 1.0

Tag 1.1

Tag 1.2

Tag 1.3

Bugfixes Production

Intégration continue

Intégration continue

feature-* master release-* hotfix-* stable

Github Flow

Scott Chaconsoftware developer & Git evangelist @Github

http://scottchacon.com/2011/08/31/github-flow.html

Nos besoins de développement Agile

Plus de release

Coder sans mettre en péril le projetTravailler à deux ou plus sur des featuresTester chaque fonctionnalité avant mise en productionIntégration continue pour certaines fonctionnalitésRelease pour les grosses fonctionnalitésGestion des urgencesÊtre accepté par l’équipe Scrum

Overblog Flowfeature-* master release-* hotfix-* stable

Release 0

Feature Freeze

Mise en production

Tag 1.0

Tag 1.1

Tag 1.2

Tag 2.0

Bugfixes Production

Start of release

branch for 2.0

Feature for future release

Feature for next release

Only bugfixes !

Intégration continue

feature-* release-* hotfix-* master

Release 0

Feature Freeze

Mise en production

Tag 1.0

Tag 1.1

Tag 2.0

Bugfixes Production

Start of release

branch for 2.0

Feature for future release

Feature for next release

Only bugfixes !

develop

Overblog Flowfeature-* master release-* hotfix-* stable

Release 0

Feature Freeze

Mise en production

Tag 1.0

Tag 1.1

Tag 1.2

Tag 2.0

Bugfixes Production

Start of release

branch for 2.0

Feature for future release

Feature for next release

Only bugfixes !

Intégration continue

Git Flow: un processus de développement Agile

Les Tests unitaires et fonctionnels

Un processus de déploiement Agile

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Prod Server

Functional Tests

Productiondelivery

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Developers

Unit Tests

Run Unit Tests

Developers

Unit Tests

Un processus de déploiement Agile

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Prod Server

Functional Tests

Productiondelivery

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Developers

Unit Tests

Run Unit Tests

Developers

Unit Tests

Un processus de déploiement Agile

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Prod Server

Functional Tests

Productiondelivery

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Developers

Unit Tests

Run Unit Tests

Developers

Unit Tests

Un processus de déploiement Agile

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Prod Server

Functional Tests

Productiondelivery

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Developers

Unit Tests

Run Unit Tests

Developers

Unit Tests

Un processus de déploiement Agile

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Prod Server

Functional Tests

Productiondelivery

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Staging Server

Functional Tests

Validate & Merge Pull Request

Developers

Unit Tests

Run Unit Tests

Test Server Product Owner

Quality Manager

Functi

onal

Tests

Pull Requests

Developers

Unit Tests

Run Unit Tests

Developers

Unit Tests

Tests unitaires PHP

PHPUnit

Environnement de test Symfony 2

Lancés par jenkinsnamespace OverblogBlog\BlogBundle\Tests\Twig\NodeVisitor;

use OverblogBlog\BlogBundle\Twig\NodeVisitor\MethodCallOptimizerNodeVisitor;

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 ); }}

Tests unitaires Javascript

YUI Test

Lancés par jenkins

Navigateur 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);

Tests fonctionnels

Cucumber

Lancés par jenkins

Navigateurs controlés par Watir@comment @ieScenario: I can add a comment When I connect to my comment account When I initialize a post with title "Test comments" and text "You can comment" When I publish Then I see success message "POST_PUBLISHED" Then I need to sleep a little Given I visit my comment blog When I open article "Test comments" Then I don't see errors When I add a comment with: | name | text | | Anonym comment | This article is top | Then I don't see errors Then I should see "Your comment has been published" Given I visit my comment blog When I open article "Test comments" Then I see comment: | name | text | | Anonym comment | This article is top | When I goto admin When I delete the article with: | title | | Test comments | Then I see success message "POST_DELETED"

Tests fonctionnels

Résultats des tests

Merci pour votre attention

Questions?

Prenez le temps de créer votre blog sur www.over-blog.com

top related