Date de la publication : 30 juillet 2025

Lecture : 7 min

Comment sécuriser et optimiser votre dépôt Maven dans GitLab

Optimisez votre workflow DevSecOps en adoptant des bonnes pratiques, en maîtrisant des techniques avancées et en découvrant nos prochaines fonctionnalités.

En tant que Product Manager chez GitLab, j'ai le plaisir de vous présenter nos solutions pour sécuriser et optimiser votre dépôt Maven. GitLab s'engage à offrir une plateforme DevSecOps complète, où la gestion des packages et la sécurisation des dépôts Maven jouent un rôle clé. Découvrez dans ce tutoriel les bonnes pratiques, les techniques avancées et les fonctionnalités à venir qui vont transformer votre workflow Maven.

Sécurisation de votre dépôt Maven : une approche globale

La sécurisation de votre chaîne d'approvisionnement logicielle est une priorité absolue. Voici les stratégies essentielles pour renforcer la sécurité de vos paquets Maven dans GitLab.

Mettre en œuvre un système d'authentification forte

Jetons d'accès personnels (PAT) : privilégiez les PAT pour un contrôle d'accès affiné.

Par exemple :

mvn deploy -s settings.xml

Avec la configuration suivante dans settings.xml :

<settings>
  <servers>
    <server>
      <id>gitlab-maven</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Private-Token</name>
            <value>${env.GITLAB_PERSONAL_TOKEN}</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>

Tokens de déploiement : adaptés pour les pipelines CI/CD. Générez-les dans les paramètres de votre projet GitLab et intégrez-les dans votre fichier .gitlab-ci.yml.

deploy:
  script:
    - 'mvn deploy -s ci_settings.xml'
  variables:
    MAVEN_CLI_OPTS: "-s ci_settings.xml --batch-mode"
    MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
  only:
    - main

Voici le fichier ci_settings.xml correspondant :

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
  <servers>
    <server>
      <id>gitlab-maven</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Deploy-Token</name>
            <value>${env.CI_DEPLOY_PASSWORD}</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>

Remarques :

  • La variable CI_DEPLOY_PASSWORD doit être configurée comme une variable CI/CD dans les paramètres de votre projet GitLab et contenir le token de déploiement.
  • L'élément <id> doit correspondre à l'ID du dépôt tel qu'il est défini dans le fichier pom.xml de votre projet.

Rotation des tokens : automatisez la stratégie de rotation des tokens à l'aide de l'API GitLab. Par exemple, vous pouvez planifier un pipeline mensuel qui regénère et met à jour vos tokens :

rotate_tokens:
  script:
    - curl --request POST "https://gitlab.example.com/api/v4/projects/${CI_PROJECT_ID}/deploy_tokens" --header "PRIVATE-TOKEN: ${ADMIN_TOKEN}" --form "name=maven-deploy-${CI_PIPELINE_ID}" --form "scopes[]=read_registry" --form "scopes[]=write_registry"
  only:
    - schedules

Tirer parti des fonctionnalités de sécurité intégrées de GitLab

Analyse des dépendances : activez-la dans votre fichier .gitlab-ci.yml.

include:
  - template: Security/Dependency-Scanning.gitlab-ci.yml

variables:
  DS_JAVA_VERSION: 11

Analyse des conteneurs : si vous conteneurisez vos applications Maven.

include:
  - template: Security/Container-Scanning.gitlab-ci.yml

variables:
  CS_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

Conformité des licences : assurez-vous que toutes les dépendances respectent les licences autorisées dans votre projet.

include:
  - template: Security/License-Scanning.gitlab-ci.yml

Sécuriser votre pipeline CI/CD

  • Variables CI/CD : stockez toutes les informations contenant des données sensibles en toute sécurité.

    variables:
      MAVEN_REPO_USER: ${CI_DEPLOY_USER}
      MAVEN_REPO_PASS: ${CI_DEPLOY_PASSWORD}
    
  • Variables masquées : empêchez leur affichage dans les job logs et définissez-les dans vos paramètres GitLab CI/CD.

  • Branches et tags protégés : configurez-les dans les paramètres de votre projet GitLab pour restreindre les droits de publication des packages Maven aux utilisateurs autorisés.

Mettre en œuvre la signature de vos paquets

  • Utilisez le plug-in Maven GPG pour signer vos artefacts.

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-gpg-plugin</artifactId>
      <version>1.6</version>
      <executions>
        <execution>
          <id>sign-artifacts</id>
          <phase>verify</phase>
          <goals>
            <goal>sign</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    
  • Stockez votre clé GPG dans des variables GitLab CI/CD sécurisées.

Contrôler les accès au registre de paquets

  • Configurez les paramètres du registre de paquets au niveau du projet et du groupe dans GitLab afin de restreindre les accès aux seuls utilisateurs autorisés.
  • Activez les listes d'autorisation d'IP au niveau du réseau dans les paramètres de votre instance GitLab pour restreindre l'accès réseau aux adresses approuvées.

Optimisation des performances : fluidifiez votre workflow Maven

La gestion de projets complexes ou de nombreuses dépendances exige une productivité maximale. Découvrez ci-dessous des techniques avancées pour tirer le meilleur parti de vos paquets Maven dans GitLab et accélérer vos compilations.

Maîtriser la gestion des dépendances

  • Centralisez vos versions dans la section <dependencyManagement> de votre fichier POM parent.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>${spring-boot.version}</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

Tirer parti des projets multi-modules

  • Structurez votre projet avec un POM parent et plusieurs modules enfants :

    my-project/
    ├── pom.xml
    ├── module1/
    │   └── pom.xml
    ├── module2/
    │   └── pom.xml
    └── module3/
        └── pom.xml
    
  • Utilisez le réacteur Maven pour compiler les modules dans un ordre optimal :

    mvn clean install
    

Mettre en œuvre les compilations parallèles

  • Utilisez la fonctionnalité de compilation parallèle de Maven :

    mvn -T 4C clean install
    

Optimiser votre pipeline CI/CD

  • Configurez la mise en cache dans .gitlab-ci.yml pour accélérer les compilations :

    cache:
      paths:
        - .m2/repository
    
    build:
      script:
        - mvn clean package -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository
    
  • Implémentez des compilations incrémentielles :

    build:
      script:
        - mvn clean install -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -am -amd -fae
    

Utiliser la mise en cache des compilations

  • Intégrez l'extension Gradle Enterprise de Maven pour une gestion avancée de la mise en cache des compilations :

    <build>
      <plugins>
        <plugin>
          <groupId>com.gradle</groupId>
          <artifactId>gradle-enterprise-maven-plugin</artifactId>
          <version>1.9</version>
          <configuration>
            <gradleEnterprise>
              <server>https://ge.example.com</server>
              <allowUntrusted>false</allowUntrusted>
            </gradleEnterprise>
          </configuration>
        </plugin>
      </plugins>
    </build>
    

Présentation du programme bêta du registre virtuel Maven

Nous avons le plaisir d'annoncer le lancement du programme bêta de notre nouvelle fonctionnalité : le registre virtuel Maven. Cet ajout à l'écosystème GitLab transformera la gestion des dépôts Maven au sein de vos projets.

Fonctionnalités phares du registre virtuel Maven

  1. Agrégation de dépôts : combinez plusieurs dépôts Maven (internes et externes) en un seul dépôt virtuel.
  2. Proxy intelligent et mise en cache : accélérez les compilations grâce à la mise en cache des artefacts et au routage intelligent des requêtes.
  3. Contrôle d'accès centralisé : améliorez la sécurité en gérant l'accès à tous vos dépôts Maven depuis un seul et même endroit.

Utilisation du registre virtuel Maven

  1. Configuration : configurez l'authentification Maven dans votre fichier settings.xml :
<settings>
  <servers>
    <server>
      <id>gitlab-maven</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Private-Token</name>
            <value>${env.GITLAB_TOKEN}</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>

Options d'authentification :

  • Jeton d'accès personnel : utilisez Private-Token comme nom et ${env.GITLAB_TOKEN} comme valeur.

  • Token de déploiement de groupe : utilisez Deploy-Token comme nom et ${env.GITLAB_DEPLOY_TOKEN} comme valeur.

  • Token d'accès de groupe : utilisez Private-Token comme nom et ${env.GITLAB_ACCESS_TOKEN} comme valeur.

  • Token de job CI : utilisez Job-Token comme nom et ${CI_JOB_TOKEN} comme valeur.

  • Configurez le registre virtuel dans votre fichier pom.xml.

Option 1 : en tant que registre supplémentaire :

<repositories>
  <repository>
    <id>gitlab-maven</id>
    <url>https://gitlab.example.com/api/v4/virtual_registries/packages/maven/<virtual registry id></url>
  </repository>
</repositories>

Option 2 : en remplacement de Maven Central (dans votre fichier settings.xml) :

<mirrors>
  <mirror>
    <id>gitlab-maven</id>
    <name>GitLab virtual registry for Maven Central</name>
    <url>https://gitlab.example.com/api/v4/virtual_registries/packages/maven/<virtual registry id></url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>
  1. Utilisation : désormais, toutes vos opérations Maven utiliseront ce dépôt virtuel.
# For personal access tokens
export GITLAB_TOKEN=your_personal_access_token

# For group deploy tokens
export GITLAB_DEPLOY_TOKEN=your_deploy_token

# For group access tokens
export GITLAB_ACCESS_TOKEN=your_access_token

# Then run Maven commands normally
mvn package

  1. Avantages
  • Gestion simplifiée des dépendances
  • Temps de compilation réduits
  • Sécurité et conformité renforcées
  • Contrôle amélioré des dépendances tierces

Rejoignez le programme bêta

Nous recherchons activement des participants souhaitant tester notre version bêta :

  • Accédez en avant-première à la fonctionnalité de registre virtuel Maven.
  • Transmettez directement vos retours à notre équipe de développement.
  • Contribuez activement à façonner l'avenir de la gestion des paquets Maven dans GitLab.
  • Participez à des webinaires et sessions de questions-réponses exclusifs animés par notre équipe produit.

Pour rejoindre le programme bêta ou en savoir plus sur le registre virtuel Maven, consultez notre page dédiée au programme bêta du registre virtuel Maven de GitLab (Remarque : lien provisoire).

Résumé

Chez GitLab, nous avons à cœur de proposer des outils à la fois sécurisés, performants et évolutifs pour accompagner votre développement logiciel. Le registre virtuel Maven illustre notre volonté constante d'innover pour répondre aux besoins croissants des développeurs et ingénieurs de plateforme.

En appliquant les mesures de sécurité et les techniques d'optimisation abordées dans cet article, et en tirant parti des futures fonctionnalités telles que le registre virtuel Maven, vous renforcerez l'efficacité de votre workflow Maven dans GitLab.

Nous sommes impatients de voir comment ces nouvelles fonctionnalités de gestion des paquets dans GitLab contribueront à perfectionner vos processus de développement. Restez à l'écoute et bon codage !

Votre avis nous intéresse

Cet article de blog vous a plu ou vous avez des questions ou des commentaires ? Partagez vos réflexions en créant un sujet dans le forum de la communauté GitLab.
Share your feedback

Plus de 50 % des entreprises du classement Fortune 100 font confiance à GitLab

Commencez à livrer des logiciels de meilleurs qualité plus rapidement

Découvrez comment la plateforme DevSecOps intelligente

peut aider votre équipe.