diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a563e580ae1db9efac23ea0cd22151778244f6ee..d50cd37f20c6bf79dd854abfeb31a37e3f13a52b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,3 +1,6 @@
+variables:
+  IMAGE_NAME: ${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${ENVIRONMENT}-${CI_COMMIT_SHORT_SHA}
+
 include:
   - project: 'ghsc/nshmp/nshmp-pipeline-templates'
     ref: 'main'
@@ -7,6 +10,7 @@ stages:
   - init
   - build
   - publish
+  - trigger
 
 # Do not run for merge requests
 workflow:
@@ -136,3 +140,37 @@ Publish:
   script:
     - ./gradlew publish -P version=${CI_COMMIT_TAG}
   stage: publish
+
+
+####
+# Stage: trigger
+####
+
+Trigger nshmp-webapps:
+  needs:
+    - Build Image
+  rules:
+    - if: !reference [.development-env, if]
+      variables: !reference [.development-env, variables]
+      when: manual
+    - !reference [.staging-env]
+    - !reference [.production-env]
+  script:
+    - apk add curl
+    - |
+      if [ "${ENVIRONMENT}" == 'production' ]; then
+        REF="production";
+      fi
+    - |
+      curl --request POST \
+        --form token=${NSHMP_WEBAPPS_CDK_TRIGGER_TOKEN} \
+        --form ref=${REF} \
+        --form "variables[description]=Triggered by nshmp-lib" \
+        --form "variables[ENVIRONMENT]=${ENVIRONMENT}" \
+        --form "variables[NSHMP_APPS_IMAGE]=${IMAGE_NAME}" \
+        --form "variables[TRIGGER_PASSCODE]=${NSHMP_WEBAPPS_CDK_TRIGGER_TOKEN}" \
+        "https://${PRIVATE_GITLAB}/api/v4/projects/${NSHMP_WEBAPPS_CDK_PROJECT_ID}/trigger/pipeline"
+  stage: trigger
+  variables:
+    REF: main
+    UPSTREAM_PATH: ghsc/nshmp/nshmp-lib