Jenkins with Azure Repos
À la fin de ce tutoriel, vous saurez relier un projet Maven hébergé dans Azure Repos à un job Jenkins (plugin Maven Integration), sécuriser l’accès avec un PAT / credentials scopés, générer un API Token Jenkins, et déclencher automatiquement le build via Azure DevOps Service Hooks (événement Code Pushed) — sans secrets en clair, branche
mainpréférée.Niveau : Débutant → intermédiaire · Temps estimé : 50–70 min · Versions testées : Jenkins LTS 2026, Maven 3.9.x, Azure DevOps Services (Repos + Service Hooks), Ubuntu 22.04/24.04 · Dernière vérification : 2026-09-12
Slug live :
jenkins-with-azure-repos· Série : Jenkins / Azure DevOps · Lesson 22 / 31 · Post WP : #1072 · URL : https://devopelastichayway.com/jenkins-with-azure-repos/
Prérequis
- Jenkins LTS déjà installé et joignable (port 8080 ou reverse-proxy) — voir Jenkins Installation et le hub Jenkins
- Machine Ubuntu avec Java (JDK 17+) et Git ; droits
sudopour installer Maven - Organisation et projet Azure DevOps (Free tier) — carte des services : Azure DevOps Tools
- Notions Git de base (
clone,commit,push) et branche par défautmain(évitezmastersauf legacy) - Droit de créer un dépôt Azure Repos + PAT scope minimal (
Code (Read)ouRead & Write) - Navigateur récent ; MFA sur le compte lab
Coût estimé : 0 € (ADO Free + Jenkins lab). Aucun PAT / API Token en clair dans Git ou captures.
Ce que nous allons construire
Ubuntu lab
├── Maven (apt) + projet sample myproj (groupId com.java)
└── git push → Azure Repos (branche main)
Jenkins
├── Plugin Maven Integration
├── Job Maven Project : Git URL Azure Repos + credentials (PAT)
├── Goals : clean package
└── API Token (People → admin → Configure)
Azure DevOps
└── Service Hooks → Jenkins → trigger « Code Pushed »
Résultat : push code → job Jenkins se déclenche
Ce guide enrichit WP #1072 (jenkins with azure repos) : thèmes d’origine conservés (overview, Maven myproj, Azure Repo, credentials, plugin, clean package, API Token, Service Hooks, push→build), traduits et densifiés en FR. Pas d’<img> Blogger : texte, tableaux, pre.
Étape 1 — Jenkins CI/CD : rappel et place d’Azure Repos
Jenkins orchestre builds, tests et déploiements (jobs / pipelines). À côté d’Azure Pipelines, il peut consommer le même code dans Azure Repos. Vue d’ensemble : Jenkins · Jenkins Installation. Ici Jenkins est déjà démarré (UI souvent sur le port 8080).
Pourquoi Jenkins with Azure Repos ? Source unique dans Azure Repos, CI répétable (mvn clean package sur agent connu), gouvernance via PAT / Service Hooks, et pont hybride pour les équipes déjà sur Jenkins. Maillage : Azure Repo, Azure DevOps CI/CD Pipeline, Maven Build Tool.
Étape 2 — Projet Maven sample sur Ubuntu (com.java / myproj)
Sur la machine Ubuntu du lab, installez Maven si besoin :
sudo apt update
sudo apt install -y maven git openjdk-17-jdk
mvn -version
Créez un projet sample avec l’archétype Maven (comme dans le post d’origine). Acceptez les valeurs par défaut sauf :
| Paramètre | Valeur lab |
|---|---|
| groupId | com.java |
| artifactId | myproj |
Exemple de génération interactive :
mvn archetype:generate
-DgroupId=com.java
-DartifactId=myproj
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
cd myproj
Vérifiez localement : mvn clean package puis ls target/ (JAR/WAR). Le job Jenkins reproduira les Goals clean package. Ajoutez secrets / .env au .gitignore — ne committez jamais de tokens.
Étape 3 — Créer l’Azure Repo et pousser myproj
- Dans le portail Azure DevOps (
dev.azure.com), ouvrez votre organisation et le projet lab. - Repos → Files → New repository (ou utilisez un repo vide existant). Nommez-le par ex.
myproj. - Choisissez Git ; branche par défaut
main(l’EN historique citaitmaster— migrez).
Initialisez et poussez :
cd myproj
git init -b main
git add .
git commit -m "Initial setup Maven myproj"
git remote add origin https://dev.azure.com/<ORG>/<PROJECT>/_git/myproj
git push -u origin main
Remplacez <ORG> / <PROJECT>. Au push HTTPS, préférez un PAT (scope Code (Read & Write), expiration courte) plutôt qu’un mot de passe compte. Ne committez jamais le PAT. Contrôle : pom.xml visible sur main dans Azure Repos.
Étape 4 — Clone URL et credentials pour Jenkins
- Sur la page du dépôt, cliquez Clone et copiez l’URL HTTPS (forme
https://dev.azure.com/.../_git/myproj). - Créez (ou réutilisez) un PAT Azure DevOps à scope minimal pour le clone Jenkins :
– Scope typique job lecture seule : Code (Read)
– Si le job doit aussi pousser des tags : Code (Read & Write) — évitez Full access - Jenkins → Manage Jenkins → Credentials → Global → Add : Kind Username with password ; Username non vide (
pat) ; Password = le PAT ; IDado-myproj-pat.
En 2026, préférez le PAT (ou identité machine) au mot de passe compte : le « password » du credential Jenkins est le PAT scopé — même idée que l’EN d’origine, modernisée.
Étape 5 — Installer le plugin Maven Integration
- Jenkins → Manage Jenkins → Plugins (anciennement Manage plugins).
- Onglet Available : cherchez Maven Integration.
- Cochez et Install without restart (ou redémarrez proprement si demandé).
Sans ce plugin, le job Maven Project n’apparaît pas. Optionnel : Tools → Maven installations (/usr/share/maven). Détail Maven : Maven Build Tool.
Étape 6 — Job Maven Project : Git Azure Repos + Goals clean package
- New Item → nommez le job (ex.
myproj-maven) → type Maven Project → OK. - Section Source Code Management → Git :
– Repository URL = URL Clone Azure Repos
– Credentials =ado-myproj-pat
– Branches to build :*/main(ou*/masteruniquement si le repo legacy n’a pas migré) - Build → Goals and options : saisissez exactement :
clean package
- Save, puis Build Now manuellement.
Succès : console verte + artefact target/. Échecs fréquents : 401 credentials, mauvaise branche, pom.xml hors racine. Cœur du slug jenkins with azure repos : Azure Repos → Jenkins → clean package.
Étape 7 — API Token Jenkins (People → admin → Configure)
Pour que Azure DevOps Service Hooks puisse appeler Jenkins, générez un jeton API côté Jenkins (thème conservé du post EN) :
- Jenkins → People (ou Users) → utilisateur admin (ou le compte technique dédié).
- Configure → API Token → Add new Token / Generate.
- Copiez le token immédiatement : il n’est affiché qu’à la création.
- Stockez-le dans un coffre lab (Bitwarden, fichier hors Git, Variable Group Azure) — jamais dans le dépôt
myproj.
Bonnes pratiques : compte de service dédié, token rotaté, droits limités au job. Auth externe = username + API Token (HTTP Basic).
Étape 8 — Azure DevOps Service Hooks → Jenkins (Code Pushed)
- Projet Azure DevOps → Project settings → Service hooks.
- Create subscription → fournisseur Jenkins.
- Trigger : type d’événement Code pushed ; sélectionnez le repository
myproj(et éventuellement le filtre de branchemain). - Action : URL du job Jenkins (souvent
http://<jenkins-host>:8080/job/myproj-maven/ou l’endpoint documenté par le connecteur), username Jenkins + API Token généré à l’étape 7. - Testez la connexion depuis l’assistant Service Hooks, puis Finish.
Le Service Hook remplace le polling : chaque push notifie Jenkins. Azure DevOps doit atteindre l’hôte (IP publique, tunnel, reverse) — un Jenkins localhost seul ne reçoit pas le webhook cloud.
Étape 9 — Push code → le job Jenkins se déclenche
Boucle de validation (smoke lab) :
- Modifiez un fichier source dans
myproj(ex. message dansApp.java). git add/git commit/git push origin main.- Dans Azure DevOps → Service hooks → historique : livraison Succeeded.
- Dans Jenkins → job
myproj-maven: un nouveau build apparaît sans clic Build Now. - Console :
mvn clean packageOK.
Si rien ne se déclenche : filtre branche, URL job, token, réseau. Si build rouge : aligner JDK agent et pom.xml.
Tableau récapitulatif du flux
| Étape | Où | Action |
|---|---|---|
| 1–2 | Ubuntu | Maven + myproj (com.java) |
| 3 | Azure Repos | Repo + git push main |
| 4 | Jenkins Credentials | PAT Azure DevOps |
| 5 | Plugins | Maven Integration |
| 6 | Job Maven | Git URL + clean package |
| 7 | People/admin | API Token Jenkins |
| 8 | Service Hooks | Jenkins + Code Pushed |
| 9 | Git push | Build auto |
Erreurs fréquentes
| Symptôme | Cause probable | Correction |
|---|---|---|
| Clone Jenkins 401 / 403 | PAT expiré, mauvais scope, username vide | Nouveau PAT Code (Read) ; username non vide + PAT en password |
Job ne trouve pas pom.xml |
Repo racine différente / sous-dossier | Ajuster Root POM ou structure repo |
| Branche non buildée | Filtre */master alors que défaut = main |
Mettre */main partout (job + hook) |
| Service Hook Failed | Jenkins injoignable depuis Internet | Exposer HTTPS / tunnel ; tester l’URL depuis un réseau externe |
| Token Jenkins rejeté | Token mal copié / compte sans droit | Régénérer API Token ; vérifier permissions job |
clean package rouge |
JDK incompatible / tests fail | Aligner JDK 17+ ; lire surefire logs |
| Secret dans Git | PAT commité par erreur | Révoquer immédiatement le PAT ; purger l’historique ; .gitignore |
Quiz (5 questions)
1. Quel couple Maven du lab d’origine doit être conservé ?
– A. groupId org.demo / artifactId sample
– B. groupId com.java / artifactId myproj
– C. groupId com.azure / artifactId jenkins
– D. Aucun pom.xml n’est requis
2. Pour authentifier Jenkins vers Azure Repos en 2026, on privilégie…
– A. Mot de passe Microsoft en clair dans le job
– B. Un PAT Azure DevOps scopé (souvent comme « password » du credential)
– C. Committer le PAT dans src/main/resources
– D. Désactiver HTTPS
3. Quel plugin Jenkins active le type de job Maven Project ?
– A. Docker Pipeline uniquement
– B. Maven Integration
– C. Azure CLI Plugin obligatoire
– D. Rank Math
4. Goals Maven demandés dans le job d’origine ?
– A. deploy site
– B. clean package
– C. jetty:run seulement
– D. dependency:purge-local-repository
5. Quel événement Service Hooks déclenche Jenkins après un push ?
– A. Work item created
– B. Code Pushed
– C. Release abandoned
– D. Pull request voted
Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B
Points clés
- Jenkins with Azure Repos : dépôt ADO → job Maven Jenkins (CI hybride).
- Scénario conservé :
com.java/myproj, Maven Integration,clean package, API Token, Service Hooks Code Pushed. - Credentials 2026 : PAT scopé, branche
main, zéro secret dans Git. - Validez Build Now manuel avant le déclenchement au push.
Pour aller plus loin (maillage)
| Ressource | Lien |
|---|---|
| Hub Jenkins | /jenkins/ |
| Installation Jenkins | /jenkins-installation/ |
| Azure Repo | /azure-repo/ |
| Maven Build Tool | /maven-build-tool/ |
| Azure DevOps CI/CD Pipeline | /azure-devops-cicd-pipeline/ |
| Azure DevOps Tools | /azure-devops-tools/ |
Retour parcours Azure DevOps — hub de la série et leçons sœurs.



