diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a9dab676b670c6deca2ef7a86b35063777e1dcf8..6e83c8b4cd4464043f7c31d3fc00abffb6223ec5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -26,8 +26,21 @@ native-build:
   extends: .general
   stage: build
   image: registry.orfeo-toolbox.org/gbonnefille/otb-build-env/otb-ubuntu-shark:18.04
+  before_script:
+    # ccache configuration
+    - mkdir -p ccache
+    - export CCACHE_BASEDIR=${PWD}
+    - export CCACHE_DIR=${PWD}/ccache
+    - echo "max_size = 3G" > ccache/ccache.conf
+    - echo "run_second_cpp = true" >> ccache/ccache.conf
+    - echo "compiler_check = content" >> ccache/ccache.conf
+    - echo "sloppiness = time_macros" >> ccache/ccache.conf
   script:
     - ctest -VV -S CI/main_ci.cmake -DIMAGE_NAME:string=ubuntu-18.04-llvm-shark
+  cache:
+    key: "ubuntu-18.04-llvm-shark"
+    paths:
+      - ccache/
 
 build-wip:
   extends: .build-common
@@ -37,6 +50,8 @@ build-wip:
     - merge_requests
     - develop
     - /^release-[0-9]+\.[0-9]+$/
+  cache:
+    policy: pull
 
 build-mr:
   extends: .build-common
@@ -44,6 +59,8 @@ build-mr:
     OTB_CI_PROFILE: 'mr'
   only:
     - merge_requests
+  cache:
+    policy: pull
 
 build-develop:
   extends: .build-common
@@ -51,6 +68,8 @@ build-develop:
     OTB_CI_PROFILE: 'develop'
   only:
     - develop
+  cache:
+    policy: pull-push
 
 build-release:
   extends: .build-common
@@ -58,3 +77,5 @@ build-release:
     OTB_CI_PROFILE: 'release'
   only:
     - /^release-[0-9]+\.[0-9]+$/
+  cache:
+    policy: pull
diff --git a/CI/ubuntu-18.04-llvm-shark.cmake b/CI/ubuntu-18.04-llvm-shark.cmake
index 610da34da206b53f5b35444ec1721f120e94deb3..af3b0283f2b122c7796d6eca61f4892fac11117f 100644
--- a/CI/ubuntu-18.04-llvm-shark.cmake
+++ b/CI/ubuntu-18.04-llvm-shark.cmake
@@ -26,4 +26,6 @@ CMAKE_C_COMPILER:STRING=clang
 CMAKE_CXX_COMPILER:STRING=clang++
 CMAKE_EXE_LINKER_FLAGS:STRING=-fuse-ld=lld
 CMAKE_MODULE_LINKER_FLAGS:STRING=-fuse-ld=lld
-CMAKE_SHARED_LINKER_FLAGS:STRING=-fuse-ld=lld")
+CMAKE_SHARED_LINKER_FLAGS:STRING=-fuse-ld=lld
+CMAKE_C_COMPILER_LAUNCHER:STRING=ccache
+CMAKE_CXX_COMPILER_LAUNCHER:STRING=ccache")