diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 65ff9709b9cae5bad877adabdb14979c72bd707a..9604fb49d8049451bf2cb2d6d18a96f82226c9bc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,12 +1,13 @@
 stages:
+  - pre-release
   - release
 
 # Инициация процесса релиза. Запускается вручную или из восходящего конвейера
-start_release:
+get_current_version:
   image: alpine:latest
-  stage: release
+  stage: pre-release
   rules:
-    - if: $CI_PIPELINE_SOURCE == "pipeline"
+    - if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"'
     - if: $CI_PIPELINE_SOURCE == "web"
       when: manual
   variables:
@@ -16,63 +17,59 @@ start_release:
     - apk --no-cache add git
   script:
     - echo "Start release for perxis-proto"
-    - echo LAST_VERSION=$(git describe --tags --abbrev=0) >> vars.env
+    - echo CURRENT_VERSION=$(git describe --tags --abbrev=0) >> vars.env
   artifacts:
     reports:
       dotenv: vars.env
 
 # Расчет новой версии и формирование Changelog
 get_release_info:
-  stage: release
+  stage: pre-release
   image:
     name: orhunp/git-cliff:latest
     entrypoint: [ "" ]
   rules:
-    - if: $CI_PIPELINE_SOURCE == "pipeline"
+    - if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"'
     - if: $CI_PIPELINE_SOURCE == "web"
   needs:
-    - job: start_release
+    - job: get_current_version
   variables:
     GIT_STRATEGY: clone
     GIT_DEPTH: 0
   script:
-    - echo "VERSION=$(git-cliff --bumped-version)" >> vars.env
-    - echo "$(git-cliff --unreleased | sed '1,6d' | sed '$d')" > CHANGELOG.md
+    - echo "RELEASE_VERSION=$(git-cliff --bumped-version)" >> vars.env
+    - echo "$(git-cliff --unreleased | sed '1,6d' | sed '$d')" > current_changelog.md
   artifacts:
     reports:
       dotenv: vars.env
     paths:
-      - CHANGELOG.md
+      - current_changelog.md
 
 # Выпуск релиза и публикация артефактов с новой версией и списком изменений
-release:
-  stage: release
+prepare_release:
+  stage: pre-release
   image: registry.gitlab.com/gitlab-org/release-cli:latest
   rules:
-    - if: $CI_PIPELINE_SOURCE == "pipeline"
+    - if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"'
     - if: $CI_PIPELINE_SOURCE == "web"
   needs:
-    - job: start_release
+    - job: get_current_version
       artifacts: true
     - job: get_release_info
       artifacts: true
   script:
-    - echo "PERXIS_PROTO_RELEASE_VERSION=$VERSION" >> vars.env
+    - echo "PERXIS_PROTO_CURRENT_VERSION=$CURRENT_VERSION" >> vars.env
+    - echo "PERXIS_PROTO_RELEASE_VERSION=$RELEASE_VERSION" >> vars.env
     - |
-      if [ "$VERSION" == "$LAST_VERSION" ]; then
-        exit 204
+      # Если новая версия совпадает со старой, значит изменений не было, и выпускать новый релиз не нужно
+      NEEDS_RELEASE=false
+      if [ "$RELEASE_VERSION" != "$CURRENT_VERSION" ]; then
+        NEEDS_RELEASE=true
       fi
-#  # TODO Убрать при влитии feature-ветки в мастер
-#  release:
-#    name: "Release $VERSION"
-#    tag_name: "$VERSION"
-#    description: "$VERSION"
-  allow_failure:
-    exit_codes:
-      - 204
+    - echo "PERXIS_PROTO_NEEDS_RELEASE=$NEEDS_RELEASE" >> vars.env
   artifacts:
     when: always
     paths:
       - vars.env
-      - CHANGELOG.md
+      - current_changelog.md
     expire_in: 1 week
\ No newline at end of file