diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d829f43c395ff16f15b59fc82201f54e0e1d430f..bb3f0090ea99105f3fbc7303a12d527550fc00fb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -36,11 +36,9 @@ fmt_and_clippy:
 build_debug:
   extends: .env
   rules:
-    - if: $CI_COMMIT_REF_NAME =~ /^wip*$/
-      when: manual
     - if: $CI_COMMIT_TAG
       when: never
-    - if: '$CI_MERGE_REQUEST_ID ||$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH =~ /^release/'
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"'
     - when: manual
   stage: build
   script:
@@ -51,14 +49,28 @@ build_debug:
     paths:
       - build/
 
-tests:
+build_release:
+  extends: .env
+  rules:
+    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH =~ /^release/'
+    - when: never
+  stage: build
+  script:
+    - cargo build --release
+    - mkdir build
+    - mv target/release/duniter build/duniter
+  artifacts:
+    paths:
+      - build/
+
+tests_debug:
   extends: .env
   rules:
     - if: $CI_COMMIT_REF_NAME =~ /^wip*$/
       when: manual
     - if: $CI_COMMIT_TAG
       when: never
-    - if: '$CI_MERGE_REQUEST_ID ||$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH =~ /^release/'
+    - if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
     - when: manual
   stage: tests
   variables:
@@ -69,6 +81,20 @@ tests:
   dependencies:
     - build_debug
 
+tests_release:
+  extends: .env
+  rules:
+    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH =~ /^release/'
+    - when: never
+  stage: tests
+  variables:
+    DUNITER_BINARY_PATH: "../build/duniter"
+    DUNITER_INTEGRATION_TESTS_SPAWN_NODE_DURATION: "10"
+  script:
+    - cargo test
+  dependencies:
+    - build_release
+
 .docker-build-app-image:
   stage: deploy
   image: docker:18.06