diff --git a/.gitlab-ci-template.yml b/.gitlab-ci-template.yml
index ca6901886b1105d579eb28e1d92031254e13ec37..3ed3db402622e54b979e6804f783f41ec1b221fd 100644
--- a/.gitlab-ci-template.yml
+++ b/.gitlab-ci-template.yml
@@ -2,29 +2,50 @@ stages:
   - build
   - deploy
 
-build-docker-image:
-  stage: build
-  script:
+.default_settings_docker: &default_settings_docker
+  before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
-    - docker push "$CI_REGISTRY_IMAGE"
   only:
     - master
     - chat
   except:
     - schedules
+  
+.default_settings_cron: &default_settings_cron
+  stage: deploy
+  tags:
+    - ansible
+  variables:
+    GIT_STRATEGY: none
+  only:
+    refs:
+      - chat
+      - schedules
+    variables:
+      - $ANSIBLE_JOB_NAME
+      - $ANSIBLE_EXTRA_ARGS
 
-update-docker-image:
+BuildDockerImage:
+  <<: *default_settings_docker
+  stage: build
+  script:
+    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
+    - docker push "$CI_REGISTRY_IMAGE"
+
+UpdateDockerImage:
+  <<: *default_settings_docker
   stage: deploy
   tags:
     - ansible-update
   variables:
     GIT_STRATEGY: none
   script:
-    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
     - docker pull "$CI_REGISTRY_IMAGE"
-  only:
-    - master
-    - chat
+
+RenewLetsEncrypt:
+  <<: *default_settings_cron
+  script:
+    - ascr role letsencrypt --tags=renew ${CHAT_INPUT} ${ANSIBLE_EXTRA_ARGS}
   except:
-    - schedules
+    variables:
+      - $ANSIBLE_JOB_NAME != "RenewLetsEncrypt"