Nexus — Repositories, Publication d'Artifacts et API REST
Une fois Nexus installé, vous devez comprendre comment organiser vos dépôts, publier vos artifacts et interagir avec Nexus via son API.
Repositories par défaut
Après installation, Nexus crée automatiquement des repositories par défaut :
| Nom | Type | Format | Description |
|---|---|---|---|
maven-central | proxy | maven2 | Proxy vers Maven Central |
maven-public | group | maven2 | Groupe combinant tous les repos Maven |
maven-releases | hosted | maven2 | Vos artifacts Maven stables |
maven-snapshots | hosted | maven2 | Vos artifacts Maven en développement |
nuget-group | group | nuget | Groupe NuGet |
nuget-hosted | hosted | nuget | Artifacts .NET internes |
nuget.org-proxy | proxy | nuget | Proxy vers nuget.org |
Types de Repositories
Nexus propose 3 types de repositories :
1. Hosted — Repository interne
Stocke les artifacts produits en interne par votre équipe.
CI/CD Pipeline ──push──► NEXUS (hosted)
Serveur prod ◄──pull── NEXUS (hosted)
Exemples : maven-releases, maven-snapshots
2. Proxy — Intermédiaire vers un repo externe
Fait office de cache entre vos builds et un repository public.
Build local ──► NEXUS (proxy) ──► Maven Central
│
▼ (cache local)
Avantage : si Maven Central est indisponible, Nexus sert la version en cache.
3. Group — Regroupement de repositories
Agrège plusieurs repositories en une seule URL.
Développeur ──► NEXUS (group: maven-public)
├── maven-central (proxy)
├── maven-releases (hosted)
└── maven-snapshots (hosted)
Le build utilise une seule URL pour accéder à tout.
Formats de Repositories
Chaque technologie a son format d'artifact et son format de repository :
| Format | Technologie | Type d'artifact |
|---|---|---|
| maven2 | Java (Maven, Gradle) | JAR, WAR, POM |
| npm | JavaScript / Node.js | Package npm |
| docker | Docker | Image Docker |
| nuget | .NET / C# | Package NuGet |
| pypi | Python | Package pip |
| helm | Kubernetes | Chart Helm |
| go | Go | Module Go |
| raw | Tout fichier | ZIP, TAR, binaires |
Publier un Artifact vers Nexus
Via les outils de build (Maven / Gradle)
Configurer l'outil de build avec l'adresse et les credentials Nexus.
Maven — pom.xml
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://IP-NEXUS:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://IP-NEXUS:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
Configurer les credentials dans ~/.m2/settings.xml :
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>votre-mot-de-passe</password>
</server>
</servers>
Publier :
mvn deploy
Gradle — build.gradle
apply plugin: 'maven-publish'
publishing {
repositories {
maven {
url = "http://IP-NEXUS:8081/repository/maven-releases/"
credentials {
username "admin"
password "votre-mot-de-passe"
}
}
}
publications {
maven(MavenPublication) {
from components.java
}
}
}
Publier :
gradle publish
Nexus REST API
Nexus expose une API REST complète pour interagir par programme.
Ce qu'on peut faire avec l'API
- Lister les repositories
- Lister les composants d'un repository
- Télécharger un artifact
- Uploader un artifact
- Gérer les utilisateurs et rôles
Exemples avec curl
# Lister tous les repositories
curl -u user:password -X GET \
'http://IP-NEXUS:8081/service/rest/v1/repositories'
# Lister les composants d'un repository
curl -u user:password -X GET \
'http://IP-NEXUS:8081/service/rest/v1/components?repository=maven-snapshots'
# Télécharger un artifact spécifique
curl -u user:password -X GET \
'http://IP-NEXUS:8081/repository/maven-releases/com/exemple/app/1.0/app-1.0.jar' \
-o app-1.0.jar
Conseil : toujours consulter la documentation officielle pour les endpoints — l'API évolue et il y a beaucoup d'endpoints. Pas besoin d'apprendre par coeur.
Utilisation dans un pipeline CI/CD
# Dans un script Jenkins/GitLab CI — télécharger la dernière version
ARTIFACT_URL=$(curl -u $NEXUS_USER:$NEXUS_PWD \
"http://nexus:8081/service/rest/v1/components?repository=maven-releases&name=app" \
| jq -r '.items[0].assets[0].downloadUrl')
curl -u $NEXUS_USER:$NEXUS_PWD -O "$ARTIFACT_URL"
Component vs Asset
Deux termes importants dans l'interface Nexus :
| Component | Asset | |
|---|---|---|
| Nature | Abstrait | Physique |
| Définition | Ce qu'on uploade (concept) | Le fichier physique réel |
| Relation | 1 component | = 1 ou plusieurs assets |
| Exemples | Application v1.0 | app-1.0.jar + app-1.0.pom |
Exemple concret :
- Component :
com.exemple:app:1.0 - Assets :
app-1.0.jar,app-1.0.pom,app-1.0-sources.jar
Cleanup Policies (Politiques de nettoyage)
Les repositories grossissent vite. Nexus permet de définir des politiques de nettoyage automatique.
Critères de suppression
Supprimer les artifacts :
├── Plus vieux que 30 jours
├── Pas téléchargés depuis plus de 10 jours
├── En fonction du format de version (snapshots vs releases)
└── Combinaison de critères
Configurer une Cleanup Policy
- Administration → Repository → Cleanup Policies
- Créer une nouvelle politique avec les critères voulus
- Assigner la politique à un repository spécifique
Scheduled Tasks (Tâches planifiées)
Nexus permet aussi de planifier des tâches sur un calendrier configurable :
- Appliquer les cleanup policies à une heure précise
- Compacter le blob store
- Recréer les métadonnées des repositories
- Export de configuration
Gestion des Utilisateurs et Rôles
Nexus intègre un système de rôles et permissions :
| Rôle prédéfini | Permissions |
|---|---|
nx-admin | Accès complet |
nx-anonymous | Lecture seule (si activé) |
| Custom roles | À définir selon vos besoins |
Bonne pratique : créer des utilisateurs dédiés pour le CI/CD (avec permissions limitées en lecture/écriture sur les repositories concernés uniquement).
Intégration complète dans un pipeline DevOps
git push
│
▼
┌────────────────────────────────────────────────────────┐
│ Pipeline CI/CD (Jenkins) │
│ │
│ 1. git clone 2. mvn test 3. mvn package │
│ │ │
│ ▼ │
│ mvn deploy │
│ ────────── │
│ push JAR → NEXUS │
└────────────────────────────────────────────────────────┘
│
▼
NEXUS
(maven-releases)
│
▼
Serveur de production
curl download depuis NEXUS
java -jar app.jar
À retenir
- 3 types de repos Nexus : Hosted (interne), Proxy (cache vers public), Group (agrège plusieurs)
- Formats : maven2 (Java), npm (JS), docker (images), nuget (.NET), pypi (Python)...
- Publier avec Maven :
mvn deploy(configurerdistributionManagement+ credentials)- Publier avec Gradle : plugin
maven-publish+gradle publish- REST API :
curl -u user:pwd GET /service/rest/v1/repositories— toujours consulter la doc- Component = concept abstrait de ce qu'on uploade ; Asset = le fichier physique
- Cleanup Policies : supprimer automatiquement les artifacts vieux ou inutilisés
- Scheduled Tasks : planifier les cleanups et maintenances sur un calendrier