diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e9ab66c17e56855f2f6e5a5018cc06ddce98fb79..55b32250c061f57e748975a4b727dc8b20414514 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,44 +3,42 @@ image: ralfjung/opam-ci:latest
 variables:
   CPU_CORES: "9"
 
-stdpp-coq8.5:
+.template: &template
   tags:
   - fp-timing
   script:
   # prepare
-  - . build/opam-ci.sh coq 8.5.3
-  # build
-  - 'time make -j$CPU_CORES'
-  cache:
-    key: "coq8.5"
-    paths:
-    - opamroot/
-  only:
-  - master
-  - ci
-  - timing
-
-stdpp-coq8.6:
-  tags:
-  - fp-timing
-  script:
-  # prepare
-  - . build/opam-ci.sh coq 8.6
+  - . build/opam-ci.sh coq "$COQ_VERSION"
   - env | egrep '^(CI_BUILD_REF|CI_RUNNER)' > build-env.txt
   # build
-  - 'time make -j$CPU_CORES TIMED=y 2>&1 | tee build-log.txt'
+  - 'time make -k -j$CPU_CORES TIMED=y 2>&1 | tee build-log.txt'
   - 'if fgrep Axiom build-log.txt >/dev/null; then exit 1; fi'
   - 'cat build-log.txt | egrep "[a-zA-Z0-9_/-]+ \(user: [0-9]" | tee build-time.txt'
-  - 'if (( RANDOM % 10 == 0 )); then make validate; fi'
+  - 'if test -n "$VALIDATE" && (( RANDOM % 10 == 0 )); then make validate; fi'
   cache:
-    key: "coq8.6"
+    key: "coq$COQ_VERSION"
     paths:
     - opamroot/
   only:
   - master
-  - ci
-  - timing
+  - /^ci/
+
+stdpp-coq8.6.1:
+  <<: *template
+  variables:
+    COQ_VERSION: "8.6.1"
+    VALIDATE: 1
   artifacts:
     paths:
     - build-time.txt
     - build-env.txt
+
+stdpp-coq8.6:
+  <<: *template
+  variables:
+    COQ_VERSION: "8.6"
+
+stdpp-coq8.5.3:
+  <<: *template
+  variables:
+    COQ_VERSION: "8.5.3"