Compare commits
8 Commits
513ac8356e
...
add-ci
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a341c51ee | ||
|
|
b4555aa73f | ||
|
|
33b24c62d4 | ||
|
|
ac66320f9a | ||
|
|
71cc786ea5 | ||
|
|
56aa4c7b3a | ||
|
|
cb499eaf32 | ||
|
|
1d67074daa |
65
Jenkinsfile
vendored
Normal file
65
Jenkinsfile
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
pipeline {
|
||||
agent any
|
||||
tools {
|
||||
maven 'maven-3.9'
|
||||
}
|
||||
stages {
|
||||
stage('Compilation') {
|
||||
steps {
|
||||
echo "Compilation du projet..."
|
||||
sh 'mvn clean compile'
|
||||
}
|
||||
}
|
||||
stage('Tests') {
|
||||
steps {
|
||||
echo "Exécution des tests..."
|
||||
sh 'mvn test'
|
||||
}
|
||||
post {
|
||||
always {
|
||||
// Publier les résultats de tests JUnit dans Jenkins
|
||||
junit 'target/surefire-reports/*.xml'
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Packaging') {
|
||||
steps {
|
||||
echo "Packaging de l'application (sans exécuter les tests)..."
|
||||
sh 'mvn package -DskipTests'
|
||||
}
|
||||
}
|
||||
stage('Déploiement') {
|
||||
steps {
|
||||
sh '''
|
||||
echo "=== Déploiement simple sur le port 8081 ==="
|
||||
|
||||
cd "$WORKSPACE"
|
||||
|
||||
# 1) Arrêter l'ancienne instance de CE jar (et pas tout java)
|
||||
OLD_PIDS=$(pgrep -f "rock-paper-scissors-0.0.1-SNAPSHOT.jar" || true)
|
||||
if [ -n "$OLD_PIDS" ]; then
|
||||
echo "Arrêt des anciennes instances: $OLD_PIDS"
|
||||
kill $OLD_PIDS || true
|
||||
sleep 5
|
||||
else
|
||||
echo "Aucune ancienne instance à arrêter."
|
||||
fi
|
||||
|
||||
# 2) Vérifier que le jar existe
|
||||
JAR_FILE=target/rock-paper-scissors-0.0.1-SNAPSHOT.jar
|
||||
if [ ! -f "$JAR_FILE" ]; then
|
||||
echo "ERREUR : $JAR_FILE introuvable"
|
||||
exit 1
|
||||
fi
|
||||
echo "Jar sélectionné : $JAR_FILE"
|
||||
|
||||
# 3) Démarrer en arrière-plan, en évitant que Jenkins tue le process
|
||||
echo "Démarrage de l'application..."
|
||||
JENKINS_NODE_COOKIE=dontKillMe nohup java -jar "$JAR_FILE" --server.port=8081 > app.log 2>&1 &
|
||||
|
||||
echo "Déploiement terminé (process lancé en arrière-plan)."
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
176
README.md
Normal file
176
README.md
Normal file
@@ -0,0 +1,176 @@
|
||||
# Travaux Pratiques CI/CD
|
||||
|
||||
Le but de ce TP est d’utiliser un git déjà existant et d’y installer une multibranche pipeline Jenkins.
|
||||
|
||||
## Copier le git du TP sur son profil
|
||||
Se rendre sur : https://grond.iut-fbleau.fr/pierront/rock-paper-scissors
|
||||
|
||||
Faire un fork
|
||||
|
||||
## Créer la VM pour jenkins
|
||||
### Créer la règle pare-feu pour accéder aux ports 8080 et 8081
|
||||
Aller dans la section Pare-Feu
|
||||
|
||||
* Cliquer -> Créer une règle de pare-feu
|
||||
* Nom : jenkins-rule
|
||||
* Sens du trafic : Entrée
|
||||
* Tag cibles : jenkins
|
||||
* Plages IPv4 source : 0.0.0.0/0
|
||||
* Cocher TCP
|
||||
* Ports : 8080, 8081
|
||||
* Puis créer
|
||||
|
||||
---
|
||||
|
||||
* Créer la VM
|
||||
* Configuration de la machine
|
||||
* Nom : jenkins
|
||||
* Région : la plus proche
|
||||
* Série : E2 / e2-medium
|
||||
* Mise en réseau
|
||||
* Cocher Autoriser le trafic HTTP
|
||||
* Cocher Autoriser le trafic HTTPS
|
||||
* Tags réseau : ajouter jenkins
|
||||
* Créer la VM
|
||||
|
||||
---
|
||||
|
||||
## Installation de Jenkins sur la VM
|
||||
|
||||
Installer git
|
||||
```bash
|
||||
sudo apt install -y git
|
||||
```
|
||||
|
||||
Installer Java
|
||||
```bash
|
||||
sudo apt install -y wget apt-transport-https gpg
|
||||
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
|
||||
echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
|
||||
sudo apt update
|
||||
sudo apt install temurin-21-jdk
|
||||
```
|
||||
|
||||
Installer Jenkins
|
||||
```bash
|
||||
sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \
|
||||
https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
|
||||
echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" \
|
||||
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
|
||||
/etc/apt/sources.list.d/jenkins.list > /dev/null
|
||||
sudo apt update
|
||||
sudo apt install jenkins
|
||||
```
|
||||
|
||||
Verifier s'il a bien démarrer :
|
||||
`systemctl status jenkins`
|
||||
|
||||
Se rendre sur l'adresse IP de la VM : http://<IP_EXTERNE_VM>:8080
|
||||
|
||||
Vous devriez voir la page d'accueil de Jenkins
|
||||

|
||||
|
||||
* Suivre les instructions pour la creation de compte admin
|
||||
* Selectionner : Install suggested plugins
|
||||
* Créer un nouveau compte admin
|
||||
* Voir cette page
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Configuration de Jenkins avec Gitea
|
||||
|
||||
### Installer le plugin Gitea
|
||||
* Aller dans la section Manage Jenkins **(roue crantée)** -> Plugins
|
||||
* Rechercher Gitea
|
||||
* Installer le plugin
|
||||
|
||||
### Configurer Maven
|
||||
* Aller dans la section Manage Jenkins **(roue crantée)** -> Tools
|
||||
* Add Maven
|
||||
* Nom : maven-3.9
|
||||
* Cocher Install automatically
|
||||
* Version : 3.9.11
|
||||
* Cliquer sur Save
|
||||
|
||||
### Récupérer un token Gitea
|
||||
* Se rendre sur Gitea
|
||||
* Cliquer sur profil -> Settings -> Applications -> Generate new token
|
||||
* Nom du jeton : jenkins-token
|
||||
* Avec ces options :
|
||||

|
||||
* Cliquer sur Generate token
|
||||
* **Copier le token pour ne pas le perdre**
|
||||
### Configurer Jenkins pour utiliser Gitea
|
||||
* Aller dans la section Manage Jenkins -> System
|
||||
* Add Gitea Server
|
||||
* Choisir le nom du serveur (grond)
|
||||
* Metter l'url du serveur : https://grond.iut-fbleau.fr
|
||||
* Cocher Manage hooks
|
||||
* Cliquer sur _Add +_
|
||||
* Kind : Gitea Personal Access Token
|
||||
* Token : celui copié dans la section précédente
|
||||
* ID : gitea-token
|
||||
* Cliquer sur Add
|
||||
* Puis save
|
||||
|
||||
---
|
||||
|
||||
## Création d'un pipeline
|
||||
* Aller dans la section Manage Jenkins -> New Item
|
||||
* Nommer le projet : rock-paper-scissors
|
||||
* Choisir le type de projet : Multibranch Pipeline
|
||||
* Cliquer sur OK
|
||||
* Add a source
|
||||
* Gitea
|
||||
* utiliser le jeton gitea-token
|
||||
* owner : _<votre nom d'utilisateur gitea>_
|
||||
* Choisir le projet : rock-paper-scissors
|
||||
* Choisir le provider : Git
|
||||
* Choisir le repository : https://grond.iut-fbleau.fr/pierront/rock-paper-scissors.git
|
||||
* Cliquer sur Save
|
||||
|
||||
Voir que le scan se passe bien.
|
||||
|
||||
---
|
||||
|
||||
## Tester le pipeline
|
||||
* Aller dans la section Build History -> Build Now
|
||||
* Voir que le pipeline se passe bien
|
||||
|
||||
|
||||
Tester l'application via cette url : http://<IP_EXTERNE_VM>:8081/swagger-ui/index.html
|
||||
---
|
||||
|
||||
## Gestion du Jenkinsfile
|
||||
|
||||
* Regarder les étapes pour comprendre ce que fait le Jenkinsfile
|
||||
|
||||
---
|
||||
|
||||
## Ajouter le puits dans le code java
|
||||
|
||||
Le puits bat la pierre et les ciseaux.
|
||||
Le puits est battu par la feuille.
|
||||
|
||||
Grace à notre pipeline on peut voir le si le code fonctionne bien via les tests unitaires.
|
||||
Puis on peut tester réelement grace au deploiement sur la VM de l'application java.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Sources :
|
||||
* https://adoptium.net/installation/linux/#deb-installation-on-debian-or-ubuntu
|
||||
* https://www.jenkins.io/doc/book/installing/linux/#debianubuntu
|
||||
* https://plugins.jenkins.io/gitea/
|
||||
* https://www.jenkins.io/doc/book/pipeline/jenkinsfile/
|
||||
BIN
assets/gitea_token.png
Normal file
BIN
assets/gitea_token.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
BIN
assets/jenkins_home.png
Normal file
BIN
assets/jenkins_home.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 47 KiB |
BIN
assets/jenkins_start.png
Normal file
BIN
assets/jenkins_start.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 78 KiB |
2
pom.xml
2
pom.xml
@@ -27,7 +27,7 @@
|
||||
<url/>
|
||||
</scm>
|
||||
<properties>
|
||||
<java.version>25</java.version>
|
||||
<java.version>21</java.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
||||
@@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
@SpringBootApplication
|
||||
public class Application {
|
||||
|
||||
static void main(String[] args) {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,16 +5,17 @@ import fr.iut_fbleau.info.but3.automation.rock_paper_scissors.stat.domain.StatBo
|
||||
import fr.iut_fbleau.info.but3.automation.rock_paper_scissors.stat.spi.StatRepository;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Stub
|
||||
public record InMemoryStatRepository(Map<String, Integer> stats) implements StatRepository {
|
||||
|
||||
|
||||
private final static HashMap<String, Integer> DEFAULT_STATS = new LinkedHashMap<>(Map.of("joe", 1,"eoj", 3));
|
||||
|
||||
public InMemoryStatRepository() {
|
||||
HashMap<String, Integer> stats1 = new HashMap<>();
|
||||
stats1.put("joe", 1);
|
||||
stats1.put("eoj", 3);
|
||||
this(stats1);
|
||||
this(DEFAULT_STATS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user