diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0b0970c7bb5339c53b11d65449023c0a4dbe83d1..75db10f27167499e87841f6bd2201254eabf64e1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -56,6 +56,11 @@ before_script:
   # Not necessary, but just for surity
   - chmod +x ./gradlew
 
+stages:
+  - build
+  - test
+  - release
+
 # Basic android and gradle stuff
 # Check linting
 lintDebug:
@@ -77,7 +82,7 @@ assembleDebug:
     - ./gradlew assembleDebug
   artifacts:
     paths:
-      - app/build/outputs/
+      - app/build/outputs/apk/debug
 
 # Run all tests, if any fails, interrupt the pipeline(fail it)
 debugTests:
@@ -86,3 +91,29 @@ debugTests:
   stage: test
   script:
     - ./gradlew -Pci --console=plain :app:testDebug
+
+assembleRelease:
+  stage: build
+  script:
+    - echo $KEYSTORE_FILE | base64 -d > tmp.keystore
+    - ./gradlew assembleRelease
+      -Pandroid.injected.signing.store.file=$(PWD)/tmp.keystore
+      -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD
+      -Pandroid.injected.signing.key.alias=$KEY_ALIAS
+      -Pandroid.injected.signing.key.password=$KEY_PASSWORD
+  artifacts:
+    paths:
+      - app/build/outputs/apk/release
+
+newRelease:
+  needs: [assembleRelease]
+  stage: release
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+  rules:
+    - if: $CI_COMMIT_TAG                 # Run this job when a tag is created
+  script:
+    - echo "Creating a new release $CI_COMMIT_TAG"
+  release:                               # See https://docs.gitlab.com/ee/ci/yaml/#release for available properties
+    tag_name: '$CI_COMMIT_TAG'
+    description: '$CI_COMMIT_TAG'
+