Dans la continuité de notre précédent article : “Création d’une shared library DSL pour jenkins 2” nous vous présentons aujourd’hui le développement d’une petite DSL très utile.
Quoi de mieux qu’un cas d’usage git ? Qui aujourd’hui n’a jamais eu besoin d’appliquer un release git flow ?
Pour rappel voici le schéma d’une release git flow :
Décrivons les étapes :
- Créer la branche release avec le numéro de version
- Effectuer les traitements nécessaires à votre release ( commit, tag etc…)
- Merger la branche release/$version sur develop
- Merger la branche release/$version sur master
- Supprimer la branche release/$version
- Envoyer l’ensemble des modifications et les tags
Toutes ces étapes peuvent être exécutées par des commandes git hormis l’étape numéro 2 contextuelle au projet. Cette étape sera donc déléguée par une closure.
Nous arrivons donc à la DSL suivante :
def call(Map params) { def version = params.version sh "git checkout -b release/$version" if (params.performReleaseBranch) { params.performReleaseBranch(version) } sh "git checkout develop" sh "git merge --ff-only release/$version" sh "git checkout master" sh "git merge --ff-only release/$version" sh "git branch -D release/$version" sh "git checkout develop" sh "git push --all && git push --tags" }
Voilà comment l’utiliser dans votre projet Maven :
releaseGitFlow version: versionName, performReleaseBranch : { sh "mvn release:prepare" }
Ou alors de la façon suivante pour un projet Fastlane :
releaseGitFlow version: versionName, performReleaseBranch : { sh "bundle exec fastlane release release:true" }
Maintenant à vous de jouer et d’implémenter le code adéquat selon votre type de projet ( gradle, maven, npm, fastlane etc…) dans la closure performReleaseBranch et de l’intégrer au sein de vos pipelines.
Cette nouvelle DSL est disponible dans notre repository “jenkins-shared-libraries-dsl-tutorials” si besoin.
1 Comment
philippe
bravo mehdi !
Je vais relayer à Thomas Bonduaeux
Comments are closed.