diff --git a/conf/real-from-d2-ana/jobs.yml b/conf/real-from-d2-ana/jobs.yml
index 7117e705d2e4c34044363595aacd5c8d0b8db836..a9db9776b6895e76471101adf1dbf31397ee91b4 100644
--- a/conf/real-from-d2-ana/jobs.yml
+++ b/conf/real-from-d2-ana/jobs.yml
@@ -3,10 +3,18 @@ JOBS:
     FILE: templates/common/transfer_project.sh
     PLATFORM: LOCAL
 
+  BUILD_ENV:
+    FILE: templates/real-from-d2-ana/build_env.sh
+    # Right now we rely on spack for building icon and having a python interpreter, so we need this dependency:
+    DEPENDENCIES: TRASNFER_PROJECT
+    WALLCLOCK: 01:00
+    PROCESSORS: 1
+    NODES: 1
+
   BUILD_PYTHON_ENVIRONMENT:
     FILE: templates/common/build_python_environment.sh
     # Right now we rely on spack for building icon and having a python interpreter, so we need this dependency:
-    DEPENDENCIES: TRASNFER_PROJECT
+    DEPENDENCIES: BUILD_ENV
     WALLCLOCK: 01:00
     PROCESSORS: 16
     NODES: 1
diff --git a/templates/real-from-d2-ana/build_env.sh b/templates/real-from-d2-ana/build_env.sh
new file mode 100644
index 0000000000000000000000000000000000000000..97e731e16ae339a4e2f23605ad817b6299b10540
--- /dev/null
+++ b/templates/real-from-d2-ana/build_env.sh
@@ -0,0 +1,55 @@
+# Get some variables provided by autosubmit.
+# TODO: What do we do to ensure that these variables are defined in the proj file?
+WORKDIR=%HPCROOTDIR%
+ICON_VERSION=%ICON.VERSION%
+COMPILER=%SPACK.COMPILER%
+
+MODULES="%MODULES%"
+if [ ! -z "${MODULES}" ]; then module load ${MODULES}; fi
+
+# If the workdir directory does not exist create it
+if [ ! -d ${WORKDIR} ]; then
+  mkdir -p ${WORKDIR}
+fi
+
+# Go to the working directory
+cd ${WORKDIR} || exit
+
+. ${WORKDIR}/proj/platforms/common/spack_utils.sh
+load_spack "%spack.init%" "%spack.root%" "%spack.url%" "%spack.branch%" "%spack.externals%" "%spack.compiler%" "%spack.disable_local_config%" "%spack.user_cache_path%" "%spack.user_config_path%" "%spack.upstreams%"
+
+
+if [ ! -z "$SPACK_BUILD_ICON" ]; then
+  echo "cmd=$SPACK_BUILD_ICON"
+  # In case the autosubmit repository with the icon-nwp receipt doesn't exist, add it
+  if [[ $(spack repo list | grep "${WORKDIR}/proj/spack_repo") ]]; then
+    echo "icon spack repo was already added to repo list"
+  else
+    spack repo add ${WORKDIR}/proj/spack_repo
+  fi
+  spack load --first ${SPACK_LOAD_ICON}
+else
+  echo "\%icon.build_cmd\% is not defined. If you want to compile icon with spack, please provide a spack compile instruction string in your build.yml"
+fi
+
+# Build dwd-icon-tools
+SPACK_BUILD_DWDICONTOOLS="%DWDICONTOOLS.BUILD_CMD%"
+SPACK_LOAD_DWDICONTOOLS="%DWDICONTOOLS.LOAD_CMD%"
+if [ "${SPACK_LOAD_DWDICONTOOLS}" == "build_cmd" ]; then SPACK_LOAD_DWDICONTOOLS=${SPACK_BUILD_DWDICONTOOLS}; fi
+if [ ! -z "$SPACK_BUILD_DWDICONTOOLS" ]; then
+  spack load --first ${SPACK_LOAD_DWDICONTOOLS}
+fi
+
+# Need to get ECCODES DWD definitions:
+eccodes_version=$(spack spec $SPACK_BUILD_ICON | grep eccodes | grep -o "@.*%" | grep -o "[0-9\.]*")
+
+definitions_tar_file=eccodes_definitions.edzw-${eccodes_version}-1.tar.bz2
+if [ ! -f "${definitions_tar_file}" ]; then
+  defs_url=https://opendata.dwd.de/weather/lib/grib/${definitions_tar_file}
+  wget "${defs_url}"
+
+  # Decompress definitions file
+  tar -xf "${definitions_tar_file}"
+  # Create a file containing the environment variable that needs to be set in order to use DWD's definitions:
+  echo "export ECCODES_DEFINITION_PATH=${WORKDIR}/definitions.edzw-${eccodes_version}-1" >eccodes_defs.env
+fi