diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7eadca004198584a27222b1af0363040b12503e5..503a0eeec2df6472d823fd93d2d717e2b4237b79 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,6 +3,7 @@ include:
   - 'https://gitlab.iri.upc.edu/mobile_robotics/wolf_projects/wolf_lib/wolf/-/raw/$WOLF_CORE_BRANCH/.ci_templates/.yaml_schema_cpp.yml'
   - 'https://gitlab.iri.upc.edu/mobile_robotics/wolf_projects/wolf_lib/wolf/-/raw/$WOLF_CORE_BRANCH/.ci_templates/.clang_format.yml'
   - 'https://gitlab.iri.upc.edu/mobile_robotics/wolf_projects/wolf_lib/wolf/-/raw/$WOLF_CORE_BRANCH/.ci_templates/.install_core.yml'
+  - 'https://gitlab.iri.upc.edu/mobile_robotics/wolf_projects/wolf_lib/wolf/-/raw/$WOLF_CORE_BRANCH/.ci_templates/.preliminaries.yml'
 
 workflow:
   rules:
@@ -34,110 +35,9 @@ stages:
   ## PRINT VARIABLES
   - *print_variables_definition
   
-  ## Install ssh-agent if not already installed, it is required by Docker.
-  ## (change apt-get to yum if you use an RPM-based image)
-  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
-
-  ## Run ssh-agent (inside the build environment)
-  - eval $(ssh-agent -s)
-
-  ## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
-  ## We're using tr to fix line endings which makes ed25519 keys work
-  ## without extra base64 encoding.
-  ## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556
-  - mkdir -p ~/.ssh
-  - chmod 700 ~/.ssh  
-  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
-  # - echo "$SSH_KNOWN_HOSTS" > $HOME/.ssh/known_hosts
-  - ssh-keyscan -H -p 2202 gitlab.iri.upc.edu >> $HOME/.ssh/known_hosts
-
-  # update apt
-  - apt-get update
-
-  # create 'ci_deps' folder (if not exists)
-  - mkdir -pv ci_deps
-
-# .license_header_template: &license_header_definition
-#   - cd $CI_PROJECT_DIR
-
-#   # configure git
-#   - export CI_NEW_BRANCH=ci_processing$RANDOM
-#   - echo creating new temporary branch... $CI_NEW_BRANCH
-#   - git config --global user.email "${CI_EMAIL}"
-#   - git config --global user.name "${CI_USERNAME}"
-#   - git checkout -b $CI_NEW_BRANCH # temporary branch
-
-#   # download license script
-#   - if [ -f /ci_deps/license_manager.sh ]; then
-#   -   echo "File license_manager.sh already exists."
-#   - else
-#   -   echo "Downloading file license_manager.sh..."
-#   -   wget -P /ci_deps  https://gitlab.iri.upc.edu/mobile_robotics/wolf_projects/wolf_lib/wolf/-/raw/$WOLF_CORE_BRANCH/wolf_scripts/license_manager.sh
-#   - fi
-
-#   # license headers
-#   - export CURRENT_YEAR=$( date +'%Y' )
-#   - echo "current year:" ${CURRENT_YEAR}
-#   - if [ -f license_header_${CURRENT_YEAR}.txt ]; then
-#       # add license headers to new files
-#   -   echo "File license_header_${CURRENT_YEAR}.txt already exists. License headers are assumed to be updated. Adding headers to new files..."
-#   -   source /ci_deps/license_manager.sh --add --path=. --config-path=. --exclude=ci_deps
-#   - else
-#       # remove license headers of all files
-#   -   source /ci_deps/license_manager.sh --remove --path=. --config-path=. --exclude=ci_deps
-#       # update license header
-#   -   export PREV_YEAR=$(( CURRENT_YEAR-1 ))
-#   -   echo "Creating new file license_header_${CURRENT_YEAR}.txt..."
-#   -   git mv license_header_${PREV_YEAR}.txt license_header_${CURRENT_YEAR}.txt
-#   -   sed -i "s/${PREV_YEAR}/${PREV_YEAR},${CURRENT_YEAR}/g" license_header_${CURRENT_YEAR}.txt
-#       # add new license headers to all files
-#   -   source /ci_deps/license_manager.sh --add --path=. --config-path=. --exclude=ci_deps
-#   - fi
-
-#   # push changes (if any)
-#   - if git commit -a -m "[skip ci] license headers added or modified" ; then
-#   -   git remote set-url --push origin "ssh://git@gitlab.iri.upc.edu:2202/${CI_PROJECT_PATH}.git"
-#   -   git push origin $CI_NEW_BRANCH:${CI_COMMIT_REF_NAME}
-#   - else
-#   -   echo "No changes, nothing to commit!"
-#   - fi
-
-# .install_yamlschemacpp_template: &install_yamlschemacpp_definition
-#   - cd ${CI_PROJECT_DIR}/ci_deps
-#   - if [ -d yaml-schema-cpp ]; then
-#   -   echo "directory yaml-schema-cpp exists"
-#   -   cd yaml-schema-cpp
-#   -   git checkout main
-#   -   git pull
-#   - else
-#   -   git clone -b main ssh://git@gitlab.iri.upc.edu:2202/labrobotica/algorithms/yaml-schema-cpp.git
-#   -   cd yaml-schema-cpp
-#   - fi
-#   - mkdir -pv build
-#   - cd build
-#   - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_TESTS=OFF ..
-#   - make -j$(nproc)
-#   - make install
-#   - ldconfig
-
-# .install_wolf_template: &install_wolf_definition
-#   - cd ${CI_PROJECT_DIR}/ci_deps
-#   - if [ -d wolf ]; then
-#   -   echo "directory wolf exists"
-#   -   cd wolf
-#   -   git fetch --all
-#   -   git checkout $WOLF_CORE_BRANCH
-#   -   git pull
-#   - else
-#   -   git clone -b $WOLF_CORE_BRANCH ssh://git@gitlab.iri.upc.edu:2202/mobile_robotics/wolf_projects/wolf_lib/wolf.git
-#   -   cd wolf
-#   - fi
-#   - mkdir -pv build
-#   - cd build
-#   - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_DEMOS=OFF -DBUILD_TESTS=OFF ..
-#   - make -j$(nproc)
-#   - make install
-
+  ## preliminaries script (ssh, apt update and mkdir ci_deps)
+  - !reference [.preliminaries_script]
+  
 .install_gnssutils_template: &install_gnssutils_definition
   - cd ${CI_PROJECT_DIR}/ci_deps
   - if [ -d gnss_utils ]; then