diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5e86d8d486115e0b2fdaf4c9d68c0bf2dd8842b1..94b254f297ce39f39ea1f280b30e9c2f7c8e8268 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,78 +2,87 @@ variables:
   BUILDENV_NATIVE_IMAGE: gnutls/nettle-build-images:buildenv-native
   BUILDENV_CLANG_IMAGE: gnutls/nettle-build-images:buildenv-clang
   BUILDENV_CROSS_IMAGE: gnutls/nettle-build-images:buildenv-cross
-  BUILD_IMAGES_PROJECT: gnutls/build-images
-  DEBIAN_X86_CROSS_BUILD: buildenv-debian-x86-cross
   GET_SOURCES_ATTEMPTS: "3"
 
-# See http://doc.gitlab.com/ce/ci/yaml/ for documentation.
-build/x86-64:
+# "Native" means x86-64; no jobs run on anything else.
+.native-build:
   image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE
   script:
-  - ./.bootstrap &&
-    ./configure --disable-static --disable-documentation && make -j4 &&
-    NETTLE_TEST_SEED=0 make check -j4 &&
-    NETTLE_TEST_SEED=0 make check-fat
-  tags:
-  - shared
-  - linux
-  except:
-  - tags
-build/mini-gmp:
-  image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE
-  script:
-  - ./.bootstrap &&
-    ./configure --disable-documentation --disable-fat --enable-mini-gmp && make -j4 &&
-    make check -j4
-  tags:
-  - shared
-  - linux
-  except:
-  - tags
-build/c89:
-  image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE
-  script:
-  - ./.bootstrap &&
-    ./configure CC='gcc -std=c89' --disable-static --disable-assembler --disable-documentation && make -j4 &&
-    NETTLE_TEST_SEED=0 make check -j4
-  tags:
-  - shared
-  - linux
-  except:
-  - tags
-build/ndebug:
-  image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE
-  script:
-  - ./.bootstrap &&
-    ./configure CPPFLAGS='-DNDEBUG' --disable-static --disable-assembler --disable-documentation && make -j4 &&
-    NETTLE_TEST_SEED=0 make check -j4
-  tags:
-  - shared
-  - linux
-  except:
-  - tags
-build/ubsan:
-  image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE
-  script:
-  - ./.bootstrap && 
-    CXXFLAGS="-fsanitize=undefined -fno-sanitize-recover -g -O2" CFLAGS="-fsanitize=undefined -fno-sanitize-recover -g -O2" ./configure --disable-assembler 
-    --disable-documentation && make -j4 && NETTLE_TEST_SEED=0 make check -j4
-  tags:
-  - shared
-  - linux
-  except:
-  - tags
-build/asan:
-  image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE
-  script:
-  - ./.bootstrap && 
-  - CXXFLAGS="-fsanitize=address -g -O2" CFLAGS="-fsanitize=address -g -O2" ./configure --disable-documentation --disable-assembler &&
-    make -j4 && NETTLE_TEST_SEED=0 make check -j4
+  - ./.bootstrap
+  - './configure $EXTRA_CONFIGURE_ARGS --disable-documentation'
+  - 'make -j$(nproc)'
+  - 'make -j$(nproc) check $EXTRA_CHECK_TARGET'
   tags:
   - shared
   - linux
   except:
   - tags
+  variables:
+    NETTLE_TEST_SEED: '0'
+  artifacts:
+    expire_in: 1 week
+    when: always
+    paths:
+    - "config.log"
+
+native/fat:
+  extends: .native-build
+  variables:
+    EXTRA_CHECK: check-fat
+
+native/no-fat:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: '--disable-fat'
+
+native/no-static:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: '--disable-static'
+
+native/no-shared:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: '--disable-static'
+
+native/32-bit:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: '--enable-mini-gmp'
+    CC: 'gcc -m32'
+    CXX: '/bin/false'
+
+native/mini-gmp:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: '--enable-mini-gmp'
+
+# FIXME: Need to defeat autoconf that automagically adds -std=gnu11.
+native/c89:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: '--disable-assembler'
+    CC: 'gcc -std=c89'
+
+native/ndebug:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: 'CPPFLAGS=-DNDEBUG --disable-assembler'
+
+native/ubsan:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: '--disable-assembler'
+    CFLAGS: '-fsanitize=undefined -fno-sanitize-recover -g -O2'
+    CXXFLAGS: '-fsanitize=undefined -fno-sanitize-recover -g -O2'
+
+native/asan:
+  extends: .native-build
+  variables:
+    EXTRA_CONFIGURE_ARGS: '--disable-assembler'
+    CFLAGS: '-fsanitize=address -g -O2'
+    CXXFLAGS: '-fsanitize=address -g -O2'
+
 build/static-analyzers:
   image: $CI_REGISTRY/$BUILDENV_CLANG_IMAGE
   script:
@@ -90,6 +99,7 @@ build/static-analyzers:
     when: on_failure
     paths:
       - scan-build-lib/*
+
 build/gnutls:
   image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE
   script:
@@ -116,23 +126,6 @@ build/gnutls:
       - gnutls-git/*.log
       - gnutls-git/tests/*/*.log
       - gnutls-git/tests/suite/*/*.log
-Debian.cross.x86:
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_X86_CROSS_BUILD
-  before_script:
-  - apt-get remove -y nettle-dev:i386
-  script:
-  - build=$(dpkg-architecture -qDEB_HOST_GNU_TYPE)
-  - host=i686-linux-gnu
-  - export CC_FOR_BUILD="gcc"
-  - export CC="$host-gcc"
-  - ./.bootstrap &&
-    CFLAGS="-O2 -g" ./configure --build=$build --host=$host --disable-documentation && make -j4 &&
-    NETTLE_TEST_SEED=0 make check -j4
-  tags:
-  - shared
-  - linux
-  except:
-  - tags
 
 remote/s390x:
   image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE