diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4603ab2ad4cdae60f92885744ebfb78290791bb1..894bb5c983e039b3b6ee767f395f92f97d06dfc1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,18 +1,19 @@
+stages:
+  - build
+  - release
+  - deploy
+
 .default_rules_dev:
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: never
-    - if: $CI_COMMIT_BRANCH == "develop"
-      variables:
-        SERVER_IP: "syslab-cube13-1.fbi.h-da.de"        
+    - if: $CI_COMMIT_BRANCH == "develop"   
 
 .default_rules_prod:
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: never
     - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
-      variables:
-        SERVER_IP: "syslab-cube13-1.fbi.h-da.de"
 
 variables:
   GOPATH: "${CI_PROJECT_DIR}/.cache"
@@ -22,7 +23,7 @@ variables:
 # build and test stages, unrelated to this article
 
 build:
-  image: golang:1.17
+  image: golang:1.16-buster
   stage: build
   script:
     - |
@@ -31,8 +32,6 @@ build:
           GOOS=$os GOARCH=$arch make cross 
         done
       done
-    - apt-get -qq -y install curl
-    - /bin/sh mkrel.sh gnmitarget
   artifacts:
     paths:
       - gnmitarget_*
@@ -40,10 +39,11 @@ build:
     - !reference [.default_rules_dev, rules]
     - !reference [.default_rules_prod, rules]
     - if: $CI_COMMIT_TAG
+    - if: $CI_COMMIT_BRANCH == "test"
 
 
 release:
-  image: golang:1.17
+  image: ubuntu:21.04
   stage: release
   before_script:
     - apt-get update -qq && apt-get -y -qq install jq xxd curl
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..07c1db28b43f19f6926b4dec13244e924e2f3b88
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,8 @@
+PROGNAME=gnmitarget
+OUTPUT=${PROGNAME}_${CI_COMMIT_TAG}_${GOOS}_${GOARCH}
+
+# other targets
+
+cross:
+	go build -o ${OUTPUT}
+	sha256sum ${OUTPUT} > ${OUTPUT}.sha256
diff --git a/mkrel.sh b/mkrel.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4a0bcf8e702f5d7b69b46adcece1c96d1df770cf
--- /dev/null
+++ b/mkrel.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+set -x
+
+progname=$1
+
+baseurl="https://gitlab.fbi.h-da.de/api/v4/projects/${CI_PROJECT_ID}"
+
+for os in ${OSS}; do
+  for arch in ${GOARCH}; do
+      fullname="${progname}_${CI_COMMIT_TAG}_${os}_${arch}"
+      linkurl="${baseurl}/jobs/${CI_JOB_ID}/artifacts/${fullname}"
+      linklist="${linklist}{\"name\": \"${fullname}\", \"url\": \"${linkurl}\"}"
+      linklist="${linklist}{\"name\": \"${fullname}.sha256\", \"url\": \"${linkurl}.sha256\"}"
+  done
+done
+
+links="[$(echo ${linklist}|sed 's/}{/}, {/g')]"
+
+descr="$(curl -H \"JOB-TOKEN:\ ${CI_JOB_TOKEN}\" ${baseurl}/repository/tags/${CI_COMMIT_TAG}|jq -r '.message')"
+
+DATA="
+{
+  \"name\": \"${progname} version ${CI_COMMIT_TAG}\",
+  \"description\": \"${descr}\",
+  \"tag_name\": \"${CI_COMMIT_TAG}\",
+  \"assets\": {
+    \"links\": "${links}"
+  }
+}
+"
+curl -v -H 'Content-Type: application/json' -X POST -H "JOB-TOKEN: ${CI_JOB_TOKEN}" "${baseurl}/releases" -d "${DATA}"