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 pour une publication dans MediaWiki.
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`.