diff --git a/HISTORY.rst b/HISTORY.rst
index ae499d4cb77f68a8b02c71dc769f8fc007727c35..53f5c093256590827f43aacddbc707f80b7d9844 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -2,6 +2,12 @@
 History
 =======
 
+0.20.3 (coming soon)
+--------------------
+
+* Adapted CI runner build script to upstream changes in GitLab 17.0.
+
+
 0.20.2 (2024-05-30)
 -------------------
 
diff --git a/tests/gitlab_CI_docker/build_enpt_testsuite_image.sh b/tests/gitlab_CI_docker/build_enpt_testsuite_image.sh
index c9f4f11030c924f9dc1d4451076c47536fe24743..6c272f19cb794abc1d023f2ccba278a053526429 100755
--- a/tests/gitlab_CI_docker/build_enpt_testsuite_image.sh
+++ b/tests/gitlab_CI_docker/build_enpt_testsuite_image.sh
@@ -1,9 +1,21 @@
 #!/usr/bin/env bash
 
+pkgname="enpt"
+repourl="https://git.gfz-potsdam.de/EnMAP/GFZ_Tools_EnMAP_BOX/EnPT"
+
 context_dir="./context"
-dockerfile="enpt_ci.docker"
-tag="enpt_ci:0.14.1"
-gitlab_runner="enpt_gitlab_CI_runner"
+dockerfile="${pkgname}_ci.docker"
+python_script='
+version = {}
+with open("../../'${pkgname}'/version.py") as version_file:
+    exec(version_file.read(), version)
+print(version["__version__"])
+'
+version=`python -c "$python_script"`
+tag="${pkgname}_ci:$version"
+gitlab_runner="${pkgname}_gitlab_CI_runner"
+runnername_remote="${pkgname}_ci_runner__v${version}__${HOSTNAME}"
+taglist="${pkgname}_ci_client"
 
 echo "#### Build runner docker image"
 docker rmi ${tag}
@@ -28,26 +40,32 @@ docker run \
     gitlab/gitlab-runner:latest
 
 # register the runner at the corresponding GitLab repository via a registration-token
-echo "#### Register container at gitlab, get token here https://git.gfz-potsdam.de/EnMAP/GFZ_Tools_EnMAP_BOX/EnPT/settings/ci_cd"
-read -p "Please enter gitlab token: " token
-echo ""
-read -p "Please enter gitlab runner name: " runner_name
-echo "New gitlab runner image will named  ${gitlab_runner}"
+echo "
+--------------------------------------------------------------------------
+To register the runner at GitLab, go to ${repourl}/-/runners,
+click on 'New project runner' and use the following settings:
+
+Tags:                       ${taglist}
+Run untagged jobs:          Yes
+Runner description:         ${runnername_remote}
+Paused:                     No
+Protected:                  No
+Lock to current projects:   Yes
+Maximum job timeout:        7200
+
+Then click 'Create runner'!
+--------------------------------------------------------------------------"
+read -p "Please enter the GitLab runner authentification token (should start with 'glrt-'): " token
 # NOTE: In case of locally stored images (like here), the docker pull policy 'never' must be used
 #       (see https://docs.gitlab.com/runner/executors/docker.html#how-pull-policies-work).
 docker exec -it ${gitlab_runner} /bin/bash -c "\
-export RUNNER_EXECUTOR=docker && \
 gitlab-ci-multi-runner register \
   --non-interactive \
   --executor 'docker' \
   --docker-image '${tag}' \
-  --url 'https://git.gfz-potsdam.de/ci' \
-  --registration-token '${token}' \
-  --description '${runner_name}' \
-  --tag-list enpt_ci_client \
-  --run-untagged='true' \
-  --locked='true' \
-  --access-level='not_protected' \
+  --url 'https://git.gfz-potsdam.de' \
+  --token '${token}' \
+  --description '${runnername_remote}' \
   --docker-pull-policy='never'
   "
 ls