diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b03195fb721174830181b2a94bad6323f97beb20..e540e63441d6657cd942ae7d0522cd16af87447c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,17 +2,29 @@ variables:
   GIT_SUBMODULE_STRATEGY: recursive
 
 stages:
-  - docker
+  - build
 
-docker:
-  stage: docker
+build:
+  stage: build
   image: docker
+  
   tags:
     - docker
+  
+  rules:
+    # If triggered by a push to the default branch...
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+      variables:
+        VERSION: "latest"         # ...push to latest...
+      changes:
+        - Dockerfile              # ...only if Dockerfile changed
+
+    # If triggered by tag creation...
+    - if: $CI_COMMIT_TAG
+      variables:
+        VERSION: $CI_COMMIT_TAG   # ...push to tag name
+  
   script:
     - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
-    - docker build -t $CI_REGISTRY_IMAGE:latest .
-    - docker push $CI_REGISTRY_IMAGE:latest
-  rules:
-    - changes:
-        - Dockerfile
+    - docker build -t $CI_REGISTRY_IMAGE:$VERSION .
+    - docker push $CI_REGISTRY_IMAGE:$VERSION