diff --git a/cumulus/.gitlab-ci.yml b/cumulus/.gitlab-ci.yml
index 69ec1387c8ddf1d22d08d2d497421e3de5a559db..d539ada270041c7155279b9e0b21b710f8c7d3c4 100644
--- a/cumulus/.gitlab-ci.yml
+++ b/cumulus/.gitlab-ci.yml
@@ -171,19 +171,32 @@ build-linux-stable:
     - echo "___The VERSION is either a tag name or the curent branch if triggered not by a tag___"
     - echo ${CI_COMMIT_REF_NAME} | tee ./artifacts/VERSION
 
+build-test-parachain:
+  stage:                           build
+  <<:                              *docker-env
+  <<:                              *collect-artifacts
+  variables:
+    # Enable debug assertions since we are running optimized builds for testing
+    # but still want to have debug assertions.
+    RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
+  # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs
+  needs:
+    - job:                         check-rustdoc
+      artifacts:                   false
+  script:
+    - echo "___Building a binary, please refrain from using it in production since it goes with the debug assertions.___"
+    - time cargo +nightly build --release --locked --bin test-parachain
+    - echo "___Packing the artifacts___"
+    - mkdir -p ./artifacts
+    - mv ./target/release/test-parachain ./artifacts/.
+
 #### stage:                        publish
 
-build-push-image:
-  stage:                           publish
-  <<:                              *kubernetes-env
-  <<:                              *common-refs
+.build-push-image:                  &build-push-image
   image:                           quay.io/buildah/stable
-  needs:
-    - job:                         build-linux-stable
-      artifacts:                   true
   variables:
-    DOCKERFILE:                    "docker/polkadot-parachain-debug_unsigned_injected.Dockerfile"
-    IMAGE_NAME:                    docker.io/paritypr/polkadot-parachain-debug
+    DOCKERFILE:                    "" # docker/path-to.Dockerfile
+    IMAGE_NAME:                    "" # docker.io/paritypr/image_name
     VERSION:                       "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"
   script:
     - test "$PARITYPR_USER" -a "$PARITYPR_PASS" ||
@@ -202,6 +215,32 @@ build-push-image:
   after_script:
     - buildah logout --all
 
+build-push-image-polkadot-parachain-debug:
+  stage:                           publish
+  <<:                              *kubernetes-env
+  <<:                              *common-refs
+  <<:                              *build-push-image
+  needs:
+    - job:                         build-linux-stable
+      artifacts:                   true
+  variables:
+    DOCKERFILE:                    "docker/polkadot-parachain-debug_unsigned_injected.Dockerfile"
+    IMAGE_NAME:                    "docker.io/paritypr/polkadot-parachain-debug"
+    VERSION:                       "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"
+
+build-push-image-test-parachain:
+  stage:                           publish
+  <<:                              *kubernetes-env
+  <<:                              *common-refs
+  <<:                              *build-push-image
+  needs:
+    - job:                         build-test-parachain
+      artifacts:                   true
+  variables:
+    DOCKERFILE:                    "docker/test-parachain_injected.Dockerfile"
+    IMAGE_NAME:                    "docker.io/paritypr/test-parachain"
+    VERSION:                       "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"
+
 publish-s3:
   stage:                           publish
   <<:                              *kubernetes-env
diff --git a/cumulus/docker/test-parachain_injected.Dockerfile b/cumulus/docker/test-parachain_injected.Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..6056c504604e3be218b123791065624c32f4e87a
--- /dev/null
+++ b/cumulus/docker/test-parachain_injected.Dockerfile
@@ -0,0 +1,49 @@
+FROM docker.io/library/ubuntu:20.04
+
+# metadata
+ARG VCS_REF
+ARG BUILD_DATE
+ARG IMAGE_NAME
+
+LABEL io.parity.image.authors="devops-team@parity.io" \
+	io.parity.image.vendor="Parity Technologies" \
+	io.parity.image.title="${IMAGE_NAME}" \
+	io.parity.image.description="Test parachain for Zombienet" \
+	io.parity.image.source="https://github.com/paritytech/cumulus/blob/${VCS_REF}/docker/test-parachain_injected.Dockerfile" \
+	io.parity.image.revision="${VCS_REF}" \
+	io.parity.image.created="${BUILD_DATE}" \
+	io.parity.image.documentation="https://github.com/paritytech/cumulus/"
+
+# show backtraces
+ENV RUST_BACKTRACE 1
+
+# install tools and dependencies
+RUN apt-get update && \
+	DEBIAN_FRONTEND=noninteractive apt-get install -y \
+	libssl1.1 \
+	ca-certificates \
+	curl && \
+	# apt cleanup
+	apt-get autoremove -y && \
+	apt-get clean && \
+	find /var/lib/apt/lists/ -type f -not -name lock -delete; \
+	# add user and link ~/.local/share/test-parachain to /data
+	useradd -m -u 10000 -U -s /bin/sh -d /test-parachain test-parachain && \
+	mkdir -p /data /test-parachain/.local/share && \
+	chown -R test-parachain:test-parachain /data && \
+	ln -s /data /test-parachain/.local/share/test-parachain && \
+	mkdir -p /specs
+
+# add test-parachain binary to the docker image
+COPY ./artifacts/test-parachain /usr/local/bin
+COPY ./parachains/chain-specs/*.json /specs/
+
+USER test-parachain
+
+# check if executable works in this container
+RUN /usr/local/bin/test-parachain --version
+
+EXPOSE 30333 9933 9944
+VOLUME ["/test-parachain"]
+
+ENTRYPOINT ["/usr/local/bin/test-parachain"]