diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5f89f1bf8b6a7c22486a224f7e3c13154dc8d735..41a5e5754edd5111fdb6fb0e1c6ffa2738eb6f98 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -109,7 +109,7 @@ gitops-snapshot:
     - cd gitops
     - yq -i ".fs_adapter.image.tag = \"${SNAPSHOT_TAG}-${CI_COMMIT_SHORT_SHA}\"" ${VALUES_FILE}
     - git add ${VALUES_FILE}
-    - git commit -m "code-sh GitLab CI rollout ${environment} ${PROJECT_ARTIFACTID} version ${SNAPSHOT_TAG}-${CI_COMMIT_SHORT_SHA}"
+    - git commit -m "code-sh GitLab CI rollout ${GITOPS_ENVIRONMENT} ${PROJECT_ARTIFACTID} version ${SNAPSHOT_TAG}-${CI_COMMIT_SHORT_SHA}"
     - git push https://${GITEA_USER}:${GITEA_TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git
   only:
     - main
@@ -136,3 +136,24 @@ push-release-image-nexus:
     - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   rules:
     - if: $CI_COMMIT_TAG
+
+gitops-release:
+  stage: gitops
+  variables:
+    GITOPS_ENVIRONMENT: test
+    VALUES_FILE_NAME: fs-adapter-values.yaml
+    VALUES_FILE: ${GITOPS_ENVIRONMENT}/application/values/${VALUES_FILE_NAME}
+  before_script:
+    - apk add --no-cache git yq  # yq-go in newer versions of alpine (from 3.20 on)
+    - git config --global user.name "${GITEA_USER}"
+    - git config --global user.email "${GITEA_USER_EMAIL}"
+    - !reference [.get-version, before_script]
+  script:
+    - git clone https://${GITEA_USER}:${GITEA_TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git
+    - cd gitops
+    - yq -i ".fs_adapter.image.tag = \"${CI_COMMIT_TAG}\"" ${VALUES_FILE}
+    - git add ${VALUES_FILE}
+    - git commit -m "code-sh GitLab CI rollout ${GITOPS_ENVIRONMENT} ${PROJECT_ARTIFACTID} version ${CI_COMMIT_TAG}"
+    - git push https://${GITEA_USER}:${GITEA_TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git
+  rules:
+    - if: $CI_COMMIT_TAG