Drush Make DrivenDevelopment
Qui suis-je ?Sébastien Corbin
@SebCorbin
Développeur chez Makina Corpus
Drupal depuis 2009
Petit historique de la gestion decode sous Drupal
1. En premier le FTP, pour les vieux des années 80
2. Après y'a eu Git, pour éviter de perdre ses fichiers durant le transfert,mais c'est so 2005
3. Ensuite y'a eu Features, parce que la conf en BDD: pas top, mais çac'est encore so 2009
Le présent :Drush Make
Au programme1. Quelques rappels (Drush et Make, Features, profils, Git, Migrate)
2. Bonnes pratiques et bénéfices
3. Retour d'expérience
Quelques rappels
Drush & Drush Make
"Drush, c'est la vie"~ tout développeur ayant installé drush
Installation : https://drupal.org/project/drushDocumentation : http://www.drush.org/
Features
Features 1.0 Toujours viable tant que la v2 n'est pas stable
Features 2.0-rc1 Meilleure gestion des permissionsMeilleure gestion des instances de champs Rétro-compatible
Projet : https://drupal.org/project/features
Quelques commandes utilesdrush fc # (features-components) liste les providers:components
drush fe feature_name provider:component # (features-export) exporte un composant
drush fu feature_name # (features-update) met à jour les composants
drush fr feature_name # (features-revert) rétablit la feature
drush fra # (features-revert-all) rétablit toutes les features activées
drush si profile_name # (site-install) installe le profil
drush make file.make # construit la base de code
drush cc all # prépare le café
MigrateOn a pas trouvé mieux pour intégrer rapidement du contenu à partir de
fichiers XML<?xml version="1.0"?> <nodes> <node id="actualites-page" title="Nos actualités" language="fr"> <fields> <body> Lorem Ipsum Dolor Est Lorem Ipsum Dolor Est Lorem Ipsum Dolor Est Ipsum Dolor Est Lorem Ipsum Dolor Est Lorem Ipsum Dolor Est Lorem Dolor Est Lorem Ipsum Dolor Est Lorem Ipsum Dolor Est </body> <field_image>**GENERATE**</field_image> <field_date>now -10 days</field_date> </fields> </node> </nodes>
MigrateSeule contrainte, faire les gestionnaires d'import
Permet une génération / import poussés
Plus parlant que le contenu de devel_generate
Astuces et Bonnespratiques
Drush MakeUtile pour avoir la dernière version des projets
Spécifier les versions des projets que vous voulez patcher
Penser aux includes pour les modules souvent utilisées
Les patchs, c'est la vie, mangez-en
Un module en dev sanstraduction ?
Oubliez :
La traduction sera installée à l'activation du module
projects[nodequeue][version] = 3.x-devlibraries[nodequeue_fr][download][type] = "file"libraries[nodequeue_fr][download][url] = "http://ftp.drupal.org/files/translations/7.x/nodequeue/nodequeue-7.x-2.0-beta1.fr.po"libraries[nodequeue_fr][destination] = "modules/nodequeue"libraries[nodequeue_fr][directory_name] = "translations"libraries[nodequeue_fr][download][filename] = "fr.po"
Exemple bête de contribCKEditor ajoute des CRLF au lieu de LF à sa config exportée via Features(dû au navigateur)
drush clone ckeditor
Fix du code embêtant, puis
Partage/Mise en ligne de la solution sur drupal.org git diff > adieu_souci.patch
https://drupal.org/node/1960268
Et enfin utilisation dans le projet projects[ckeditor][patch][] = "http://drupal.org/files/CRLF-issue.patch"
Drush et ses pluginsDrush issue queue
Support de git et des branches, indispensable au maintainers de module
Drush issue queue extras
drush patch 1960268#4 #applique le patch du 4e comment de l'issue drush iq-diff > file.patch #crée un patch formaté avec les infos de l'auteur
Poste directement le diff courant (formaté) dans l'issue
Pensez aux alias drush, dans drushrc.php
Clone un module depuis git.drupal.org avec choix de la version
drush iq-submit
$options['shell-aliases']['clone'] = "dl --package-handler=git_drupalorg --select";
Exemple de fichier bash d'install#!/bin/bashif [[ "$#" > 0 && $1 = "make" ]]then#execute drush make./"̀dirname "$0"̀/make.sh";fi. "profile_conf.sh";
#store session informations if site already installedSESSIONS="$(mktemp 'sessions_XXXXXXXXXX')"; trap 'rm "${SESSIONS}"' EXITtest "̀drush st bootstrap --pipe 2>/dev/null̀" == "Successful" && drush sql-dump --tables-list=sessions >
$drush si "${PROFILE}" --locale="${LOCALE}" --account-mail="${MAIL}" # etc...
#restore sessions if they were savedtest -f "${SESSIONS}" && drush sqlc < "${SESSIONS}" && echo "Sessions restored"
# features
Scroller...
Retour d'XP
L'intégrateur arrivant dans le projet à un site représentatif et qui fonctionne../bin/make.sh
Un peu de configuration...../bin/install.sh
Démo ! (ouais je suis un fou)
La génération du site permet à un dev d'entrer facilement dans un projeten cours
puis ne fonctionner que sur des hook_update_N()
Lors de la mise en prodchmod -x install.sh
Le recettage est toujours possible (sous réserve de commits clean)
Possibilité de coupler ceci en mode intégration continue avec jenkins oudes git-hooks
Development -> re-génération automatique du sitePré-production -> génération manuelle par le chef de projet
Les fichiers d'exemple de Migrate, *.make seront bientôt mis en ligne sur le
Contribution
blog de Makina
Merci