Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp Paris 2013

download Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp Paris 2013

If you can't read please download the document

Transcript of Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp Paris 2013

Gestion de projet Drupal :
quelques outils indispensables

Pierre Ternon

Open Web Solutions

Bonjour!

Pierre Ternon

Associ fondateur, grant

Open Web Solutions

Plan de la prsentation

Spcifications

Redmine

Versionnement

Drush

Dploiement

Communication

Tests et monte en charge

Spcifications

Spcifications fonctionnelles sous Axure:

Lisibilit pour le client

Maquette interactive cliquable

Annotations et commentaires

Spcifications techniques

Types de contenus

Configuration du Drupal, taxonomies

Modules utiliss, paramtrages, dveloppements spcifiques

Modules custom

Services divers

Spc. gestion documentaire

et dj Redmine pendant cette phase: gestion documentaire et Wiki

CR de runions, CR ateliers:

Mise disposition de la prparation en amont

Mise disposition du CR en aval

Informations projet diverses, client comme quipe de dveloppement:

Intervenants, coordonnes

Instances serveurs, repository Git, etc.

Livrables, documents divers (spcifications)

Guidelines Redmine pour le projet (workflow des demandes, process d'changes avec le client)

Guidelines dveloppement (coding standards, rgles de nommage, organisation des fichiers, etc.)

CR runions de dv

Liste de fichiers catgorise

Spc. gestion documentaire

Avantages:

Souplesse de rdaction / dition, ajout de rubriques, liens

Simplicit du langage wiki utilis

Authentification Redmine par projet (scurit) et gestion des rles/permissions

Page Wiki

Page dition Wiki

Redmine - prsentation

Redmine est organis autour de projets (et sous-projets)

Redmine - prsentation

Gestion utilisateurs, rles, permissions et alertes emails

Redmine - prsentation

Modules et plugins activables par projet

Redmine - demande

Sujet / description / fichiers joints

Type (paramtrage global): Bug / Tache / Assistance / Spcifications Category au sens d.o

Statut (paramtrage global Status au sens d.o) / Assignation (Assigned d.o) / Catgorie (paramtrage par projet Component d.o): au cur du process de gestion des tickets

Dates(dbut, chance): idal pour les planning (gantt) de dveloppement

Temps estim/ Temps pass : TMA

Pourcentage de ralisation: utile tout au long de la phase de dveloppement, TMA comprise

Liens entre les taches: tache parente, tache lie

Commentaire chaque changement de statut

Segmentation et organisation des tches Workflow de traitement des taches Traabilit des dveloppements et volutions

Redmine - demande

Liste de demandes: vues paramtrables (filtres et champs) par utilisateur et par projet

Redmine - demande

Pas toujours facile de former les clients...

Documenter le plus possible les demandes: tapes de reproductibilit, liens

Rigeur dans la qualification et le workflow des demandes

Bien faire la diffrence entre des informations demander par mail (Bonjour, tes-vous disponible demain pour un rendez-vous tlphonique avec la DSI chez nous?) ou par le bais d'une demande

Rouvrir une demande dj poste en cas de problme revenant et viter les doublons dans l'absolu

Mais au vu des dcomptes de demandes, a fonctionne :)

Janv 20101308Janv 20113945Janv 20126007Juin 201310470

Redmine Dpt

Browser graphique du repository:

Branches

Rvisions, historique

Commentaires associs aux commits

Visualisation des fichiers toutes les rvisions possibles

Diff entre les rvisions

(Tout a est dj possible en ligne de commande videmment)

Demandes... couples au dpt Git (ou Subversion)!

Redmine Dpt

git commit -m 'Refs #MON_ID: mon commentaire' (tags: refs, references ou IssueID)

Changement de statut automatique d'une demande en fonction du commentaire du commit
(fixes ou closes passe la demande en rsolu ou ferm)
Et possibilit de les combiner:

git commit -m 'This commit refs #1, #2 and fixes #3'

LE plus: association demande commits

Redmine - conclusion

=> Systme classique mais efficace et souple

Tout au long du projet: Centralisation de la gestion de projet

Demandes

Wiki (gestion de projet : CR runions, spcifications, CR ateliers de travail)

Documents (fichiers spcifications, livrables divers)

Fonctionnalits supplmentaires et Plugins

Activit globale

Gantt: planning de ralisation/livraison des demandes

Autres modules: Forum, Calendrier, Annonces

Plugins: environ 400; ex. chez OWS: paste

Versionnement -



Versionnement en gnral: enregistrement structur et comment des diffrentes tapes de l'volution du code, rollback possibles

Outil Open Source

Simple, efficace et dcentralis (permet de travailler offline: la plupart des oprations sont ralises en local)

Quelques commandes de base:

clone

add

branch / merge

pull / commit / push

diff

status

Versionnement -



Communaut, documentation: https://git.wiki.kernel.org/index.php/Gitweb

Sans comptences systme,
possibilit d'hberger le projet sur des forges:
Gitorious, github, etc.

Branches GIT:
sparation dev / preprod / prod
pour piloter les dploiements.

Drush (Drupal Shell)



Qu'est-ce que Drush?

Outil indispensable tout au long de la vie du projet: Drush (pour Drupal Shell)

Regroupement de scripts excuts en ligne de commande.

drush dl admin_menu

Pourquoi Drush?

Gagner du temps, simplifier certaines taches

Scripts d'automatisation.

Quelques commandes de base:

Tlcharger, activer/dsactiver des modules, des thmes (drush dis overlay)

Vider les caches(drush cc all)

Excuter le cron (drush cron)

Excuter du php (drush php-eval 'MON CODE') / une requte (drush sqlq 'MA QUERY')

Rcuprer une url temporaire de connexion admin (drush uli)

Etc. drush help :-)

Drush (Drupal Shell)



Dveloppement ais de nouvelles commandes:

Dploiement - Features



Pourquoi Features ?

Sous Drupal, un certain nombre d'lments se trouvent en base de donnes, notamment:
les structures de contenus, les variables de configuration.

=> difficile au sein de notre process d'intgration continue, d'intgrer les phases de dploiements (Integration / Merging, Deployment / Staging) et les ventuels retours en arrire en cas de problme.


Solution

Export (et Import) in code (module Drupal)
des lments structurels stocks en de base de donnes

hook_update_N() pour les mises jour de base de donnes


Configuration in code, contenus en base de donnes.

Dploiement - Features



Types d'objets exports (et donc imports)

Variables (module Strongarm),

Context, panels

Imagecache

Views,

Types de contenus (et CCK ou fields)

Roles/permissions,

Vocabulaires

Extra modules: taxonomy (vocabulaires en D6), nodequeues, blocks


Commandes Drush

Drush feature-revert MA_FEATUREDrush feature-update MA_FEATUREDrush updatedb

Communication en ligne - IRC



Qu'est-ce que IRC?

Internet Relay Chat: protocole de communication textuelle sur Internet.

Ct serveur:

Rseaux libres et gratuits du type IRCNet ou Freenode

Ou installez votre propre serveur l'aide des nombreux IRCd (IRC Daemon)

Ct client: Xchat fonctionne aussi bien sous Linux ou Windows (X-Chat Aqua pour Mac)

Pourquoi?Travail distance ou en commun :

Equipes de dveloppements

Des freelances

Des salaris en tltravail

Des fournisseurs (hbergeurs tiers par exemples)

Et mme dans nos propres locaux :)

Communication en ligne - IRC



Comment?IRC nous permet au quotidien:

Un salon de discussion par projet
(un simple /join #ows_MONPROJET)

Dmatrialisation, discussions en temps rel
avec l'quipe de dveloppeurs,
des fournisseurs ventuellement




Post des commit sur canal projet pour plus de cohsion de l'quipe et de visibilit (Jenkins se charge du bot).


Et les runions?

Runion de dveloppement: souvent Skype

Avec vido et partage d'application/cran: Google Hangout (< 10 participants en gratuit)

Dploiement - Jenkins



Schma de fonctionnement

Dev / Commit sur branche master

Jenkins coute Gitorious

Suite de tests (coding standards)

KO

OK

Log Jenkins mail au dveloppeur

Notification IRC, salon projet

Dploiement sur le dev

Mise jour des features, clear cache, etc.

Notification IRC, salon projet

PUIS: merge de la branche master vers la preprod Jenkins dploie sur la preprod

Validation du client sur la preprod

Si OK: Merge Preprod Prod

Echec aprs commit

Ex. script de dploiement

Notification IRC

Tests avec Slnium



Installation poste local triviale et lancement des scripts de tests (interface graphique conviviale)

Facilit enregistrer et rejouer

Autocompletion pour les commandes selenium classiques lors de la saisie des actions

Tests sauvegards en diffrents formats (Format HTML facile lire et complter)

Possibilit de dlgation des profils de test

Tests avec Slnium



Pour plus de robustesse et d'automatisation des tests de non rgression:

Selenium Webdriver pour automatisation ct serveur: utilise les fonctionnalits natives d'automatisation de chaque browser

Tests en Java, Python, C#, etc. et Php

Ecriture des tests (pas d'enregistrement graphique)


Je vous conseille la prsentation de Didier samedi 16h20 dans la salle Corail:

Introduction aux tests de recette automatiss avec l'extension Drupal pour Behat/Mink

Monte en charge - Tsung



Pourquoi Tsung?

Ecrit en Erlang : grand nombre de requtes/sec avec peu de CPU (paralllisme)

Multi protocole: HTTP, PostgreSQL, MySQL, LDAP, etc.

Installation relativement aise

Clustering entre des VM (liaison SSH), pilot par un tsung master.

Utilisation d'un proxy pour enregistrer des sessions qui gnrent des fichiers XML
(selenium proxy -> fichier XML de tsung).

Edition aise des fichiers XML.

Possibilits de renseigner des formulaires et de jouer des sessions authentifies.

Paramtrage fin de la monte en charge et de la rpartition des utilisateurs crs par tsung entre les diffrents scnarios dfinis dans le XML

Monte en charge - Tsung


Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21

Mozilla/5.0 (Linux; U; Android 2.1-update1; fr-fr; GTI9000 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17

Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; fr-fr) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20