Utiliser la Maven package registry de GitLab

IMG_20210222_090019

La photo n'a pas toujours un rapport avec le sujet 😝

J'avais fait un twitch sur le sujet il y a 2 mois, mais je vais remettre "au propre" les étapes décrivant comment utiliser GitLab comme une Maven package registry.

Mon cas d'utilisation est une librairie Java que je veux pouvoir utiliser à partir de mes autres projets (vous pouvez trouver le projet d'exemple ici https://gitlab.com/k33g_org/samples/play-with-java/fourty-two)

👋 Vous pouvez transformer n'importe quel projet GitLab en Maven package registry avec GitLab.com mais aussi avec votre propre instance de GitLab installée chez vous sur un Raspberry PI (ou quelque chose de plus gros). Ce qui veut dire que vous pouvez aussi avoir votre propre package registry à domicile 🎉

🖐️ Il est tout à fait possible de faire ceci avec un projet Gradle 😃

Donc, voici une façon de faire pour transformer votre projet en une registry Maven (pour d'autres points spécifique je vous laisse lire la documentation: https://docs.gitlab.com/ee/user/packages/maven_repository/)

Création de la package registry

Paramétrages de votre projet GitLab pour le transformer en package registry

Pour transformer votre projet en package registry vous aurez essentiellement besoin de 2 choses pour commencer:

  • l'url de l'API GitLab de votre instance
  • l'ID de votre projet
Id du Projet
image L'ID est facile à trouver, il est juste en dessous de nom du projet

Création d'un fichier settings.xml

Ensuite dans votre projet, ajoutez un fichier settings.xml qui servira à l'authentification automatique avec la CI:

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

Modifications du fichier pom.xml

Tout d'abord, modifier la section <properties> pour préciser l'ID de votre projet (1️⃣) et l'url de l'API de l'instance GitLab que vous utilisez (2️⃣):

<properties>
    <gitlabProjectId>PROJECT_ID</gitlabProjectId> 1️⃣
    <gitlabURL>https://gitlab.com/api/v4</gitlabURL> 2️⃣
    <mainClass>acme.FourtyTwo</mainClass>
</properties>

Ensuite, dans la section <repositories> ajouter les infos relatives à votre repository (3️⃣ on reprend les valeurs définies dans <properties>)

<repository>
    <id>gitlab-maven</id>
    <url>${gitlabURL}/projects/${gitlabProjectId}/packages/maven</url> 3️⃣
</repository>

Et dernière modification, vous créez une section <distributionManagement> comme celle-ci (4️⃣ 5️⃣toujours en reprenant les valeurs définies dans <properties>):

<distributionManagement>
    <repository>
        <id>gitlab-maven</id>
        <url>${gitlabURL}/projects/${gitlabProjectId}/packages/maven</url> 4️⃣
    </repository>
    <snapshotRepository>
        <id>gitlab-maven</id>
        <url>${gitlabURL}/projects/${gitlabProjectId}/packages/maven</url> 5️⃣
    </snapshotRepository>
</distributionManagement>

🎉 et voilà, maintenant il ne nous reste plus qu'à écrire le script de CI pour publier la librairie.

Publier la librairie avec GitLab CI

Mon script de CI reste très simple (c'est pour l'exemple 😃):

image: maven:latest

stages:
  - build
  - deploy

build_library:
  stage: build
  script:
    - mvn compile assembly:single

deploy_library:
  stage: deploy
  script:
    - mvn deploy -gs ./settings.xml

🖐️ Remarque*: le flag -gs permet d'expliquer à Maven qu'il faut utiliser le fichier settings.xml au moment de la publication.

Une fois votre librairie disponible (donc une fois le pipeline de CI terminé):

package registry
Sélectionnez le menu Packages & Registries, puis Package Registry, et vous pourrez voir votre nouvelle librairie image

Ensuite, si vous clickez sur le libellé de la librairie, vous obtenez tout le mode d'emploi pour utiliser votre librairie dans un autre projet Java:

détails
image
image

Pour tester de bout en bout, voici un autre projet qui utilise ma nouvelle librairie: https://gitlab.com/k33g_org/samples/play-with-java/amazing-project

🖐️ Noubliez pas la commande mvn dependency:get -Dartifact=acme:fourty-two:1.0-SNAPSHOT pour récupérer votre dépendance.

Et voilà, c'est terminée pour cette recette. Prochainement, je vous expliquerai comment faire pour transformer votre projet en registry npm, registry Docker et aussi une registry plus "générique" pour publier par exemple les builds de vos releases.

N'hésitez pas à poser vos questions en ajoutant une note à cette issue, et très bonne journée 👋


👋

  • Si vous avez aimé (ou pas) ce "post" n'hésitez pas à utiliser les emojis pour réagir
  • N'hésitez pas non plus à laisser des commentaires ou poser des questions
  • Enfin, vous pouvez utiliser ce lien Rss feed pour vous abonner à ce blog à base d'issues
Edited by Philippe Charrière