mediatribe.net -- Drupal and Web Development

Notice: this post was last updated 3 years 32 weeks ago so it might be outdated. Please be cautious before implementing any of suggestions herein.

Procédure pour ajouter un site Drupal à Jenkins

Voici ma procédure pour ajouter un projet Drupal à Jenkins

(1) Assurez-vous d'avoir une version locale du site sur Git.

(2) Allez sur votre instance de Jenkins et ajouter un projet de type "free-style software project" pour ce site.

(3) Dans description mettre "Teste la branche master et la met sur URL", où "URL" est un URL propre à Jenkins, selon votre nomenclature, par exemple monsite.jenkins.example.com.

(4) Dans source code management, mettre Git et entrer le répertoire git de votre projet.

Pour que ceci fonctionne, il faut que:

  • L'utilisateur Jenkins ait accès au répertoire git par clé ssh.
  • L'emprunte digitale (fingerprint) du serveur ait été accepté en ligne de commande. Pour ceci vous devez vous connecter au serveur avec l'utilisateur Jenkins en ligne de commande et faire une opération git (par exemple git ls-remote -h moi@example.com:mon_projet HEAD).
  • L'extension git de Jenkins doit être installée.

(5) Enregistrer votre projet.

(6) Lancer un build ("Build Now").

(7) Cliquer sur le build, et aller sur Console Output, et noter le chemin de l'espace de travail (Workspace), qui ressemblera à /var/lib/jenkins/workspace/monprojet.

(8) Vous connecter au serveur en ligne de commande avec l'utilisateur Jenkins et aller dans le chemin du Workspace.

(9) Créer une base de données locale pour votre projet

echo 'create database monprojet' | mysql -uuser -ppassword

(10) Installer un Drupal de base

drush si --db-url=mysql://user:password@localhost/monprojet -y

Si ça refuse d'installer Drupal, il se peut que vous utilisez une distribution comme Acquia, dans lequel cas faites:

drush si acquia --db-url=mysql://user:password@localhost/monprojet -y

(11) Mettre le bon URL dans sites/mediatribe.net/settings.php

Ouvrir sites/mediatribe.net/settings.php sur le serveur et trouver la variable "base_url". Y mettre le bon URL pour votre projet selon votre nomenclature, par exemple monsite.jenkins.example.com.

(12) Changer les paramètres du serveur pour que votre site soit accessible sur l'adresse appropriée. Voici un exemple de commande à utiliser, qui dépendra de votre serveur.

SITE=monsite
URL=$SITE.jenkins.example.com
WORKSPACE='/var/lib/jenkins/workspace/monsite'
echo "127.0.0.1 $URL" >> /etc/hosts

echo "<VirtualHost *:80>" >> /etc/httpd/conf.d/vhosts.conf
echo "  ServerName $URL" >> /etc/httpd/conf.d/vhosts.conf
echo "  DocumentRoot $WORKSPACE" >> /etc/httpd/conf.d/vhosts.conf
echo "</VirtualHost>" >> /etc/httpd/conf.d/vhosts.conf

service httpd restart

(13) Aller sur votre URL et assurez-vous de bien voir un site Drupal de base fonctionnel (pas votre site).

En cas de problèmes, référez-vous aux logs php, apache, mysql.

(14) Assurez-vous que les pages internes fonctionnent bien. Sur certaines installations, le document .htaccess est manquant et doit être ajouté.

(15) Vous pouvez maintenant déterminer ce que vous voulez faire à chaque push. Par exemple on peut rouler ces opérations:

drush vset maintenance_mode 1
drush updb -y
drush cc all
drush cron
drush vset maintenance_mode 0
drush test-run monsite

Essayez ça en ligne de commande pour vous assurer que ça marche, puis ajoutez ce script à votre projet Jenkins (Configure > Add build step > Execute shell).

(16) Vous assurer que votre projet jenkins monitore activement la branche master de git: Build triggers > Poll SCM > "* * * * *" (chaque minute)

(17) À ce stade vous pouvez prendre la base de données du site en production, s'il y a lieu, et la mettre sur Jenkins. Pour ma part je préfère utiliser un module de déploiement si je peux, mais parfois il est pratique de copier la BD de prod. Pour ce faire de votre ordinateur local, faire quelque chose comme:

ssh moi@prod.example.com "drush -r /chemin/vers/drupal/sur/prod sql-dump" > prod.sql
scp prod.sql moi@jenkins.example.com:~/
ssh moi@jenkins.example.com "drush -r /var/lib/jenkins/workspace/monprojet sqlc < ~/prod.sql"
rm prod.sql
ssh moi@jenkins.example.com "rm ~/prod.sql"

Maintenant, lorsqu'un membre de votre équipe poussera en master, Jenkins s'activera et fera tous les tests que vous voulez, puis vous indiquera si tout passe ou s'il y a un problème.