diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e7ff67fa4..83123a82e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -168,6 +168,40 @@ test:flake8:
   tags:
     - docker
 
+test:cppcheck 1/2:
+  stage: test
+  needs: ["build:fedora:x86_64"]
+  script:
+    - cppcheck --max-configs=32 -j 32 --error-exitcode=1 -q --std=c++11 -I include/villas src/ lib/ tests/unit/ | tee cppcheck-error.log
+  image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
+  dependencies:
+    - build:fedora:x86_64
+  tags:
+    - docker
+  artifacts:
+    when: on_failure
+    paths:
+      - cppcheck-error.log
+    expose_as: 'cppcheck-error'
+
+test:cppcheck 2/2:
+  stage: test
+  needs: ["build:fedora:x86_64"]
+  allow_failure: true
+  script:
+    - cppcheck --max-configs=32 -j 32 --error-exitcode=1 -q --enable=warning,performance,portability,information,missingInclude --std=c++11 -I Include/ -I models/Include/ Source/ Examples/ models/Source/ | tee cppcheck-warn.log
+  image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
+  dependencies:
+    - build:fedora:x86_64
+  tags:
+    - docker
+  artifacts:
+    when: on_failure
+    paths:
+      - cppcheck-warn.log
+    expose_as: 'cppcheck-warn'
+
+
 test:unit:
   stage: test
   dependencies:
diff --git a/packaging/docker/Dockerfile.dev b/packaging/docker/Dockerfile.dev
index 863f9d3b9..80c2e6455 100644
--- a/packaging/docker/Dockerfile.dev
+++ b/packaging/docker/Dockerfile.dev
@@ -86,6 +86,9 @@ RUN dnf -y install \
 	librdmacm-devel \
 	libusb-devel
 
+RUN dnf -y install \
+    cppcheck
+
 # Add local and 64-bit locations to linker paths
 ENV echo /usr/local/lib >> /etc/ld.so.conf && \
     echo /usr/local/lib64 >> /etc/ld.so.conf