diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 60766381285ca5cb6ea5418aa808779bf0330bdc..d6263008466874da7cad24ab0c19b358fb615e51 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,7 @@
 ---
+variables:
+  E3_MODULE_LIST: "autosave caputlog recsync iocstats essioc"
+
 stages:
   - check
   - build
@@ -70,3 +73,25 @@ test require:
     - make test
   needs:
     - build require
+
+test essioc:
+  stage: test
+  before_script:
+    - |
+      export BASE_PATH=$(ls -d $(pwd)/epics/base-*)
+      export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${BASE_PATH}/lib/linux-x86_64"
+      echo "EPICS_BASE:=${BASE_PATH}" > RELEASE.local
+      echo "E3_REQUIRE_VERSION:=${CI_COMMIT_SHORT_SHA}" >> RELEASE.local
+      for mod in ${E3_MODULE_LIST}; do
+        git clone "https://gitlab.esss.lu.se/e3/wrappers/e3-$mod.git"
+        pushd "e3-$mod"
+          make vars
+          make init patch build
+          make install
+        popd
+      done
+  script:
+    - source $(pwd)/epics/base-*/require/${CI_COMMIT_SHORT_SHA}/bin/activate
+    - run-iocsh -r essioc
+  needs:
+    - build require