diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6c6e1e619a7a758d99dc27d08777eba0a69c57ed
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,40 @@
+stages:
+  - checks
+  - deploy
+
+default:
+  tags: [docker]
+
+image: rocker/geospatial:latest
+
+variables:
+  CACHE_CI: "$CI_PROJECT_DIR/ci"
+  R_LIBS_USER: "$CACHE_CI/lib"
+
+cache:
+  paths:
+    - $CACHE_CI
+
+before_script:
+  - mkdir -p $R_LIBS_USER
+  - echo "R_LIBS='$R_LIBS_USER'" > .Renviron
+  - R -q -e 'if (!require(devtools)) install.packages(c("devtools"))'
+  - R -q -e 'devtools::install(dependencies = TRUE)'
+
+check:
+  variables:
+    NOT_CRAN: "true"
+  stage: checks
+  script:
+    - R -q -e 'devtools::check(vignettes = FALSE, error_on = "error")'
+
+pages:
+  stage: deploy
+  rules:
+    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
+  script:
+    - R -q -e 'pkgdown::build_site()'
+  artifacts:
+    paths:
+      - public
+