diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ab3711c2eb16abb6ac77049d0665d44ac197fa19
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,57 @@
+stages:
+  - build
+  - package
+  - release
+  - deploy
+
+build-job:
+  image: python:slim
+  stage: build
+  rules:
+    - if: '$CI_COMMIT_BRANCH'
+  script:
+    - mkdir -p /usr/share/man/man1 # Because of https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199
+    - apt-get update && apt-get install -y plantuml graphviz
+    - pip install -r requirements.txt
+    - pelican content -s publishconf.py -e OUTPUT_PATH=public/
+  artifacts:
+    paths:
+      - public/
+    name: build
+    expire_in: 7 days
+package-job:
+  stage: package
+  tags: [redshift] # Used to prevent runner 1000i100 from picking up this stage
+  image: curlimages/curl:latest
+  script:
+    - PACKAGE_VERSION="$(date +%Y.%m).${CI_PIPELINE_IID}"
+    - PACKAGE_REGISTRY_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/releases/${PACKAGE_VERSION}"
+    - echo 'Creating generic package'
+    - cd public/
+    - tar cvf $HOME/website.tar *
+    - ls -al
+    - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file $HOME/website.tar ${PACKAGE_REGISTRY_URL}/website.tar'
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "master"'
+release-job:
+  stage: release
+  tags: [redshift] # Used to prevent runner 1000i100 from picking up this stage
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "master"'
+  script:
+    - PACKAGE_VERSION="$(date +%Y.%m).${CI_PIPELINE_IID}"
+    - PACKAGE_REGISTRY_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/releases/${PACKAGE_VERSION}"
+    - echo 'Creating release'
+    - release-cli create --name "$PACKAGE_VERSION" --tag-name $PACKAGE_VERSION --assets-link "{\"name\":\"wesbite.tar\",\"url\":\"$PACKAGE_REGISTRY_URL/website.tar\"}"
+
+pages:
+  stage: deploy
+  tags: [redshift]
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "master"'
+  script:
+    - echo "Publishing to Gitlab pages"
+  artifacts:
+    paths:
+      - public/
\ No newline at end of file
diff --git a/publishconf.py b/publishconf.py
index 15325651ddca026996ceeddceb612dda1650310a..aa1c2a6573aaf47cf401a1bb9999e3725e55309e 100644
--- a/publishconf.py
+++ b/publishconf.py
@@ -1,5 +1,8 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*- #
+import sys
+sys.path.append('.')
+
 from pelicanconf import *
 
 SITEURL = u'https://duniter.org/en'