Contactez-nous

Etape 1 : Checkout - Récupérer le code source depuis Git

Découvrez comment configurer l'étape de checkout dans Jenkins pour récupérer efficacement votre code source depuis Git. La base de tout pipeline CI réussi et automatisé.

Le point de départ : l'importance cruciale de l'étape de checkout

L'étape de "Checkout", ou récupération du code source, constitue la première pierre angulaire de tout pipeline d'intégration continue. Sans code, il n'y a ni compilation, ni test, ni déploiement. Cette phase initiale a pour objectif de cloner ou de mettre à jour une copie locale du code de votre projet depuis votre système de gestion de code source (SCM, pour Source Code Management). C'est à partir de cette copie fraîche que toutes les actions subséquentes de votre pipeline seront exécutées.

Dans l'écosystème moderne du développement logiciel, Git s'est imposé comme le SCM de référence. Jenkins, par sa flexibilité et son vaste catalogue de plugins, s'intègre nativement et de manière très poussée avec Git. Que votre code soit hébergé sur GitHub, GitLab, Bitbucket, ou un serveur Git auto-hébergé, Jenkins dispose des outils nécessaires pour s'y connecter et en extraire la version désirée du code. Cette intégration transparente est fondamentale pour automatiser le cycle de vie de vos applications.

Automatiser la récupération du code source via Jenkins présente de multiples avantages. Cela garantit que chaque exécution du pipeline travaille sur la version la plus à jour du code (ou une version spécifique, selon la configuration), éliminant les erreurs humaines liées à une récupération manuelle. De plus, cela assure la reproductibilité des builds : chaque build est basé sur un état bien défini du code, tracé et versionné, ce qui est indispensable pour le débogage et l'audit.

Mettre en oeuvre le checkout dans Jenkins : de la théorie à la pratique

Pour interagir avec les dépôts Git, Jenkins s'appuie principalement sur le plugin Git. Ce plugin, généralement installé par défaut ou lors de la configuration initiale suggérée, fournit les fonctionnalités nécessaires pour cloner des dépôts, changer de branche, récupérer des commits spécifiques, etc. Sa configuration est essentielle pour que Jenkins puisse communiquer correctement avec votre serveur Git.

Dans un Jenkinsfile utilisant la syntaxe déclarative, l'opération de checkout est typiquement réalisée à l'aide de la directive checkout. L'option la plus courante et la plus simple est checkout scm. Cette instruction demande à Jenkins d'utiliser la configuration SCM définie au niveau du job Pipeline lui-même, ou celle déduite si le Jenkinsfile est chargé depuis un SCM. Voici un exemple très basique dans un stage :

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                echo 'Récupération du code source...'
                // Utilise la configuration SCM du job Pipeline
                checkout scm 
            }
        }
        // Autres étapes (Build, Test, etc.)
    }
}

Lorsque vous configurez un job de type "Pipeline" dans l'interface Jenkins et que vous choisissez "Pipeline script from SCM", Jenkins sait automatiquement quel dépôt et quelle branche récupérer lorsque checkout scm est invoqué.

Plusieurs paramètres peuvent affiner le comportement du checkout. L'URL du dépôt est bien sûr primordiale. La spécification de la ou des branches à construire (par exemple, */main, */develop, ou des branches de fonctionnalités) est une autre configuration clé. La gestion des identifiants (Credentials) est également cruciale si votre dépôt est privé. Jenkins propose un gestionnaire d'identifiants sécurisé pour stocker les clés SSH, les couples nom d'utilisateur/mot de passe, ou les tokens d'accès, évitant ainsi de les coder en dur dans vos Jenkinsfiles.

Il est souvent recommandé de s'assurer que l'espace de travail (workspace) est propre avant de récupérer le code, pour éviter des conflits ou des comportements inattendus dus à des fichiers résiduels d'un build précédent. Bien que Jenkins gère souvent cela implicitement, vous pouvez explicitement demander un nettoyage avec des options du plugin Git ou des commandes shell comme cleanWs() avant le checkout, ou en configurant le comportement de clonage pour qu'il soit toujours frais (ce qui peut prendre plus de temps qu'une simple mise à jour). Par exemple, la directive checkout peut être personnalisée :

checkout([
    $class: 'GitSCM',
    branches: [[name: '*/main']],
    userRemoteConfigs: [[url: 'https://github.com/votre-utilisateur/votre-depot.git']],
    extensions: [
        [$class: 'CleanCheckout'], // Effectue un 'git clean -fdx' avant le checkout
        [$class: 'CloneOption', depth: 1, noTags: true, shallow: true] // Clone superficiel
    ]
])

Cette approche plus détaillée vous donne un contrôle fin sur le processus de checkout. Pour débuter, checkout scm est souvent suffisant si le SCM est bien configuré au niveau du job.