DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

Azure DevOpsLesson 22 / 319 min readUpdated September 13, 2026

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 main pré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 sudo pour 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éfaut main (évitez master sauf legacy)
  • Droit de créer un dépôt Azure Repos + PAT scope minimal (Code (Read) ou Read & 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

  1. Dans le portail Azure DevOps (dev.azure.com), ouvrez votre organisation et le projet lab.
  2. Repos → Files → New repository (ou utilisez un repo vide existant). Nommez-le par ex. myproj.
  3. Choisissez Git ; branche par défaut main (l’EN historique citait master — 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

  1. Sur la page du dépôt, cliquez Clone et copiez l’URL HTTPS (forme https://dev.azure.com/.../_git/myproj).
  2. 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
  3. Jenkins → Manage Jenkins → Credentials → Global → Add : Kind Username with password ; Username non vide (pat) ; Password = le PAT ; ID ado-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

  1. Jenkins → Manage Jenkins → Plugins (anciennement Manage plugins).
  2. Onglet Available : cherchez Maven Integration.
  3. 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

  1. New Item → nommez le job (ex. myproj-maven) → type Maven Project → OK.
  2. Section Source Code Management → Git :
    – Repository URL = URL Clone Azure Repos
    – Credentials = ado-myproj-pat
    – Branches to build : */main (ou */master uniquement si le repo legacy n’a pas migré)
  3. Build → Goals and options : saisissez exactement :
clean package
  1. 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) :

  1. Jenkins → People (ou Users) → utilisateur admin (ou le compte technique dédié).
  2. Configure → API Token → Add new Token / Generate.
  3. Copiez le token immédiatement : il n’est affiché qu’à la création.
  4. 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)

  1. Projet Azure DevOps → Project settings → Service hooks.
  2. Create subscription → fournisseur Jenkins.
  3. Trigger : type d’événement Code pushed ; sélectionnez le repository myproj (et éventuellement le filtre de branche main).
  4. 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.
  5. 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) :

  1. Modifiez un fichier source dans myproj (ex. message dans App.java).
  2. git add / git commit / git push origin main.
  3. Dans Azure DevOps → Service hooks → historique : livraison Succeeded.
  4. Dans Jenkins → job myproj-maven : un nouveau build apparaît sans clic Build Now.
  5. Console : mvn clean package OK.

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.

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *