diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d862422d78267f9bbc4bdb51132765e98a9bffaf
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,47 @@
+stages:
+  - build
+  - push
+  - deploy
+
+variables:
+  IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
+
+# Docker build
+build_image:
+  stage: build
+  image: docker:24.0
+  services:
+    - docker:24.0-dind
+  script:
+    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+    - docker build -t $IMAGE_TAG .
+  only:
+    - main
+
+# Push to registry
+push_image:
+  stage: push
+  image: docker:24.0
+  services:
+    - docker:24.0-dind
+  script:
+    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+    - docker push $IMAGE_TAG
+  only:
+    - main
+  needs: [build_image]
+
+# Deploy to Kubernetes (optional, requires kubectl config)
+# deploy:
+#   stage: deploy
+#   image:
+#     name: bitnami/kubectl:latest
+#     entrypoint: [""]
+#   script:
+#     - echo "$KUBECONFIG" > kubeconfig.yaml
+#     - export KUBECONFIG=$CI_PROJECT_DIR/kubeconfig.yaml
+#     - kubectl config get-contexts
+#     - kubectl set image deployment/mon-deploiement mon-container=$IMAGE_TAG --namespace=mon-namespace
+#   only:
+#     - main
+#   needs: [push_image]