DEVOPS

De Vitam
Version datée du 19 janvier 2026 à 19:09 par 192.168.2.2 (discussion)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

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 .

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`.

Pipelines CI/CD VITAMUI

Ce document decrit les pipelines Jenkins du depot Vitamui. Il couvre les jobs "build/deploy" et "containers/scan".

Vue d'ensemble

  • Deux fichiers de pipeline: `Jenkinsfile` et `Jenkinsfile.containers`.
  • Agent Jenkins: label `build`.
  • Outillage commun: JDK 11 et Maven 3.9 (selon le pipeline).
  • Nettoyage systematique en fin de job.

Pipeline build et publication (Jenkinsfile)

Objectif

Construire, tester, publier les artefacts Maven (deb/rpm), et mettre a jour le depot de publication.

Variables d'environnement

  • `MVN_BASE` et `MVN_COMMAND`: base Maven avec settings `.ci/settings.xml` et options CI.
  • `M2_REPO`: `${HOME}/.m2`.
  • Identifiants Jenkins requis (noms de credentials):
    • `app-jenkins`
    • `service-gitlab-url`
    • `service-nexus-url`
    • `repository-connection-string`
    • `service-repository-url`

Options

  • Timeout global: 4 heures.
  • Pas de builds concurrents.
  • Conservation des builds: 100.

Parametrage execution

  • Stage "Set variables for automatic run": fixe les flags par defaut.
  • Stage "Ask for build execution": pour toutes les branches hors `develop*`, `master_*` et tags de version, un input permet d'activer/retirer:
    • `DO_BUILD_AND_TEST`
    • `DO_DEPLOY`
    • `DO_DEPLOY_PASTIS_STANDALONE`
    • `DO_PUBLISH`

Stages

Upgrade build context

  • Installe les prerequis systeme (build-essential, make, ruby, jq).
  • Force le timezone a `Europe/Paris`.
  • Installe `fpm` via rubygems.
  • Installe Node `v14.15.1` via `nvm` et injecte le chemin dans `PATH`.

Build and test

Condition: `DO_BUILD_AND_TEST=true`.

  • Parallele:
    • Check icomoon: `./tools/check_icomoon.sh`.
    • Build Frontend: Maven `clean verify` sur `ui/ui-frontend` et `ui/ui-frontend-common`.
    • Build Backend: Maven `clean verify` en excluant les modules front/cots.
  • Post: collecte des rapports JUnit (`**/target/surefire-reports/*.xml`, `**/target/junit/*.xml`).

Deploy to Nexus

Condition: `DO_DEPLOY=true`.

  • Maven `deploy` avec profils `vitam,deb,rpm`, tests et license skips.

Deploy PASTIS standalone

Condition: `DO_DEPLOY_PASTIS_STANDALONE=true`.

  • Maven `install` en excluant plusieurs modules UI.
  • Maven `deploy` du module `api/api-pastis/pastis-standalone` avec profil `standalone`.

Build COTS

Condition: `DO_DEPLOY=true`.

  • Maven `deploy` dans `cots/`.

Get publishing scripts

Condition: `DO_PUBLISH=true` et `DO_DEPLOY=true`.

  • Checkout d'un depot de scripts (branche `scaleway_j11`) dans `vitam-build.git`.

Publish rpm and deb

Condition: `DO_PUBLISH=true` et `DO_DEPLOY=true`.

  • Execution des scripts `push_vitamui_repo.sh` pour rpm et deb via `sshagent`.

Update symlink

Condition: branche `develop` ou `master_*` ou tag de version, et `DO_PUBLISH=true` et `DO_DEPLOY=true`.

  • Execution de `push_symlink_repo.sh` via `sshagent`.

Post actions

  • `docker volume prune -f`.
  • Suppression de `~/.m2/repository/fr/gouv/vitamui/`.
  • `cleanWs()`.

Pipeline containers et scan (Jenkinsfile.containers)

Objectif

Construire les images Docker, scanner les vulnerabilites avec Trivy, publier les rapports HTML.

Variables d'environnement

  • `MVN_BASE` et `MVN_COMMAND`.
  • `M2_REPO`.
  • Identifiants Jenkins requis:
    • `app-jenkins`
    • `service-sonar-java11-url`
    • `service-nexus-url`
    • `repository-connection-string`
    • `SERVICE_DOCKER_PULL_URL`
    • `SERVICE_DOCKER_PUSH_URL`
    • `service-repository-url`
    • `vitam-prg-token`

Stages

Build and create docker images

  • Outils: JDK 11, Maven 3.9.
  • Maven `install/package` avec `jib` active, tests sautes, profil `vitam`.
  • Authentification Jib via credentials Jenkins `app-jenkins`.

Set scanner prerequisites

  • Installe Trivy `v0.47.0` et le template HTML.
  • Login Docker registry (push URL) via `app-jenkins`.

Scan containers

  • Liste d'images Docker (security-internal, iam-*, referential-*, ingest-*, archive-search-*, pastis-*, collect-*, api-gateway, cas-server, ui-*).
  • Pour chaque image:
    • `docker pull`.
    • Scan Trivy avec rapport HTML (ignore-unfixed, os+library).
    • Publication du rapport HTML via `publishHTML`.

Post actions

  • `docker system prune -a -f`.
  • `cleanWs()`.


Pipelines CI/CD VITAM-PUBLISH

Ce document decrit la pipeline Jenkins du depot vitam-build. Elle orchestre le build du depot Vitam et publie les artefacts (sources, documentation, packages) vers les repositories de distribution.

Sources

  • `Jenkinsfile` : definition de la pipeline.
  • `push_sources_repo.sh` : publication des packages sources.
  • `push_doc_repo.sh` : publication de la documentation.
  • `push_product_repo.sh` : publication des packages vitam-product.
  • `push_external_repo.sh` : publication des packages vitam-external.
  • `push_deployment_repo.sh` : publication du contenu deployment.

Pipeline (Jenkinsfile)

Description

La pipeline permet de choisir une version (branche ou commit) du depot Vitam, de construire les packages et la documentation, puis de publier le contenu dans les repositories internes via SFTP.

Agent, outils, environnement

  • Agent Jenkins : label `publish`.
  • Outils :
    • JDK : `java11`.

Variables d'environnement principales :

Variable Description
`M2_REPO` Depot Maven local (`$HOME/.m2`).
`SERVICE_NEXUS_URL` URL Nexus.
`MVN_BASE` Commande Maven avec `settings.xml` Vitam.
`MVN_COMMAND` Commande Maven standard (build sans tests).
`http_proxy` / `https_proxy` Proxy reseau pour les builds.
`no_proxy` Exclusions proxy.
`CI` Credentials Jenkins `app-jenkins`.
`SERVICE_REPO_SSHURL` URL SSH du depot de publication.
`SERVICE_REPOSITORY_URL` URL du repository applicatif.
`DEPLOY_GOAL` Objectif Maven utilise pour le deploy.
`GIT_BRANCH` Placeholder pour la branche cible.

Etapes

Choose version to publish

  • En mode manuel : demande une branche ou un commit a deployer.
  • En MR GitLab : prend `gitlabSourceBranch` et met le statut `publish` a `running`.

Display information

  • Affiche l'initiateur du build et la version Vitam ciblee.
  • Ajoute des badges d'information dans Jenkins.

Checkout vitam repo

  • Clone le depot Vitam dans `vitam.git`.
  • Enregistre le commit dans `vitam_commit.txt`.

Build VITAM sources, product & external

Execution parallele :

  • Build `vitam-external` (rpm + deb).
  • Build `vitam-product` (rpm + deb).
  • Build des sources Java (install + javadoc + rpm + jdeb).

Build VITAM doc

  • Build de la documentation (`doc`) avec rpm et jdeb.

Publish to repository

Execution parallele via `sshagent` :

  • Publication des sources (`push_sources_repo.sh`).
  • Publication de la documentation (`push_doc_repo.sh`).
  • Publication des packages `vitam-product` (`push_product_repo.sh`).
  • Publication des packages `vitam-external` (`push_external_repo.sh`).
  • Publication de `deployment` (`push_deployment_repo.sh`).

Information

  • Affiche le commit `vitam_commit.txt`.
  • Met a jour le statut GitLab `publish` a `success` si MR.

Post-actions globales

  • Nettoyage du cache Maven `fr/gouv/vitam`.
  • Nettoyage du workspace Jenkins.

Prerequis d'execution

  • Agent Jenkins avec JDK 11, Maven et Docker (pour `build-all-docker.sh`).
  • Acces aux services GitLab, Nexus et au repository de publication.
  • Credentials Jenkins requis : `app-jenkins`, `service-nexus-url`,
 `repository-connection-string`, `service-repository-url`, `http-proxy-url`,
 `jenkins_sftp_to_repository`.

Notes pour MediaWiki

  • Mettre a jour la liste des images Docker si de nouveaux services sont ajoutes.
  • Les noms de credentials sont references a titre indicatif; ils doivent exister dans Jenkins.