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