Une image Docker dédiée à la CI/CD pour Kotlin Multiplatform et Compose Multiplatform

La CI/CD sur un projet Kotlin Multiplatform (KMP) ou Compose Multiplatform (CMP) peut rapidement devenir un petit casse-tête.

Entre les différentes plateformes à compiler, les versions du JDK, Kotlin, Gradle, Android SDK et les outils nécessaires à chaque cible, maintenir un environnement de build reproductible n’est pas toujours une partie de plaisir.

Pour simplifier cette étape, j’ai créé une image Docker dédiée aux pipelines CI/CD pour les projets KMP et CMP.

🐳 L’image Docker

L’image est disponible ici :

docker.ahoris.com/docker-hosted/kmp-ci:1.0.0

Elle a été pensée pour fournir un environnement prêt à l’emploi pour les principales cibles que l’on retrouve dans un projet Kotlin Multiplatform / Compose Multiplatform.

Plateformes supportées

L’image embarque notamment les environnements nécessaires pour travailler avec :

  • 🤖 Android
  • 🖥️ Desktop
  • 🌐 JavaScript
  • 🕸️ WebAssembly (Wasm)

L’objectif est simple : éviter de reconstruire son environnement CI à chaque projet.

Pourquoi créer sa propre image ?

Dans un projet KMP/CMP, le pipeline peut rapidement accumuler plusieurs dépendances :

Git
 ↓
JDK
 ↓
Gradle
 ↓
Kotlin
 ↓
Android SDK
 ↓
Compose Multiplatform
 ↓
JS / Wasm / Desktop
 ↓
Tests
 ↓
Build

Et lorsqu’une CI tourne dans un environnement différent de celui utilisé localement, les classiques commencent à apparaître :

« Ça fonctionne sur ma machine. »

Une phrase historiquement très présente dans le monde du développement. 😄

L’utilisation d’une image Docker permet de standardiser cet environnement et de rendre les builds plus reproductibles.

Utilisation dans votre CI/CD

L’image peut directement être utilisée comme environnement de build dans votre pipeline.

Par exemple :

image: docker.ahoris.com/docker-hosted/kmp-ci:1.0.0

stages:
  - test
  - build

test:
  stage: test
  script:
    - ./gradlew allTests

build:
  stage: build
  script:
    - ./gradlew build

L’idée est de pouvoir démarrer le pipeline avec un environnement déjà préparé pour les différentes cibles KMP/CMP.

Bien entendu, la configuration exacte du pipeline dépendra de votre CI/CD — GitLab CI, Jenkins, GitHub Actions ou autre — ainsi que des plateformes que votre projet doit réellement construire.

Un environnement commun pour plusieurs cibles

L’intérêt principal de cette approche est de pouvoir conserver une base commune pour les différents jobs de votre pipeline.

Par exemple :

                    ┌─────────────────────┐
                    │      kmp-ci         │
                    │       Docker        │
                    └──────────┬──────────┘
                               │
              ┌────────────────┼────────────────┐
              │                │                │
              ▼                ▼                ▼
          Android           Desktop          Web
                                             /   \
                                            /     \
                                           ▼       ▼
                                          JS      Wasm

Cela permet notamment de réduire les différences entre les environnements de build et de faciliter la maintenance des pipelines.

Comment récupérer l’image ?

Il suffit de la récupérer depuis mon registry :

docker pull docker.ahoris.com/docker-hosted/kmp-ci:1.0.0

Puis de l’utiliser comme base pour votre pipeline ou pour tester localement votre environnement CI :

docker run --rm \
  -v "$PWD:/workspace" \
  -w /workspace \
  docker.ahoris.com/docker-hosted/kmp-ci:1.0.0 \
  ./gradlew build

Pour les projets KMP et CMP

Cette image est particulièrement intéressante si vous travaillez sur des projets utilisant plusieurs cibles Kotlin.

Par exemple :

Kotlin Multiplatform
        │
        ├── Android
        │
        ├── Desktop
        │
        ├── JavaScript
        │
        └── WebAssembly

L’objectif n’est pas de remplacer les configurations spécifiques à chaque projet, mais de fournir une base commune et reproductible sur laquelle construire vos pipelines.

Une image appelée à évoluer

Cette première version est disponible sous le tag :

kmp-ci:1.0.0

Je compte faire évoluer l’image au fil des besoins, notamment en fonction des évolutions de l’écosystème Kotlin Multiplatform / Compose Multiplatform et des retours d’utilisation.

Les versions futures pourront ainsi proposer des mises à jour des outils et dépendances nécessaires aux pipelines KMP/CMP.

À vous de jouer 🚀

Si vous développez un projet Kotlin Multiplatform ou Compose Multiplatform et que vous cherchez une image Docker pour votre CI/CD, vous pouvez utiliser :

docker.ahoris.com/docker-hosted/kmp-ci:1.0.0

Ou simplement :

docker pull docker.ahoris.com/docker-hosted/kmp-ci:1.0.0

N’hésitez pas à me faire vos retours, notamment si vous rencontrez un problème avec une cible particulière ou si vous avez besoin d’un outil supplémentaire dans l’image.

L’objectif est assez simple : rendre les pipelines KMP/CMP un peu moins pénibles à maintenir.

Et si une image Docker peut nous éviter quelques heures de « pourquoi Gradle fonctionne ici mais pas dans la CI ? », alors franchement… elle mérite d’exister. 😄

Tags:

No responses yet

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *