« DEVOPS » : différence entre les versions

De Vitam
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Ligne 254 : Ligne 254 :
   `SERVICE_DOCKER_PUSH_URL`, `service-repository-url`, `vitam-prg-token`,
   `SERVICE_DOCKER_PUSH_URL`, `service-repository-url`, `vitam-prg-token`,
   `jenkins_sftp_to_repository`.
   `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()`.
== 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.

Version du 18 janvier 2026 à 22:56

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

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.