diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1dc9f1348ff252c11ab41d51a6812e5795323208..e5c2a358cd369b570a63ee3eb8c6bf4015c1e5da 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,6 +4,7 @@ include:
 stages:
   - build
   - build-test-images
+  - lint
   - application-test
   - integration-test
 
@@ -51,6 +52,18 @@ integration_test:
       - ./test/integration_tests/test/**/*
       - .gitlab-ci.yml
 
+pylint:
+  stage: build-test-images
+  variables:
+    KANIKO_CONTEXT: "test/lint/pylint"
+    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
+  extends: .kaniko_build
+  only:
+    changes:
+      - test/lint/pylint/Dockerfile
+      - test/lint/pylint/requirements.txt
+      - .gitlab-ci.yml
+
 
 behave-integration:
   stage: integration-test
@@ -140,3 +153,15 @@ behave-integration:
       - test/integration_tests/test/behave/screenshots/
     expire_in: 1 month
     when: on_failure
+
+pylint-lint:
+  stage: lint
+  variables:
+    GIT_AUTHOR_NAME: "RUNNER"
+    GIT_AUTHOR_EMAIL: "runner@greenhost.net"
+    PYLINT_PLUGINS: "pylint_flask pylint_flask_sqlalchemy"
+  image: ${CI_REGISTRY_IMAGE}/pylint:${CI_COMMIT_REF_NAME}
+  script:
+    - echo "Reverting back to master to squash commits"
+    - git reset --soft master
+    - git lint
diff --git a/.gitlint.yaml b/.gitlint.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c43372fddc5b8ca3fda7fce5fc0956d7b2e3ddf1
--- /dev/null
+++ b/.gitlint.yaml
@@ -0,0 +1,19 @@
+# Python
+pylint:
+  extensions:
+    - .py
+  command: pylint
+  arguments:
+    - --output-format=text
+    - --load-plugins=$PYLINT_PLUGINS
+    - >-
+      --msg-template={{abspath}}:{{line}}:{{column}}:
+      [{{category}}:{{symbol}}] {{obj}}: {{msg}}
+    - --reports=n
+  filter: >-
+    ^{filename}:(?P<line>{lines}):((?P<column>\d+):)?
+    \[(?P<severity>.+):(?P<message_id>\S+)\]\s+(:
+    )?(?P<message>.+)$
+  installation: "Run pip install pylint."
+
+
diff --git a/test/lint/pylint/Dockerfile b/test/lint/pylint/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..a430baf8925dd59c5e7dd860708480a75599b89c
--- /dev/null
+++ b/test/lint/pylint/Dockerfile
@@ -0,0 +1,6 @@
+FROM python:3.7-alpine
+
+RUN apk add build-base git bc
+
+COPY requirements.txt ./
+RUN pip3 install --no-cache-dir -r requirements.txt
diff --git a/test/lint/pylint/requirements.txt b/test/lint/pylint/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aa428fe9f8b5fb120b10e362d4a5f82cd4cb39a2
--- /dev/null
+++ b/test/lint/pylint/requirements.txt
@@ -0,0 +1,4 @@
+pylint
+pylint-flask-sqlalchemy
+pylint-flask
+git-lint