diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a8f9347d5954f822023c7e7b4cc558a28d736499..0839c35e4aec674ad601671aaf1115fe187c3b35 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -40,52 +40,77 @@ verify:
   script:
     - mvn verify $MAVEN_CLI_OPTS
 
+test-helm:
+  stage: test
+  before_script:
+    - apk add --no-cache helm git
+    - helm plugin install https://github.com/helm-unittest/helm-unittest.git
+  script:
+    - ./run_helm_test.sh
+
 .get-version:
   before_script:
     - export PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout $MAVEN_CLI_OPTS)
     - export PROJECT_ARTIFACTID=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout $MAVEN_CLI_OPTS)
-    - export SNAPSHOT_TAG="${CI_COMMIT_BRANCH}-${PROJECT_VERSION}-${CI_COMMIT_SHORT_SHA}"
-    - export MERGE_REQUEST_TAG="MR-${CI_MERGE_REQUEST_IID}-${PROJECT_VERSION}"
     - export NEXUS_IMAGE_PREFIX="docker.ozg-sh.de/${PROJECT_ARTIFACTID}"
+    - export MERGE_REQUEST_TAG="MR-${CI_MERGE_REQUEST_IID}-${PROJECT_VERSION}"
+    - export SNAPSHOT_TAG="${CI_COMMIT_BRANCH}-${PROJECT_VERSION}"
 
 .publish-helm-chart:
   variables:
-    - HELMCHART_NAME: Intelliform-Adapter
     - NEXUS_HELM_URL: https://nexus.ozg-sh.de/service/rest/v1/components?repository=
+  before_script:
+    - apk add --no-cache helm curl
   script:
-    - ./run_helm_test.sh
-    - cd 'src/main/helm'
-    - sh "helm package --version=${HELM_CHART_VERSION} ."
-    - helm package helm-chart
-    - curl -u ${NEXUS_USER}:${NEXUS_PASSWORD} ${NEXUS_HELM_URL}${HELM_REPO} -F file=@'''+${HELMCHART_NAME}+'''-'''+${HELM_CHART_VERSION}+'''.tgz
-  rules:
-    - when: never # The runner does not support helm yet
+    - helm package --version=${HELM_CHART_VERSION} src/main/helm
+    - curl -u ${NEXUS_USER}:${NEXUS_PASSWORD} ${NEXUS_HELM_URL}${NEXUS_HELM_REPO_NAME} -F file=@${PROJECT_ARTIFACTID}-${HELM_CHART_VERSION}.tgz
 
 # Merge request jobs
 push-merge-request-image-gitlab:
   stage: publish
   extends: .get-version
   script:
-    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:${MERGE_REQUEST_TAG}"
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:${MERGE_REQUEST_TAG},${CI_REGISTRY_IMAGE}:${MERGE_REQUEST_TAG}-${CI_COMMIT_SHORT_SHA}"
     - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   rules:
     - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+  when: manual
 
 push-merge-request-image-nexus:
   stage: publish
   extends: .get-version
   script:
-    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:${MERGE_REQUEST_TAG}"
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:${MERGE_REQUEST_TAG},${NEXUS_IMAGE_PREFIX}:${MERGE_REQUEST_TAG}-${CI_COMMIT_SHORT_SHA}"
     - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   rules:
     - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+  when: manual
+
+push-merge-request-helm-nexus:
+  stage: publish
+  variables:
+    NEXUS_HELM_REPO_NAME: ozg-base-apps-snapshot
+  before_script:
+    - !reference [.get-version, before_script]
+    - !reference [.publish-helm-chart, before_script]
+  script:
+    - export HELM_CHART_VERSION=${PROJECT_VERSION}-MR-${CI_MERGE_REQUEST_IID}
+    - !reference [.publish-helm-chart, script]
+    - export HELM_CHART_VERSION=${PROJECT_VERSION}-MR-${CI_MERGE_REQUEST_IID}-${CI_COMMIT_SHORT_SHA}
+    - !reference [.publish-helm-chart, script]
+  rules:
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+  when: manual
+  artifacts:
+    paths:
+      - "*.tgz"
 
 # Snapshot jobs
 push-snapshot-image-gitlab:
   stage: publish
   extends: .get-version
   script:
-    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:${SNAPSHOT_TAG},${CI_REGISTRY_IMAGE}:snapshot-latest"
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:${SNAPSHOT_TAG},${CI_REGISTRY_IMAGE}:${SNAPSHOT_TAG}-${CI_COMMIT_SHORT_SHA},${CI_REGISTRY_IMAGE}:snapshot-latest"
     - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   only:
     - main
@@ -94,22 +119,28 @@ push-snapshot-image-nexus:
   stage: publish
   extends: .get-version
   script:
-    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:${SNAPSHOT_TAG},${NEXUS_IMAGE_PREFIX}:snapshot-latest"
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:${SNAPSHOT_TAG},${NEXUS_IMAGE_PREFIX}:${SNAPSHOT_TAG}-${CI_COMMIT_SHORT_SHA},${NEXUS_IMAGE_PREFIX}:snapshot-latest"
     - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   only:
     - main
 
-push-snapshot-helm-chart-nexus:
+push-snapshot-helm-nexus:
   stage: publish
-  extends: .publish-helm-chart
   variables:
-    HELM_REPO: ozg-base-apps-snapshot
+    NEXUS_HELM_REPO_NAME: ozg-base-apps-snapshot
   before_script:
-    - export HELM_CHART_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout $MAVEN_CLI_OPTS)-${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA}"
-  # only:
-  #   - main
-  rules:
-    - when: never # The runner does not support helm yet
+    - !reference [.get-version, before_script]
+    - !reference [.publish-helm-chart, before_script]
+  script:
+    - export HELM_CHART_VERSION=${PROJECT_VERSION}-main
+    - !reference [ .publish-helm-chart, script ]
+    - export HELM_CHART_VERSION=${PROJECT_VERSION}-main-${CI_COMMIT_SHORT_SHA}
+    - !reference [.publish-helm-chart, script]
+  only:
+    - main
+  artifacts:
+    paths:
+      - "*.tgz"
 
 # Release jobs
 push-release-image-gitlab:
@@ -132,13 +163,18 @@ push-release-image-nexus:
   rules:
     - if: $CI_COMMIT_TAG
 
-push-release-helm-chart-nexus:
+push-release-helm-nexus:
   stage: publish
-  extends: .publish-helm-chart
   variables:
-    HELM_REPO: ozg-base-apps
+    NEXUS_HELM_REPO_NAME: ozg-base-apps
   before_script:
-    - export HELM_CHART_VERSION=$CI_COMMIT_TAG
+    - !reference [.get-version, before_script]
+    - !reference [.publish-helm-chart, before_script]
+  script:
+    - export HELM_CHART_VERSION=${PROJECT_VERSION}
+    - !reference [.publish-helm-chart, script]
   rules:
     - if: $CI_COMMIT_TAG
-    - when: never # The runner does not support helm yet
+  artifacts:
+    paths:
+      - "*.tgz"