Créer un projet Jenkins Multibranch Pipeline pour Delphi (Première partie)

Vu les difficultés que j’ai rencontrées lors de la mise en place d’un projet Multibranch Pipeline pour la plateforme de compilation Jenkins, voici une série d’article pour comprendre comment cela fonctionne et comment écrire un script Jenkinsfile.

Installer Jenkins sous Windows

Vu qu’il est question de Delphi, le serveur de compilation sera forcément sous Windows. Dans mon cas, l’installation a été faite sur un Windows 2012 R2 n’ayant pas accès à Internet, ce qui compliquait énormément les choses.

Installation de Delphi

Commencez par installer Delphi sur le serveur avec la licence adéquate. Attention, seule les versions de Delphi supportant MSBuild pourront être compilées par Jenkins. Les fichiers à transmettre à MSBuild sont les .dproj. Si vous n’en avez pas, c’est que votre version est trop ancienne.

Lancez au moins une fois Delphi pour qu’il crée son environnement complet, dont entre autres, les fichiers dans %appdata% et certaines clés de registre.

Installation de Jenkins

Commencez par télécharger Jenkins, la version LTS étant recommandée (Long Term Support). Ensuite, lancez simplement l’installation comme pour tout logiciel sous Windows.

Si votre serveur n’a pas accès à Internet, le mieux est encore de faire aussi l’installation sur un poste ayant accès qui vous servira pour installer les extensions que vous reporterez manuellement vers le serveur cible.

Au premier démarrage, Jenkins vous propose toute une série d’extensions par défaut, il est conseillé de les installer.

Une fois installé, Jenkins est présent dans la liste des services et lancé par le compte système. Ce compte ne peut pas accéder à certains fichiers de Delphi qui ne sont créés qu’au lancement de l’IDE (entre autre, le fichier EnvOptions.proj placé dans %appdata%\Embarcadero\BDS\18.0\ si vous utilisez Delphi Berlin).

Il faut donc modifier le compte utilisé pour démarrer le service Jenkins et utilisé celui qui a été utilisé pour installer Delphi, puis redémarrer le service.

Installation des extensions pour Jenkins

Si vous avez laissez Jenkins installer les extensions recommandés, une grande partie est déjà là.

Il ne manque donc que ce qui est spécifique à Delphi. Voici les extensions que j’ajoute personnellement :

  • MSBuild Plugin : obligatoire, c’est la base pour lancer la compilation de projets Delphi à l’heure actuel. Il existe une extension RAD Studio Plugin mais elle ne supporte pas encore les pipelines même si l’auteur a prévu de le faire.
  • Redmine plugin : pour permettre de lier notre projet à une application de gestion de projet.
  • SonarQube Plugin : pour analyser le code Delphi, je consacrerai un article à son utilisation avec Delphi.
  • NUnit plugin : pour effectuer des tests unitaires, malgré son nom, il supporte DUnit dans sa dernière version.
  • Blue Ocean beta : c’est la future interface de Jenkins, qui a l’avantage d’apporter avec elle une multitude de plugins nécessaires à l’utilisation des pipelines.
  • Blue Ocean Pipeline Editor : c’est un éditeur de script intégré qui devrait bientôt nous simplifier beaucoup la tâche !

Configuration de l’extension MSBuild

Allez dans « Administrer Jenkins » puis « Configuration globale des outils ». Cliquez ensuite sur « Ajouter MSBuild » et saisissez un nom pour définir votre outil.

Saisissez dans le premier champ, l’emplacement ou se trouve MSBuild, généralement C:\Windows\Microsoft.NET\Framework\v3.5.

Saisissez ensuite les paramètres :

  • /t:build indique que vous voulez faire une construction complète du projet (recommandé).
  • /p:platform=Win64 indique que vous souhaitez compiler en 64 bits pour Windows. Reportez-vous à l’aide de Delphi pour savoir quelle plateforme utiliser.
  • /p:config=Debug indique que la compilation se fera en mode Debug.

Dans mon cas, j’ai créé deux outils, un pour compiler en mode Debug, et un pour compiler en mode Release.

L’extension MSBuild n’étant pas encore compatible avec les pipelines, les paramètres ne sont pas correctement pris en compte. Il faudra donc les passer dans la ligne de commande dans le script.

Création du projet Multibranch Pipeline

Cliquez sur « Nouveau Item », saisissez un titre, sélectionnez Multibranch Pipeline puis validez.

Une page de configuration s’affiche. La seule partie réellement importante, est la section « Branch Sources ». Elle va vous permettre d’indiquer le serveur de sources vers lequel va pointer Jenkins. Dans mon exemple, c’est Subversion qui va être utilisé.

Notez que l’option « Déclencher les builds à distance (Par exemple, à partir de scripts) » n’est pas fonctionnelle et ne devrait pas s’afficher ici. C’est un bogue connu des développeurs de Jenkins et nous verrons plus loin comment faire pour que Jenkins construise automatiquement une branche quand une livraison de code à lieu.

Sauvegardez la configuration. Jenkins va aussitôt scanner le dépôt pour y trouver les branches et voir si elles contiennent un fichier Jenkinsfile. C’est la présence de ce fichier qui va indiquer si une banche doit être compilée. Et c’est l’écriture de ce fichier que nous allons voir ensuite.