« DEVOPS » : différence entre les versions

De Vitam
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(5 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 7 : Ligne 7 :
-Bouayad Abderahmane
-Bouayad Abderahmane


-Colin Mathieu
-Babacar


-Georges Julien
-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)<syntaxhighlight lang="bash">
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/
</syntaxhighlight>
= 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 :
{| 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`.
= 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 :
{| class="wikitable"
!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.

Dernière version du 19 janvier 2026 à 19:09

Présentation de l'équipe[modifier | modifier le wikicode]

-Achoubie Mohamed

-Amrani Saad

-Bouayad Abderahmane

-Babacar

-Georges Julien

Upload snapshot spécial odfvalidator sur nexus[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Ce document decrit les pipelines Jenkins du depot Vitam .

Sources[modifier | modifier le wikicode]

  • `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[modifier | modifier le wikicode]

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)[modifier | modifier le wikicode]

Agent, outils, environnement[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

Show configuration[modifier | modifier le wikicode]

  • Lit `sources/pom.xml` pour extraire la version.
  • Affiche des informations de contexte (workspace, branche, version).

Detecting changes for build[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Condition : `IMPORTANT_BRANCH_OR_TAG`.

  • Meme sequence que pour les MR (sans statuts GitLab).

Sonar analysis on master branches[modifier | modifier le wikicode]

Condition : `IMPORTANT_BRANCH_OR_TAG`.

  • Meme analyse Sonar que pour les MR.

Build packages[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Condition : `IMPORTANT_BRANCH_OR_TAG`.

  • Build de la documentation (`doc/pom.xml`) avec `jdeb` et `rpm`.
  • Publication des rapports JUnit.

Prepare packages building[modifier | modifier le wikicode]

Condition : `IMPORTANT_BRANCH_OR_TAG`.

  • Nettoie les repertoires `target` des packages `deb` et `rpm`.

Build vitam-product & vitam-external packages[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Condition : `IMPORTANT_BRANCH_OR_TAG`.

  • Met a jour les symlinks via `push_symlink_repo.sh`.

Information[modifier | modifier le wikicode]

  • Affiche le commit courant.
  • Execute `.ci/git_commands.sh`.

Post-actions globales[modifier | modifier le wikicode]

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

Pipeline conteneurs (Jenkinsfile.containers)[modifier | modifier le wikicode]

Agent, environnement[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

Build and create vitam docker images[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

  • Installe Trivy (`v0.47.0`) et un template HTML.

Scan containers[modifier | modifier le wikicode]

  • Scanne une liste d'images Vitam avec Trivy.
  • Genere des rapports HTML par image et les publie via Jenkins HTML Publisher.

Post-actions globales[modifier | modifier le wikicode]

  • `docker system prune -a -f`.
  • Nettoyage du workspace Jenkins.

Prerequis d'execution[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

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

Vue d'ensemble[modifier | modifier le wikicode]

  • 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)[modifier | modifier le wikicode]

Objectif[modifier | modifier le wikicode]

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

Variables d'environnement[modifier | modifier le wikicode]

  • `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[modifier | modifier le wikicode]

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

Parametrage execution[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

Upgrade build context[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Condition: `DO_DEPLOY=true`.

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

Deploy PASTIS standalone[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Condition: `DO_DEPLOY=true`.

  • Maven `deploy` dans `cots/`.

Get publishing scripts[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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

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

Update symlink[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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

Pipeline containers et scan (Jenkinsfile.containers)[modifier | modifier le wikicode]

Objectif[modifier | modifier le wikicode]

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

Variables d'environnement[modifier | modifier le wikicode]

  • `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[modifier | modifier le wikicode]

Build and create docker images[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

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

Scan containers[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

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


Pipelines CI/CD VITAM-PUBLISH[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

  • `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)[modifier | modifier le wikicode]

Description[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

Choose version to publish[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

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

Checkout vitam repo[modifier | modifier le wikicode]

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

Build VITAM sources, product & external[modifier | modifier le wikicode]

Execution parallele :

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

Build VITAM doc[modifier | modifier le wikicode]

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

Publish to repository[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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

Post-actions globales[modifier | modifier le wikicode]

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

Prerequis d'execution[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

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