diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1c52eb8d48dfeec867d0b10ee9137150ea02f145..3b17b717b5a42b4c4104066aacf213883333050e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,11 +1,15 @@
 stages:
   - test
+  - build
+  - release
 
-fmt:
-  stage: test
+default:
   image: rust:latest
   tags:
     - docker, specific
+
+fmt:
+  stage: test
   before_script:
     - rustup component add rustfmt
   script:
@@ -13,9 +17,6 @@ fmt:
 
 clippy:
   stage: test
-  image: rust:latest
-  tags:
-    - docker, specific
   before_script:
     - rustup component add clippy
   script:
@@ -23,8 +24,26 @@ clippy:
 
 test:
   stage: test
-  image: rust:latest
-  tags:
-    - docker, specific
   script:
     - cargo test
+
+build:
+  stage: release
+  script:
+    - cargo build --release
+  artifacts:
+    paths:
+      - target/release/freva-ingest
+  rules:
+    - if: $CI_COMMIT_TAG
+
+release:
+  stage: release
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+  script:
+    - echo "creating release $CI_COMMIT_TAG"
+  release:
+    name: $CI_COMMIT_TAG
+    description: ./CHANGELOG.md
+    tag_name: $CI_COMMIT_TAG
+    ref: $CI_COMMIT_SHA
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391