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