diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a31d0b1f895bd5c542af508a1b68cc6bdd0a7463..4603ab2ad4cdae60f92885744ebfb78290791bb1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,16 +1,10 @@
-stages:
-  - build
-  - deploy
-
 .default_rules_dev:
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: never
     - if: $CI_COMMIT_BRANCH == "develop"
       variables:
-        DOCKER_SERVER_IP: "syslab-cube13-1.fbi.h-da.de"
-        TAG: "$CI_REGISTRY_IMAGE:develop"
-        
+        SERVER_IP: "syslab-cube13-1.fbi.h-da.de"        
 
 .default_rules_prod:
   rules:
@@ -18,63 +12,46 @@ stages:
       when: never
     - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
       variables:
-        DOCKER_SERVER_IP: "syslab-cube13-1.fbi.h-da.de"
-        TAG: "$CI_REGISTRY_IMAGE:latest"
-
+        SERVER_IP: "syslab-cube13-1.fbi.h-da.de"
 
-.build_template: &build_template
-  image: docker:latest
-  variables:
-    DOCKER_TLS_CERTDIR: "/certs"
-  services:
-    - name: docker:dind
-      command:
-        - "--experimental"
-  tags:
-    - buildx
-  retry: 2
-  before_script:
-    - mkdir -p ~/.docker/cli-plugins
-    - wget -q -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
-    - chmod a+x ~/.docker/cli-plugins/docker-buildx
-    - docker context create builder$CI_JOB_ID
-    - docker buildx create builder$CI_JOB_ID --use
-    - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
+variables:
+  GOPATH: "${CI_PROJECT_DIR}/.cache"
+  GOARCH: "amd64 arm64"
+  OSS: "linux freebsd"
 
+# build and test stages, unrelated to this article
 
-.deploy_tmpl: &deploy_tmpl
-  image: tiangolo/docker-with-compose
-  before_script:
-    - apk add --no-cache openssl
-    - unset DOCKER_HOST
-    - install -m 700 -d ~/.ssh
-    - eval $(ssh-agent -s)
-    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
-    - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
-    - docker context create --docker "host=ssh://${SSH_USER}@${DOCKER_SERVER_IP}" server01
-    - docker context use server01
-    - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
-    - echo "IMAGE=${TAG}" > .env
-
-
-build:image:
-  extends: .build_template
+build:
+  image: golang:1.17
   stage: build
   script:
-    - docker buildx build --platform linux/amd64,linux/arm64 -t $TAG -f Dockerfile --push .
+    - |
+      for os in ${OSS}; do 
+        for arch in ${GOARCH}; do
+          GOOS=$os GOARCH=$arch make cross 
+        done
+      done
+    - apt-get -qq -y install curl
+    - /bin/sh mkrel.sh gnmitarget
+  artifacts:
+    paths:
+      - gnmitarget_*
   rules:
     - !reference [.default_rules_dev, rules]
     - !reference [.default_rules_prod, rules]
+    - if: $CI_COMMIT_TAG
 
 
-deploy:target:
-  extends: .deploy_tmpl
-  stage: deploy
+release:
+  image: golang:1.17
+  stage: release
+  before_script:
+    - apt-get update -qq && apt-get -y -qq install jq xxd curl
   script:
-    - ls -al
-    - docker-compose -p target-${CI_COMMIT_BRANCH} --context server01 rm -f -s
-    - docker-compose -p target-${CI_COMMIT_BRANCH} --context server01 pull
-    - docker-compose -p target-${CI_COMMIT_BRANCH} --context server01 up -d
+    - /bin/sh mkrel.sh gnmitarget
+  artifacts:
+    expire_in: 365 days
+    paths:
+      - gnmitarget_*
   rules:
-    - !reference [.default_rules_dev, rules]
-    - !reference [.default_rules_prod, rules]
+    - if: $CI_COMMIT_TAG
diff --git a/ci/.deploy-container-ci.yml b/ci/.deploy-container-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ad50bddeb6be964f0bfb72e8664226657cabfdeb
--- /dev/null
+++ b/ci/.deploy-container-ci.yml
@@ -0,0 +1,56 @@
+.build_template: &build_template
+  image: docker:latest
+  variables:
+    DOCKER_TLS_CERTDIR: "/certs"
+  services:
+    - name: docker:dind
+      command:
+        - "--experimental"
+  tags:
+    - buildx
+  retry: 2
+  before_script:
+    - mkdir -p ~/.docker/cli-plugins
+    - wget -q -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
+    - chmod a+x ~/.docker/cli-plugins/docker-buildx
+    - docker context create builder$CI_JOB_ID
+    - docker buildx create builder$CI_JOB_ID --use
+    - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
+
+
+.deploy_tmpl: &deploy_tmpl
+  image: tiangolo/docker-with-compose
+  before_script:
+    - apk add --no-cache openssl
+    - unset DOCKER_HOST
+    - install -m 700 -d ~/.ssh
+    - eval $(ssh-agent -s)
+    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
+    - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
+    - docker context create --docker "host=ssh://${SSH_USER}@${DOCKER_SERVER_IP}" server01
+    - docker context use server01
+    - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
+    - echo "IMAGE=${TAG}" > .env
+
+
+build:image:
+  extends: .build_template
+  stage: build
+  script:
+    - docker buildx build --platform linux/amd64,linux/arm64 -t $TAG -f Dockerfile --push .
+  rules:
+    - !reference [.default_rules_dev, rules]
+    - !reference [.default_rules_prod, rules]
+
+
+deploy:target:
+  extends: .deploy_tmpl
+  stage: deploy
+  script:
+    - ls -al
+    - docker-compose -p target-${CI_COMMIT_BRANCH} --context server01 rm -f -s
+    - docker-compose -p target-${CI_COMMIT_BRANCH} --context server01 pull
+    - docker-compose -p target-${CI_COMMIT_BRANCH} --context server01 up -d
+  rules:
+    - !reference [.default_rules_dev, rules]
+    - !reference [.default_rules_prod, rules]
diff --git a/docker-compose.yaml b/docker-compose.yaml
deleted file mode 100644
index 53f99c36eec43dcd0a7eb9d51c90f780e11df7c0..0000000000000000000000000000000000000000
--- a/docker-compose.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-version: "3.8"
-
-services:
-  gnmi-target:
-    image: ${IMAGE}
-    volumes:
-      - "/proc:/host/proc"
-      - "/sys:/host/sys"
-      - "/etc:/host/etc"
-      - "config-data:/data"
-    privileged: true
-    network_mode: "host"
-
-volumes:
-  config-data: