« DEVOPS » : différence entre les versions

De Vitam
Aller à la navigation Aller à la recherche
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`.