diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7c0aade41bc47869e70fc205370f1aa566918443..357211c19c1bb109c9e7b535b19ecae268d5e7cc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,9 @@
 ---
+include:
+  - local: 'images/**/.gitlab-ci.yaml'
 stages:
   - release
+  - build
 
 
 # Automated month-based releases
diff --git a/images/dovecot/.gitlab-ci.yaml b/images/dovecot/.gitlab-ci.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4f53751bbac05a3136b866dd470a98ee9f5945da
--- /dev/null
+++ b/images/dovecot/.gitlab-ci.yaml
@@ -0,0 +1,41 @@
+dovecot-container-build:
+  stage: build
+  image: quay.io/sheogorath/build-ah-engine:2.0.0
+  before_script:
+    - podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+  script:
+    - |
+      cd images/dovecot
+      source .release
+      podman build --pull \
+      --label "org.opencontainers.image.source=$CI_PROJECT_URL/-/tree/$CI_COMMIT_SHA/images/dovecot" \
+      --label "org.opencontainers.image.revision=$CI_COMMIT_SHA" \
+      --label "org.opencontainers.image.created=$(date --rfc-3339 ns)" \
+      --label "org.opencontainers.image.title=dovecot" \
+      -t "quay.io/shivering-isles/dovecot:${release}" \
+      --format docker \
+      .
+    - podman push "quay.io/shivering-isles/dovecot:${release}"
+  rules:
+    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
+
+dovecot-container-build-dev:
+  stage: build
+  image: quay.io/sheogorath/build-ah-engine:2.0.0
+  before_script:
+    - podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+  script:
+    - |
+      cd images/dovecot
+      podman build --pull \
+      --label "org.opencontainers.image.source=$CI_PROJECT_URL/-/tree/$CI_COMMIT_SHA/images/dovecot" \
+      --label "org.opencontainers.image.revision=$CI_COMMIT_SHA" \
+      --label "org.opencontainers.image.created=$(date --rfc-3339 ns)" \
+      --label "org.opencontainers.image.title=$CI_PROJECT_TITLE" \
+      --label "quay.expires-after=12w" \
+      -t "quay.io/shivering-isles/dovecot:${CI_COMMIT_SHORT_SHA}" \
+      --format docker \
+      .
+    - podman push "quay.io/shivering-isles/dovecot:${CI_COMMIT_SHORT_SHA}"
+  rules:
+    - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
diff --git a/images/postfix/.gitlab-ci.yaml b/images/postfix/.gitlab-ci.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e5b1b16bf760c06b29489922d4a06ffc698a2e15
--- /dev/null
+++ b/images/postfix/.gitlab-ci.yaml
@@ -0,0 +1,41 @@
+postfix-container-build:
+  stage: build
+  image: quay.io/sheogorath/build-ah-engine:2.0.0
+  before_script:
+    - podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+  script:
+    - |
+      cd images/postfix
+      source .release
+      podman build --pull \
+      --label "org.opencontainers.image.source=$CI_PROJECT_URL/-/tree/$CI_COMMIT_SHA/images/postfix" \
+      --label "org.opencontainers.image.revision=$CI_COMMIT_SHA" \
+      --label "org.opencontainers.image.created=$(date --rfc-3339 ns)" \
+      --label "org.opencontainers.image.title=$CI_PROJECT_TITLE" \
+      -t "quay.io/shivering-isles/postfix:${release}" \
+      --format docker \
+      .
+    - podman push "quay.io/shivering-isles/postfix:${release}"
+  rules:
+    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
+
+postfix-container-build-dev:
+  stage: build
+  image: quay.io/sheogorath/build-ah-engine:2.0.0
+  before_script:
+    - podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+  script:
+    - |
+      cd images/dovecot
+      podman build --pull \
+      --label "org.opencontainers.image.source=$CI_PROJECT_URL/-/tree/$CI_COMMIT_SHA/images/postfix" \
+      --label "org.opencontainers.image.revision=$CI_COMMIT_SHA" \
+      --label "org.opencontainers.image.created=$(date --rfc-3339 ns)" \
+      --label "org.opencontainers.image.title=$CI_PROJECT_TITLE" \
+      --label "quay.expires-after=12w" \
+      -t "quay.io/shivering-isles/postfix:${CI_COMMIT_SHORT_SHA}" \
+      --format docker \
+      .
+    - podman push "quay.io/shivering-isles/postfix:${CI_COMMIT_SHORT_SHA}"
+  rules:
+    - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'