diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index 8a59a261167a7b3b9a9263b49abaf7d81affee55..d2baee31e8d9b0fe332bfec575eaefff57f7a66e 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -73,6 +73,9 @@ find_program(YARN yarn)
 find_program(PIP pip)
 find_package(PythonInterp)
 
+find_program(MODULE_CMD modulecmd
+    PATHS /usr/local/modules/3.2.10-1/Modules/3.2.10/bin)
+
 ######################
 ### Find libraries ###
 ######################
diff --git a/scripts/cmake/packaging/PackagingLinux.cmake b/scripts/cmake/packaging/PackagingLinux.cmake
index fb99d45ebc9264d8bc9967dc0274ae0a63019c62..853f44ecf0852013d2f937060f250db7d0bfd39f 100644
--- a/scripts/cmake/packaging/PackagingLinux.cmake
+++ b/scripts/cmake/packaging/PackagingLinux.cmake
@@ -2,3 +2,19 @@ set(CPACK_GENERATOR TGZ)
 # Adds the binaries location to the LD_LIBRARY_PATH
 set(CMAKE_INSTALL_RPATH \$ORIGIN/)
 
+if(MODULE_CMD)
+    message(STATUS "Found module cmd -> writing module file.")
+    execute_process(COMMAND ${MODULE_CMD} bash list --terse
+        ERROR_VARIABLE MODULE_LIST_OUTPUT
+    )
+    string(REPLACE "\n" ";" MODULE_LIST_OUTPUT ${MODULE_LIST_OUTPUT})
+    foreach(line ${MODULE_LIST_OUTPUT})
+        if(NOT line STREQUAL "Currently Loaded Modulefiles:")
+            set(MODULE_LOAD_STRING "${MODULE_LOAD_STRING}module load ${line}\n")
+        endif()
+    endforeach()
+    configure_file(${CMAKE_SOURCE_DIR}/scripts/cmake/packaging/module.in
+        ${CMAKE_BINARY_DIR}/module
+    )
+    install(FILES ${CMAKE_BINARY_DIR}/module DESTINATION .)
+endif()
diff --git a/scripts/cmake/packaging/module.in b/scripts/cmake/packaging/module.in
new file mode 100644
index 0000000000000000000000000000000000000000..225eb1a4baaf4480ad3380ebb75a20c5d89bcf40
--- /dev/null
+++ b/scripts/cmake/packaging/module.in
@@ -0,0 +1,9 @@
+#%Module1.0
+
+module-whatis OpenGeoSys @OGS_VERSION@
+
+append-path MODULEPATH /global/apps/modulefiles/
+
+@MODULE_LOAD_STRING@
+
+prepend-path PATH @CMAKE_INSTALL_PREFIX@/bin
diff --git a/scripts/jenkins/gcc-dynamic.groovy b/scripts/jenkins/gcc-dynamic.groovy
index ff6329daa2142079a4dc91798b378e83cfb1f963..9a20d6db16debef0ec386dce7ea465c524e25ac0 100644
--- a/scripts/jenkins/gcc-dynamic.groovy
+++ b/scripts/jenkins/gcc-dynamic.groovy
@@ -11,6 +11,10 @@ def post = new ogs.post()
 def helper = new ogs.helper()
 
 stage('Configure (envinf1)') {
+    if (helper.isOriginMaster(this)) {
+        defaultCMakeOptions +=
+            ' -DCMAKE_INSTALL_PREFIX=/global/apps/ogs/head/default'
+    }
     configure.linux(cmakeOptions: defaultCMakeOptions, env: 'envinf1/cli.sh', script: this)
     configure.linux(cmakeOptions: defaultCMakeOptions + '-DOGS_USE_PETSC=ON',
         dir: 'build-petsc', env: 'envinf1/petsc.sh', script: this)
@@ -33,6 +37,10 @@ stage('Test (envinf1)') {
     }
 }
 
+stage('Deploy (envinf1)') {
+    build.linux(env: 'envinf1/cli.sh', script: this, target: 'install')
+}
+
 stage('Post (envinf1)') {
     post.publishTestReports 'build*/Testing/**/*.xml', 'build*/Tests/testrunner.xml',
         'ogs/scripts/jenkins/clang-log-parser.rules'