« DEVOPS » : différence entre les versions
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.