diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..303f1afa026ef9acb5493374c4775baa7ee117e5
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,25 @@
+image: ros:melodic-ros-core
+
+cache:
+  paths:
+    - ccache/
+
+variables:
+  USE_ROSDEP: "false" # need manual order to pull my own git
+
+before_script:
+  - git clone https://gitlab.com/VictorLamoine/ros_gitlab_ci.git
+  - source ros_gitlab_ci/gitlab-ci.bash >/dev/null catkin
+  # before ros_gitlab_ci so rosdep finds it
+  - git clone https://github.com/Tuebel/gl3w_ros.git ${CI_PROJECT_DIR}/catkin_workspace/src/gl3w_ros
+  - echo "Using rosdep to install dependencies"
+  # use rosdep for dependencies
+  - apt-get install -qq python-rosdep python-pip
+  - rosdep init || true
+  - rosdep update
+  - rosdep install --from-paths src --ignore-src --rosdistro ${ROS_DISTRO} -y --as-root apt:false
+
+catkin_tools:
+  stage: build
+  script:
+    - catkin build --summarize --no-status --force-color
diff --git a/README.md b/README.md
index 0a4123f85f0812c492e4b0da84be88a04f47c9a7..ff04064977dcede8560eab11a3a7cc7f36bd71de 100644
--- a/README.md
+++ b/README.md
@@ -33,3 +33,6 @@ If you want to learn more about the OpenGL implementation, please visit Joey de
 Vries website https://learnopengl.com/ and his twitter page 
 https://twitter.com/JoeyDeVriez. Thanks to his awesome resources I managed to
 write this library in a bit more than a week.
+
+# CI
+A gitlab CI pipeline is implemented, which is based on [ros_gitlab_ci](https://gitlab.com/VictorLamoine/ros_gitlab_ci). The CI is based on the ros:melodic-ros-core docker image and will install the dependencies via rosdep. The gitlab-runner must use a docker executor.
\ No newline at end of file
diff --git a/test_package/CMakeLists.txt b/test_package/CMakeLists.txt
deleted file mode 100644
index e469d1e112abcbf7d0d737e4829daecf8a55decb..0000000000000000000000000000000000000000
--- a/test_package/CMakeLists.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-project(PackageTest)
-cmake_minimum_required(VERSION 2.8.12)
-
-include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
-conan_basic_setup()
-
-add_executable(example example.cpp)
-target_link_libraries(example ${CONAN_LIBS})
diff --git a/test_package/conanfile.py b/test_package/conanfile.py
deleted file mode 100644
index 17567084f523e80e51898c21f50f16327e8e6232..0000000000000000000000000000000000000000
--- a/test_package/conanfile.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from conans import ConanFile, CMake
-import os
-
-
-class Gl3wTestConan(ConanFile):
-    settings = "os", "compiler", "build_type", "arch"
-    generators = "cmake"
-    options = {"shared": [True, False], "fPIC": [True, False]}
-    default_options = "shared=False", "fPIC=True"
-
-    def build(self):
-        cmake = CMake(self)
-        cmake.configure()
-        cmake.build()
-
-    def imports(self):
-        self.copy("*.dll", dst="bin", src="bin")
-        self.copy("*.dylib*", dst="bin", src="lib")
-
-    def test(self):
-        os.chdir("bin")
-        self.run(".%sexample" % os.sep)
diff --git a/test_package/example.cpp b/test_package/example.cpp
deleted file mode 100644
index d01943fc044f6e8ece77811c8e002ff48ec9155d..0000000000000000000000000000000000000000
--- a/test_package/example.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <cstdlib>
-#include <scigl_render/gl_context.hpp>
-
-int main(int argc, char **argv)
-{
-  scigl_render::GLContext gl_context(true, false, 640, 480);
-  return EXIT_SUCCESS;
-}