diff --git a/.dockerignore b/.dockerignore
index 6b8710a711f3b689885aa5c26c6c06bde348e82b..cbfd165e6efa1164f19f71be3ba166cc837d4f75 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1 +1 @@
-.git
+.?*
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3cfc257852395ed5bbebb72279715ecf98c3f3af
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,39 @@
+variables:
+    PHP_VERSIONS: "7.1 7.3 7.4 8.0"
+
+.job:
+    image: ${DISTRO}:${CODENAME}
+    tags: [docker]
+    retry: 2
+    interruptible: true
+    variables:
+        DISTRO: ${CI_JOB_NAME}
+    script:
+        - apt-get update -yqq
+        - apt-get install -yq php8.0-cli
+        - mkdir public
+        - php ./map-exts.php ${PHP_VERSIONS} > public/${DISTRO}-${CODENAME}.yml
+    artifacts:
+        name: php_packages-${DISTRO}-${CODENAME}
+        paths:
+            - public/
+
+debian:
+    extends: .job
+    parallel:
+        matrix:
+            - CODENAME: [jessie, stretch, buster]
+    before_script:
+        - |
+            set -eux
+            . /etc/os-release
+            apt-get install -yq apt-transport-https ca-certificates curl
+            curl -sSL -o /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
+            echo "deb https://packages.sury.org/php/ $VERSION_CODENAME main" > /etc/apt/sources.list.d/php.list
+
+ubuntu:
+    extends: .job
+    variables:
+        CODENAME: xenial
+    before_script:
+        - add-apt-repository ppa:ondrej/php
diff --git a/map-exts.php b/map-exts.php
index 71da9a0355788d7c221985d86959bcc1bc9d0523..33e5f79544e91f7c9a09aa561b049b8b3697cd1e 100755
--- a/map-exts.php
+++ b/map-exts.php
@@ -5,7 +5,7 @@ error_reporting(-1);
 $argv = $_SERVER['argv'];
 array_shift($argv);
 
-system('. /etc/os-release && echo "$ID-$VERSION_CODENAME":');
+echo "php_packages:";
 
 foreach($argv as $version) {
     fputs(STDERR, "\nProcessing PHP ${version}\n");