Jenkins Pipeline DSL : Méthodes courantes et exemples de code

  1. Formatage de données JSON (readJSON)

Pour analyser du JSON dans une pipelien Jenkins, il est recommandé d'utiliser la méthode intégrée readJSON. Voici un exemple modifié :

def contenuJson = '{"status": "succes", "code": 200}'
def resultat = readJSON text: contenuJson
println "Statut : ${resultat.status}"

Évitez d'utiliser des bibliothèques Groovy natives comme JsonSlurper directement, car cela peut poser des problèmes de sérialisation dans les pipelines.

  1. Utilisation sécurisée des identifiants

Pour manipuler des secrets (mots de passe, tokens) dans une pipelnie, utilisez la directive withCredentials. Exemple avec une variable d'environnement :

withCredentials([usernamePassword(credentialsId: 'mon-id-secret', usernameVariable: 'UTILISATEUR', passwordVariable: 'MOT_DE_PASSE')]) {
    echo "Connexion avec l'utilisateur : $UTILISATEUR"
}
  1. Récupération du code source (checkout)

La commande checkout permet de cloner des dépôts. Voici des exemples pour Git et SVN avec des paramètres modifiés :

// Exemple Git avec une branche spécifique
checkout([$class: 'GitSCM',
          branches: [[name: '*/develop']],
          extensions: [[$class: 'CloneOption', depth: 1]],
          userRemoteConfigs: [[credentialsId: 'git-creds', url: 'https://github.com/projet/depot.git']]])
// Exemple SVN avec chemin distant
checkout([$class: 'SubversionSCM',
          locations: [[credentialsId: 'svn-creds', remote: 'https://svn.exemple.com/projet/trunk']],
          workspaceUpdater: [$class: 'UpdateUpdater']])
  1. Publication de rapports HTML (publishHTML)

Pour générer des rapports HTML dans Jenkins, utilisez le plugin publishHTML. Exemple :

publishHTML([allowMissing: false,
             alwaysLinkToLastBuild: true,
             keepAll: false,
             reportDir: 'resultats/',
             reportFiles: 'rapport_tests.html,rapport_couverture.html',
             reportName: 'Rapport de tests automatisés',
             reportTitre: 'Détails des tests'])

Les paramètres reportDir et reportFiles spécifient l'emplacement et les noms des fichiers à publier.

  1. Interaction uitlisateur (input)

La directive input permet de demander des entrées à l'utilisateur. Exemple avec une case à cocher :

def choixUtilisateur = input message: 'Sélectionnez les modules à déployer :',
                             ok: 'Confirmer',
                             parameters: [extendedChoice(description: 'Modules disponibles',
                                                         name: 'modules_selectionnes',
                                                         type: 'PT_CHECKBOX',
                                                         value: 'module1,module2,module3',
                                                         visibleItemCount: 5)]
echo "Modules choisis : $choixUtilisateur"
  1. Informations sur l'utilisateur de la construction (BuildUser)

Avec le plugin Build User Vars, vous pouvez récupérer des détails sur l'utilisateur qui a lancé la construction :

wrap([$class: 'BuildUser']) {
    echo "Nom complet : $BUILD_USER"
    echo "ID utilisateur : $BUILD_USER_ID"
    echo "Email : $BUILD_USER_EMAIL"
}
  1. Envoi de requêtes HTTP (httpRequest)

Pour effectuer des appels API, utilisez le plugin HTTP Request. Exemple modifié :

def apiUrl = "https://api.exemple.com/v1/status"
def reponse = httpRequest authentication: 'api-token',
                           url: apiUrl,
                           contentType: 'APPLICATION_JSON',
                           validResponseCodes: '200:399'
echo "Code de réponse : ${reponse.status}"
  1. Notifications par email (emailext)

Pour envoyer des emails avec un contenu HTML, utilisez emailext. Exemple simplifié :

def sujet = "Résultat de la construction : ${JOB_NAME} #${BUILD_ID}"
def corps = """
<html>
<body>
  <p>Construction numéro : ${BUILD_ID}</p>
  <p>Statut : ${currentBuild.result}</p>
  <a href="${BUILD_URL}">Voir le détail</a>
</body>
</html>
"""
emailext body: corps, subject: sujet, to: 'equipe@example.com'
  1. Nettoyage de l'espace disque

Pour libérer de l'espace, supprimez les anciens artefacts avec la commande cleanWs du plugin Workspace Cleanup :

cleanWs(patterns: [[pattern: 'resultats/*.log', type: 'INCLUDE']],
        deleteDirs: true)

Étiquettes: Jenkins Pipeline DSL Groovy JSON Credentials

Publié le 6 juin à 17h55