DEVOPS

De Vitam
Aller à la navigation Aller à la recherche

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