Vous êtes intégrateur Drupal et vous souhaitez augmenter l'efficacité de vos process de gestion de projet ?
Voici une présentation globale d'un jeu de différents outils classiques. Combinés entre eux, il fluidifieront et automatiseront les échanges, vous permettant ainsi d'augmenter la taille de vos projets, celle de vos équipes, équipes parfois devenues géographiquement éclatées.
* Gestion de tickets et centralisation documentaire avec Redmine
* Versionnement de code avec Git
* Déploiements avec Features, Drush, Jenkins
* Dématérialisation de la communication avec Skype, Hangout ou autres, IRC
* Tests avec Selenium
* Montée en charge avec Tsung
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp Paris 2013
1. 123/06/2013
Gestion de projet Drupal :Gestion de projet Drupal :
quelques outils indispensablesquelques outils indispensables
Pierre Ternon
Open Web Solutions
6. 623/06/2013
Spéc. – gestion documentaireSpéc. – gestion documentaire
… et déjà Redmine pendant cette phase : gestion documentaire et Wiki
CR de réunions, CR ateliers :
– Mise à disposition de la préparation en amont
– Mise à disposition du CR en aval
Informations projet diverses, client comme équipe de développement :
– Intervenants, coordonnées
– Instances serveurs, repository Git, etc.
– Livrables, documents divers (spécifications)
– Guidelines Redmine pour le projet (workflow des demandes, process
d'échanges avec le client)
– Guidelines développement (coding standards, règles de nommage,
organisation des fichiers, etc.)
– CR réunions de dév
Liste de fichiers catégorisée
11. 1123/06/2013
Redmine - demandeRedmine - demande
●
Sujet / description / fichiers joints
●
Type (paramétrage global) : Bug / Tache / Assistance /
Spécifications – Category au sens d.o
●
Statut (paramétrage global – Status au sens d.o) /
Assignation (Assigned d.o) / Catégorie (paramétrage par
projet – Component d.o) : au cœur du process de gestion
des tickets
●
Dates (début, échéance) : idéal pour les planning (gantt)
de développement
●
Temps estimé / Temps passé : TMA
●
Pourcentage de réalisation : utile tout au long de la
phase de développement, TMA comprise
●
Liens entre les taches : tache parente, tache liée
●
Commentaire à chaque changement de statut
→ Segmentation et organisation des tâches
→ Workflow de traitement des taches
→ Traçabilité des développements et évolutions
13. 1323/06/2013
Redmine - demandeRedmine - 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 différence entre des informations à demander par mail (« Bonjour, êtes-vous
disponible demain pour un rendez-vous téléphonique avec la DSI chez nous ? ») ou
par le bais d'une demande
– Rouvrir une demande déjà postée en cas de problème revenant et éviter les doublons
dans l'absolu
… Mais au vu des décomptes de demandes, ça fonctionne :)
Janv 2010 1308
Janv 2011 3945
Janv 2012 6007
Juin 2013 10470
14. 1423/06/2013
Redmine – DépôtRedmine – Dépôt
Browser graphique du repository :
•
Branches
•
Révisions, historique
•
Commentaires associés aux
commits
•
Visualisation des fichiers à toutes
les révisions possibles
•
Diff entre les révisions
(Tout ça est déjà possible en ligne de
commande évidemment)
Demandes... couplées au dépôt Git (ou Subversion) !
15. 1523/06/2013
Redmine – DépôtRedmine – Dépôt
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 résolu ou fermé)
Et possibilité de les combiner :
git commit -m 'This commit refs #1, #2 and fixes #3'
LE plus : association demande ↔ commits
17. 1723/06/2013
Redmine - conclusionRedmine - conclusion
=> Système classique mais efficace et souple
Tout au long du projet : Centralisation de la gestion de projet
» Demandes
» Wiki (gestion de projet : CR réunions, spécifications, CR ateliers de travail)
» Documents (fichiers spécifications, livrables divers)
Fonctionnalités supplémentaires et Plugins
•
Activité globale
•
Gantt : planning de réalisation/livraison des demandes
•
Autres modules : Forum, Calendrier, Annonces
•
Plugins : environ 400 ; ex. chez OWS : paste
18. 1823/06/2013
Versionnement -Versionnement -
•
Versionnement en général : enregistrement structuré et commenté des différentes étapes de
l'évolution du code, rollback possibles
•
Outil Open Source
•
Simple, efficace et décentralisé (permet de travailler offline : la plupart des opérations sont
réalisées en local)
•
Quelques commandes de base :
•
clone
•
add
•
branch / merge
•
pull / commit / push
•
diff
•
status
19. 1923/06/2013
Versionnement -Versionnement -
Communauté, documentation :
https://git.wiki.kernel.org/index.php/Gitweb
Sans compétences système,
possibilité d'héberger le projet sur des forges :
Gitorious, github, etc.
Branches GIT :
séparation dev / preprod / prod
pour piloter les déploiements.
20. 2023/06/2013
Drush (Drush (DruDrupalpal ShShell)ell)
Qu'est-ce que Drush ?
•
Outil indispensable tout au long de la vie du projet : Drush (pour Drupal Shell)
•
Regroupement de scripts exécutés en ligne de commande.
drush dl admin_menu
Pourquoi Drush ?
•
Gagner du temps, simplifier certaines taches
•
Scripts d'automatisation.
Quelques commandes de base :
•
Télécharger, activer/désactiver des modules, des thèmes (drush dis overlay)
•
Vider les caches (drush cc all)
•
Exécuter le cron (drush cron)
•
Exécuter du php (drush php-eval 'MON CODE') / une requête (drush sqlq 'MA QUERY')
•
Récupérer une url temporaire de connexion admin (drush uli)
•
Etc. drush help :-)
22. 2223/06/2013
Déploiement - FeaturesDéploiement - Features
Pourquoi Features ?
•
Sous Drupal, un certain nombre d'éléments se trouvent en base de données, notamment :
les structures de contenus, les variables de configuration.
•
=> difficile au sein de notre process d'intégration continue, d'intégrer les phases de
déploiements (Integration / Merging, Deployment / Staging) et les éventuels retours en arrière
en cas de problème.
Solution
•
Export (et Import) in code (module Drupal)
des éléments structurels stockés en de base de données
•
hook_update_N() pour les mises à jour de base de données
→ Configuration in code, contenus en base de données.
23. 2323/06/2013
Déploiement - FeaturesDéploiement - Features
Types d'objets exportés (et donc importés)
•
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_FEATURE
Drush feature-update MA_FEATURE
Drush updatedb
24. 2423/06/2013
Communication en ligne - IRCCommunication en ligne - IRC
Qu'est-ce que IRC ?
•
Internet Relay Chat : protocole de communication textuelle sur Internet.
•
Côté serveur :
•
Réseaux libres et gratuits du type IRCNet ou Freenode
•
Ou installez votre propre serveur à l'aide des nombreux IRCd (IRC Daemon)
•
Côté client : Xchat fonctionne aussi bien sous Linux ou Windows (X-Chat Aqua pour Mac)
Pourquoi ?
Travail à distance ou en commun :
•
Equipes de développements
•
Des freelances
•
Des salariés en télétravail
•
Des fournisseurs (hébergeurs tiers par exemples)
•
Et même dans nos propres locaux :)
25. 2523/06/2013
Communication en ligne - IRCCommunication en ligne - IRC
Comment ?
IRC nous permet au quotidien :
•
Un salon de discussion par projet
(un simple /join #ows_MONPROJET)
•
Dématérialisation, discussions en temps réel
avec l'équipe de développeurs,
des fournisseurs éventuellement
•
Post des commit sur canal projet pour plus de cohésion de l'équipe et de visibilité (Jenkins se
charge du bot).
Et les réunions ?
•
Réunion de développement : souvent Skype
•
Avec vidéo et partage d'application/écran : Google Hangout (< 10 participants en gratuit)
26. 2623/06/2013
Déploiement - JenkinsDéploiement - Jenkins
Schéma de fonctionnement
Dev / Commit sur branche master
Jenkins écoute Gitorious
Suite de tests (coding standards)
KO OK
●
Log Jenkins mailé au développeur
●
Notification IRC, salon projet
●
Déploiement sur le dev
●
Mise à jour des features, clear cache, etc.
●
Notification IRC, salon projet
●
PUIS : merge de la branche master vers la preprod → Jenkins déploie sur la preprod
●
Validation du client sur la preprod
●
Si OK : Merge Preprod → Prod
28. 2823/06/2013
Tests avec SéléniumTests avec Sélénium
•
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 sauvegardés en différents formats (Format HTML facile à lire et à compléter)
•
Possibilité de délégation à des profils de test
29. 2923/06/2013
Tests avec SéléniumTests avec Sélénium
Pour plus de robustesse et d'automatisation des tests de non régression :
•
Selenium Webdriver pour automatisation côté serveur : utilise les fonctionnalités 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 présentation de Didier samedi à 16h20 dans la salle Corail :
Introduction aux tests de recette automatisés avec l'extension Drupal pour Behat/Mink
30. 3023/06/2013
Montée en charge - TsungMontée en charge - Tsung
Pourquoi Tsung ?
●
Ecrit en Erlang : grand nombre de requêtes/sec avec peu de CPU (parallélisme)
●
Multi protocole : HTTP, PostgreSQL, MySQL, LDAP, etc.
●
Installation relativement aisée
●
Clustering entre des VM (liaison SSH), piloté par un tsung master.
●
Utilisation d'un proxy pour enregistrer des sessions qui génèrent des fichiers XML
(selenium proxy -> fichier XML de tsung).
●
Edition aisée des fichiers XML.
●
Possibilités de renseigner des formulaires et de jouer des sessions authentifiées.
●
Paramétrage fin de la montée en charge et de la répartition des utilisateurs créés par tsung entre les
différents scénarios définis dans le XML
31. 3123/06/2013
Montée en charge - TsungMontée en charge - Tsung
<load duration="240" unit="minute">
<!-- several arrival phases can be set: for each phase, you can set
the mean inter-arrival time between new clients and the phase
duration -->
<arrivalphase phase="1" duration="2" unit="minute">
<users interarrival="2" unit="second"></users>
</arrivalphase>
<arrivalphase phase="2" duration="2" unit="minute">
<users interarrival="1" unit="second"></users>
</arrivalphase>
<arrivalphase phase="3" duration="2" unit="minute">
<users interarrival="0.8" unit="second"></users>
</arrivalphase>
<arrivalphase phase="4" duration="90" unit="minute">
< !--- en phase 4 on crée 0.6 user / second-->
<users interarrival="0.6" unit="second"></users>
</arrivalphase>
</load>
<option type="ts_http" name="user_agent">
<user_agent probability="98">Mozilla/5.0 (X11; U; Linux i686; en-US;
rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent>
<user_agent probability="1">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</user_agent>
<user_agent probability="1">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</user_agent>
</option>
<session name='anonymous' probability='10' type='ts_http'>
<request><http url='http://prod.franceculture.fr/' version='1.1'
method='GET'></http></request>
<thinktime random='true' value='6'/> <-- temps entre 2 clics
<request><http url='/theme/sciences-dures-et-sciences-humaines/geopolitique'
version='1.1' method='GET'></http></request>
<thinktime random='true' value='4'/>
Scenario XML
Navigateurs utilisés
Répartition des sessions