diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..11b05bac027fd7261eec324473b258ad814b09b9
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,53 @@
+variables:
+  GIT_SUBMODULE_STRATEGY: "recursive"
+  GIT_DEPTH: "3"
+  CCACHE_BASEDIR: "${CI_PROJECT_DIR}"
+  CCACHE_DIR: "${CI_PROJECT_DIR}/ccache"
+
+cache:
+  paths:
+    - ccache
+
+.robotpkg-py-dynamic-graph-v3: &robotpkg-py-dynamic-graph-v3
+  except:
+    - gh-pages
+  script:
+    - mkdir -p ccache
+    - cd /root/robotpkg/wip/py-dynamic-graph-v3
+    - git pull
+    - make checkout MASTER_REPOSITORY="dir ${CI_PROJECT_DIR}"
+    - make install
+    - cd work.$(hostname)/$(make show-var VARNAME=DISTNAME)
+    - make test
+
+robotpkg-py-dynamic-graph-v3-14.04-release:
+  <<: *robotpkg-py-dynamic-graph-v3
+  image: eur0c.laas.fr:5000/stack-of-tasks/dynamic-graph-python/py-dynamic-graph-v3:14.04
+
+robotpkg-py-dynamic-graph-v3-16.04-release:
+  <<: *robotpkg-py-dynamic-graph-v3
+  image: eur0c.laas.fr:5000/stack-of-tasks/dynamic-graph-python/py-dynamic-graph-v3:16.04
+
+robotpkg-py-dynamic-graph-v3-18.04-release:
+  <<: *robotpkg-py-dynamic-graph-v3
+  image: eur0c.laas.fr:5000/stack-of-tasks/dynamic-graph-python/py-dynamic-graph-v3:18.04
+
+doc-coverage:
+  <<: *robotpkg-py-dynamic-graph-v3
+  image: eur0c.laas.fr:5000/stack-of-tasks/dynamic-graph-python/py-dynamic-graph-v3:16.04
+  before_script:
+    - echo -e 'CXXFLAGS+= --coverage\nLDFLAGS+= --coverage\nPKG_DEFAULT_OPTIONS= debug' >> /opt/openrobots/etc/robotpkg.conf
+  after_script:
+    - cd /root/robotpkg/wip/py-dynamic-graph-v3
+    - cd work.$(hostname)/$(make show-var VARNAME=DISTNAME)
+    - make doc
+    - mv doc/doxygen-html ${CI_PROJECT_DIR}
+    - mkdir -p ${CI_PROJECT_DIR}/coverage/
+    - gcovr -r .
+    - gcovr -r . --html --html-details -o ${CI_PROJECT_DIR}/coverage/index.html
+  artifacts:
+    expire_in: 1 day
+    paths:
+      - doxygen-html/
+      - coverage/
+