« DEVOPS » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 24 : | Ligne 24 : | ||
-Durl=https://nexus.dev.programmevitam.fr/repository/maven-snapshots/ | -Durl=https://nexus.dev.programmevitam.fr/repository/maven-snapshots/ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
= Pipelines CI/CD VITAM = | |||
Ce document decrit les pipelines Jenkins du depot Vitam pour une publication dans MediaWiki. | |||
== Sources == | |||
* `Jenkinsfile` : pipeline principal (build, tests, packaging, publication). | |||
* `Jenkinsfile.containers` : pipeline de construction et de scan des images Docker. | |||
* `containers/vitam-external/sources.containers` : liste des images externes traitees. | |||
* `vitam-conf-dev/tests/initdb.d/` : scripts d'init MongoDB utilises par les tests. | |||
== Definition des branches importantes == | |||
Dans `Jenkinsfile`, la variable `IMPORTANT_BRANCH_OR_TAG` est vraie si : | |||
* la branche est `develop` ou `master_*`, ou | |||
* un tag Git est present. | |||
Cette condition commande l'execution des etapes lourdes (packaging, publication, etc.). | |||
== Pipeline principal (Jenkinsfile) == | |||
=== Agent, outils, environnement === | |||
* Agent Jenkins : label `build`. | |||
* Outils : | |||
** JDK : `java11` (par defaut), `java17` pour l'analyse Sonar. | |||
** Maven : `maven-3.8`. | |||
Variables d'environnement principales : | |||
{| class="wikitable" | |||
!Variable | |||
!Description | |||
|- | |||
|`MVN_COMMAND` | |||
|Commande Maven standard (mode batch, erreurs detaillees, build en fin de module). | |||
|- | |||
|`M2_REPO` | |||
|Depot Maven local (`$HOME/.m2`). | |||
|- | |||
|`CI` | |||
|Credentials Jenkins `app-jenkins`. | |||
|- | |||
|`SERVICE_SONAR_URL` | |||
|URL SonarQube. | |||
|- | |||
|`SERVICE_NEXUS_URL` | |||
|URL Nexus. | |||
|- | |||
|`SERVICE_REPO_SSHURL` | |||
|URL SSH du depot de publication. | |||
|- | |||
|`SERVICE_GIT_URL` | |||
|URL Git (scripts de publication). | |||
|- | |||
|`SERVICE_DOCKER_PULL_URL` | |||
|Registry Docker pour les images de test. | |||
|- | |||
|`SERVICE_REPOSITORY_URL` | |||
|URL du repository applicatif. | |||
|- | |||
|`GITHUB_ACCOUNT_TOKEN` | |||
|Token GitHub (usage CI). | |||
|- | |||
|`ES_VERSION` / `MONGO_VERSION` / `MINIO_VERSION` / `OPENIO_VERSION` | |||
|Versions des services Docker de test. | |||
|} | |||
=== Etapes === | |||
==== Show configuration ==== | |||
* Lit `sources/pom.xml` pour extraire la version. | |||
* Affiche des informations de contexte (workspace, branche, version). | |||
==== Detecting changes for build ==== | |||
* Compare le commit courant avec le precedent build reussi. | |||
* Ecrit la liste des repertoires modifies dans `.changed_roots.txt`. | |||
* Met a jour `CHANGED_VITAM` et `CHANGED_VITAM_PRODUCT` pour information. | |||
==== Reinit host & containers ==== | |||
* Supprime les conteneurs Docker utilises pour les tests. | |||
* Nettoie les volumes Docker. | |||
* Purge le cache Maven `fr/gouv/vitam`. | |||
* Prepare un volume local pour MinIO SSL. | |||
==== Prepare Docker containers for testing ==== | |||
Demarre les services necessaires aux tests d'integration : | |||
* Swift (Keystone + Swift), | |||
* MinIO SSL et non-SSL, | |||
* Elasticsearch, | |||
* MongoDB (replica set), | |||
* OpenIO. | |||
Puis configure Elasticsearch et Swift via appels HTTP. | |||
==== Execute unit and integration tests on merge requests ==== | |||
Condition : `!IMPORTANT_BRANCH_OR_TAG`. | |||
* `spotless:check`. | |||
* `clean verify` + `dependency-check` OWASP. | |||
* NVM Node.js `v18.20.3`. | |||
* Nettoyage Docker en fin d'etape. | |||
Post-actions : | |||
* Publication des rapports JUnit. | |||
* Archivage du rapport OWASP si present. | |||
* Statuts GitLab `mergerequest` mis a jour. | |||
==== Sonar analysis on merge requests ==== | |||
Condition : `!IMPORTANT_BRANCH_OR_TAG`. | |||
* JDK `java17`. | |||
* Execution `sonar:sonar` avec un projectKey derive du nom de branche. | |||
* Commentaire automatique dans la MR GitLab. | |||
==== Execute unit and integration tests on master branches ==== | |||
Condition : `IMPORTANT_BRANCH_OR_TAG`. | |||
* Meme sequence que pour les MR (sans statuts GitLab). | |||
==== Sonar analysis on master branches ==== | |||
Condition : `IMPORTANT_BRANCH_OR_TAG`. | |||
* Meme analyse Sonar que pour les MR. | |||
==== Build packages ==== | |||
Condition : `IMPORTANT_BRANCH_OR_TAG`. Execution parallele : | |||
* Packaging des sources Java (build local + javadoc + deploy + rpm + jdeb). | |||
* Checkout des scripts de publication (branche `scaleway_j11`) dans `vitam-build.git/`. | |||
==== Build doc package ==== | |||
Condition : `IMPORTANT_BRANCH_OR_TAG`. | |||
* Build de la documentation (`doc/pom.xml`) avec `jdeb` et `rpm`. | |||
* Publication des rapports JUnit. | |||
==== Prepare packages building ==== | |||
Condition : `IMPORTANT_BRANCH_OR_TAG`. | |||
* Nettoie les repertoires `target` des packages `deb` et `rpm`. | |||
==== Build vitam-product & vitam-external packages ==== | |||
Condition : `IMPORTANT_BRANCH_OR_TAG`. Execution parallele : | |||
* `rpm/vitam-product/build-all-docker.sh` | |||
* `deb/vitam-product/build-all.sh` | |||
* `rpm/vitam-external/build_repo.sh` | |||
* `deb/vitam-external/build_repo.sh` | |||
==== Publish packages ==== | |||
Condition : `IMPORTANT_BRANCH_OR_TAG`. Execution parallele via `sshagent` : | |||
* Publication des packages `vitam-product`. | |||
* Publication des packages `vitam-external`. | |||
* Publication de la documentation. | |||
* Publication des sources. | |||
* Publication du contenu `deployment`. | |||
Post-actions : | |||
* Notification Slack selon le statut du build. | |||
==== Update symlink ==== | |||
Condition : `IMPORTANT_BRANCH_OR_TAG`. | |||
* Met a jour les symlinks via `push_symlink_repo.sh`. | |||
==== Information ==== | |||
* Affiche le commit courant. | |||
* Execute `.ci/git_commands.sh`. | |||
=== Post-actions globales === | |||
* Nettoyage des volumes Docker. | |||
* Nettoyage du cache Maven `fr/gouv/vitam`. | |||
* Nettoyage du workspace Jenkins. | |||
== Pipeline conteneurs (Jenkinsfile.containers) == | |||
=== Agent, environnement === | |||
* Agent Jenkins : label `java11`. | |||
* Variables similaires au pipeline principal, avec en plus : | |||
** `SERVICE_DOCKER_PUSH_URL` pour la publication d'images. | |||
** `JAVA_HOME` defini explicitement. | |||
=== Etapes === | |||
==== Build and create vitam docker images ==== | |||
* Recupere `CONTAINER_VERSION` depuis `sources/pom.xml`. | |||
* Execute un build Maven avec Jib pour construire et pousser les images. | |||
* Retague et publie `metadata` et `workspace` en variantes `*-collect`. | |||
==== build cots ==== | |||
* Login aux registries Docker. | |||
* Lit `containers/vitam-external/sources.containers`. | |||
* Pour chaque ligne : pull depuis le registry source, tag et push vers `vitam-external/`. | |||
==== Set scanner prerequisites ==== | |||
* Installe Trivy (`v0.47.0`) et un template HTML. | |||
==== Scan containers ==== | |||
* Scanne une liste d'images Vitam avec Trivy. | |||
* Genere des rapports HTML par image et les publie via Jenkins HTML Publisher. | |||
=== Post-actions globales === | |||
* `docker system prune -a -f`. | |||
* Nettoyage du workspace Jenkins. | |||
== Prerequis d'execution == | |||
* Agent Jenkins avec Docker (privileges suffisants pour lancer des conteneurs). | |||
* Acces aux registries Docker (pull/push). | |||
* Acces a SonarQube, Nexus, GitLab et au depot de publication. | |||
* Credentials Jenkins requis : `app-jenkins`, `service-sonar-java11-url`, `service-nexus-url`, | |||
`repository-connection-string`, `service-gitlab-url`, `SERVICE_DOCKER_PULL_URL`, | |||
`SERVICE_DOCKER_PUSH_URL`, `service-repository-url`, `vitam-prg-token`, | |||
`jenkins_sftp_to_repository`. | |||
Version du 18 janvier 2026 à 22:51
Présentation de l'équipe
-Achoubie Mohamed
-Amrani Saad
-Bouayad Abderahmane
-Babacar
-Georges Julien
Upload snapshot spécial odfvalidator sur nexus
A défaut d'avoir mieux (upgrade réel & MAJ code), pour injecter la lib dans le nexus :
Récupérer la version odfvalidator depuis un précédent build (dans un RPM ou DEB)
mvn deploy:deploy-file -DgroupId=org.apache.odftoolkit \
-DartifactId=odfvalidator \
-Dversion=1.2.0-incubating-SNAPSHOT \
-Dclassifier=jar-with-dependencies \
-Dpackaging=jar \
-Dfile=/path/to/odfvalidator-jar-with-dependencies.jar \
-DrepositoryId=vitam \
-Durl=https://nexus.dev.programmevitam.fr/repository/maven-snapshots/
Pipelines CI/CD VITAM
Ce document decrit les pipelines Jenkins du depot Vitam pour une publication dans MediaWiki.
Sources
- `Jenkinsfile` : pipeline principal (build, tests, packaging, publication).
- `Jenkinsfile.containers` : pipeline de construction et de scan des images Docker.
- `containers/vitam-external/sources.containers` : liste des images externes traitees.
- `vitam-conf-dev/tests/initdb.d/` : scripts d'init MongoDB utilises par les tests.
Definition des branches importantes
Dans `Jenkinsfile`, la variable `IMPORTANT_BRANCH_OR_TAG` est vraie si :
- la branche est `develop` ou `master_*`, ou
- un tag Git est present.
Cette condition commande l'execution des etapes lourdes (packaging, publication, etc.).
Pipeline principal (Jenkinsfile)
Agent, outils, environnement
- Agent Jenkins : label `build`.
- Outils :
- JDK : `java11` (par defaut), `java17` pour l'analyse Sonar.
- Maven : `maven-3.8`.
Variables d'environnement principales :
| Variable | Description |
|---|---|
| `MVN_COMMAND` | Commande Maven standard (mode batch, erreurs detaillees, build en fin de module). |
| `M2_REPO` | Depot Maven local (`$HOME/.m2`). |
| `CI` | Credentials Jenkins `app-jenkins`. |
| `SERVICE_SONAR_URL` | URL SonarQube. |
| `SERVICE_NEXUS_URL` | URL Nexus. |
| `SERVICE_REPO_SSHURL` | URL SSH du depot de publication. |
| `SERVICE_GIT_URL` | URL Git (scripts de publication). |
| `SERVICE_DOCKER_PULL_URL` | Registry Docker pour les images de test. |
| `SERVICE_REPOSITORY_URL` | URL du repository applicatif. |
| `GITHUB_ACCOUNT_TOKEN` | Token GitHub (usage CI). |
| `ES_VERSION` / `MONGO_VERSION` / `MINIO_VERSION` / `OPENIO_VERSION` | Versions des services Docker de test. |
Etapes
Show configuration
- Lit `sources/pom.xml` pour extraire la version.
- Affiche des informations de contexte (workspace, branche, version).
Detecting changes for build
- Compare le commit courant avec le precedent build reussi.
- Ecrit la liste des repertoires modifies dans `.changed_roots.txt`.
- Met a jour `CHANGED_VITAM` et `CHANGED_VITAM_PRODUCT` pour information.
Reinit host & containers
- Supprime les conteneurs Docker utilises pour les tests.
- Nettoie les volumes Docker.
- Purge le cache Maven `fr/gouv/vitam`.
- Prepare un volume local pour MinIO SSL.
Prepare Docker containers for testing
Demarre les services necessaires aux tests d'integration :
- Swift (Keystone + Swift),
- MinIO SSL et non-SSL,
- Elasticsearch,
- MongoDB (replica set),
- OpenIO.
Puis configure Elasticsearch et Swift via appels HTTP.
Execute unit and integration tests on merge requests
Condition : `!IMPORTANT_BRANCH_OR_TAG`.
- `spotless:check`.
- `clean verify` + `dependency-check` OWASP.
- NVM Node.js `v18.20.3`.
- Nettoyage Docker en fin d'etape.
Post-actions :
- Publication des rapports JUnit.
- Archivage du rapport OWASP si present.
- Statuts GitLab `mergerequest` mis a jour.
Sonar analysis on merge requests
Condition : `!IMPORTANT_BRANCH_OR_TAG`.
- JDK `java17`.
- Execution `sonar:sonar` avec un projectKey derive du nom de branche.
- Commentaire automatique dans la MR GitLab.
Execute unit and integration tests on master branches
Condition : `IMPORTANT_BRANCH_OR_TAG`.
- Meme sequence que pour les MR (sans statuts GitLab).
Sonar analysis on master branches
Condition : `IMPORTANT_BRANCH_OR_TAG`.
- Meme analyse Sonar que pour les MR.
Build packages
Condition : `IMPORTANT_BRANCH_OR_TAG`. Execution parallele :
- Packaging des sources Java (build local + javadoc + deploy + rpm + jdeb).
- Checkout des scripts de publication (branche `scaleway_j11`) dans `vitam-build.git/`.
Build doc package
Condition : `IMPORTANT_BRANCH_OR_TAG`.
- Build de la documentation (`doc/pom.xml`) avec `jdeb` et `rpm`.
- Publication des rapports JUnit.
Prepare packages building
Condition : `IMPORTANT_BRANCH_OR_TAG`.
- Nettoie les repertoires `target` des packages `deb` et `rpm`.
Build vitam-product & vitam-external packages
Condition : `IMPORTANT_BRANCH_OR_TAG`. Execution parallele :
- `rpm/vitam-product/build-all-docker.sh`
- `deb/vitam-product/build-all.sh`
- `rpm/vitam-external/build_repo.sh`
- `deb/vitam-external/build_repo.sh`
Publish packages
Condition : `IMPORTANT_BRANCH_OR_TAG`. Execution parallele via `sshagent` :
- Publication des packages `vitam-product`.
- Publication des packages `vitam-external`.
- Publication de la documentation.
- Publication des sources.
- Publication du contenu `deployment`.
Post-actions :
- Notification Slack selon le statut du build.
Update symlink
Condition : `IMPORTANT_BRANCH_OR_TAG`.
- Met a jour les symlinks via `push_symlink_repo.sh`.
Information
- Affiche le commit courant.
- Execute `.ci/git_commands.sh`.
Post-actions globales
- Nettoyage des volumes Docker.
- Nettoyage du cache Maven `fr/gouv/vitam`.
- Nettoyage du workspace Jenkins.
Pipeline conteneurs (Jenkinsfile.containers)
Agent, environnement
- Agent Jenkins : label `java11`.
- Variables similaires au pipeline principal, avec en plus :
- `SERVICE_DOCKER_PUSH_URL` pour la publication d'images.
- `JAVA_HOME` defini explicitement.
Etapes
Build and create vitam docker images
- Recupere `CONTAINER_VERSION` depuis `sources/pom.xml`.
- Execute un build Maven avec Jib pour construire et pousser les images.
- Retague et publie `metadata` et `workspace` en variantes `*-collect`.
build cots
- Login aux registries Docker.
- Lit `containers/vitam-external/sources.containers`.
- Pour chaque ligne : pull depuis le registry source, tag et push vers `vitam-external/`.
Set scanner prerequisites
- Installe Trivy (`v0.47.0`) et un template HTML.
Scan containers
- Scanne une liste d'images Vitam avec Trivy.
- Genere des rapports HTML par image et les publie via Jenkins HTML Publisher.
Post-actions globales
- `docker system prune -a -f`.
- Nettoyage du workspace Jenkins.
Prerequis d'execution
- Agent Jenkins avec Docker (privileges suffisants pour lancer des conteneurs).
- Acces aux registries Docker (pull/push).
- Acces a SonarQube, Nexus, GitLab et au depot de publication.
- Credentials Jenkins requis : `app-jenkins`, `service-sonar-java11-url`, `service-nexus-url`,
`repository-connection-string`, `service-gitlab-url`, `SERVICE_DOCKER_PULL_URL`, `SERVICE_DOCKER_PUSH_URL`, `service-repository-url`, `vitam-prg-token`, `jenkins_sftp_to_repository`.