diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2f94addbc510e5ba4c3dd6ad0844a9586d09e59c..66e872cf6a13633c5ff316860ac745b2397c3e79 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,6 +12,10 @@ build:
   image: docker:18.09
   services:
     - docker:18.09-dind
+  only:
+    - dev
+    - rec
+    - master
   stage: build
   script:
     - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
@@ -32,12 +36,15 @@ deploy_dev:
     - docker system prune -a -f
 
 code_analysis:
-  image: skilldlabs/sonar-scanner:3.4.0
+  image: skilldlabs/sonar-scanner:4.0.0
   services:
     - docker:18.09-dind
   stage: sonar-analysis
   only:
     - dev
+  before_script:
+    - export NODE_PATH=$NODE_PATH:`npm root -g`
+    - npm install -g typescript
   script:
     - >
       sonar-scanner
@@ -48,3 +55,14 @@ code_analysis:
       -Dsonar.host.url=${SONAR_URL}
       -Dsonar.projectKey=${SONAR_PROJECT_KEY}
       -Dsonar.login=${SONAR_TOKEN}
+
+mr:
+  image: docker:18.09
+  services:
+    - docker:18.09-dind
+  stage: build
+  only:
+    - merge_requests
+  script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+    - docker build .
diff --git a/src/auth/auth.controller.spec.ts b/src/auth/auth.controller.spec.ts
index 5d080347ed76c593ad45056fbf716d96f2c32db6..819bebe40d056c7a9315d71c309bd092e61e17d5 100644
--- a/src/auth/auth.controller.spec.ts
+++ b/src/auth/auth.controller.spec.ts
@@ -1,15 +1,13 @@
-import { JwtModule, JwtService } from '@nestjs/jwt';
+import { JwtModule } from '@nestjs/jwt';
 import { getModelToken } from '@nestjs/mongoose';
 import { PassportModule } from '@nestjs/passport';
 import { Test, TestingModule } from '@nestjs/testing';
 import { ConfigurationModule } from '../configuration/configuration.module';
 import { MailerModule } from '../mailer/mailer.module';
 import { User } from '../users/user.schema';
-import { UsersModule } from '../users/users.module';
 import { UsersService } from '../users/users.service';
 import { AuthController } from './auth.controller';
 import { AuthService } from './auth.service';
-import { JwtStrategy } from './strategy/jwt.strategy';
 
 describe('AuthController', () => {
   let controller: AuthController;
diff --git a/src/auth/auth.service.spec.ts b/src/auth/auth.service.spec.ts
index f097f8d4e8f2859483a68d3ced21b8ca56b9ea8e..0582053c0ba31e3b72bc38e036442121a5e58ab1 100644
--- a/src/auth/auth.service.spec.ts
+++ b/src/auth/auth.service.spec.ts
@@ -51,14 +51,14 @@ describe('AuthService', () => {
         email: 'jacques.dupont@mii.com',
         role: 0,
       };
-      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
       expect(await service.validateUser(loginDto)).toBe(result);
     });
 
     it('should not validateUser', async () => {
       const result = null;
-      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
       expect(await service.validateUser(loginDto)).toBe(result);
     });
@@ -67,28 +67,28 @@ describe('AuthService', () => {
   describe('login', () => {
     it('should login user jacques.dupont@mii.com', async () => {
       const result = { username: ' jacques.dupont@mii.com', token: 'tok3n!1sfq' };
-      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<{ username; token }> => result);
       expect(await service.validateUser(loginDto)).toBe(result);
     });
 
     it('should not login jacques.dupont@mii.com, email not verified', async () => {
       const result = new HttpException('Invalid credentials', HttpStatus.UNAUTHORIZED);
-      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
       expect(await service.validateUser(loginDto)).toBe(result);
     });
 
     it('should not login jacques.dupont@mii.com, bad password', async () => {
       const result = new HttpException('Invalid credentials', HttpStatus.UNAUTHORIZED);
-      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
       expect(await service.validateUser(loginDto)).toBe(result);
     });
 
     it('should not login jacques.dupont@mii.com, username does not exist', async () => {
       const result = new HttpException('Invalid credentials', HttpStatus.UNAUTHORIZED);
-      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
       expect(await service.validateUser(loginDto)).toBe(result);
     });
diff --git a/src/structures/structures.controller.ts b/src/structures/structures.controller.ts
index b3a33b8aa05b35c191abfef770bb228f2cb3a420..5ffa5394b89d881fc908c202851acbf9aab3ba7a 100644
--- a/src/structures/structures.controller.ts
+++ b/src/structures/structures.controller.ts
@@ -1,4 +1,4 @@
-import { Body, Controller, Get, Param, Post, Query, Req } from '@nestjs/common';
+import { Body, Controller, Get, Post, Query } from '@nestjs/common';
 import { CreateStructureDto } from './dto/create-structure.dto';
 import { QueryStructure } from './dto/query-structure.dto';
 import { Structure } from './schemas/structure.schema';
diff --git a/src/users/users.controller.spec.ts b/src/users/users.controller.spec.ts
index 565a6704dd072f9110fc7b61190bac9d600b21c7..714006debf399341880614d0a8e280e93bbadb7c 100644
--- a/src/users/users.controller.spec.ts
+++ b/src/users/users.controller.spec.ts
@@ -1,4 +1,4 @@
-import { HttpModule, HttpService } from '@nestjs/common';
+import { HttpModule } from '@nestjs/common';
 import { getModelToken } from '@nestjs/mongoose';
 import { Test, TestingModule } from '@nestjs/testing';
 import { ConfigurationModule } from '../configuration/configuration.module';
diff --git a/src/users/users.controller.ts b/src/users/users.controller.ts
index 8d80697be368cc3c180d8a1c6894c2e1be5d9353..944c21982583fcece0e9474a92f6b145584bbbfa 100644
--- a/src/users/users.controller.ts
+++ b/src/users/users.controller.ts
@@ -1,4 +1,4 @@
-import { Body, Controller, Get, Param, Post, Query, Req, Request, UseGuards } from '@nestjs/common';
+import { Body, Controller, Get, Param, Post, Query, Request, UseGuards } from '@nestjs/common';
 import { ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger';
 import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
 import { CreateUserDto } from './create-user.dto';
diff --git a/src/users/users.module.ts b/src/users/users.module.ts
index 32b8652861b4a6aa2d35a07b86f8481eb1b1d6a2..69d7ee133b34253305a5d91968d8fe2da518deeb 100644
--- a/src/users/users.module.ts
+++ b/src/users/users.module.ts
@@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
 import { MongooseModule } from '@nestjs/mongoose';
 import { UsersService } from './users.service';
 import { UsersController } from './users.controller';
-import { User, UserSchema } from './User.schema';
+import { User, UserSchema } from './user.schema';
 import { MailerModule } from '../mailer/mailer.module';
 
 @Module({
diff --git a/src/users/users.service.spec.ts b/src/users/users.service.spec.ts
index a8a4419cb3247d0553a1ce3c40a90a043609416d..ce36d9e7d1ea9f4275f9b59aa5d15290e4e7e31c 100644
--- a/src/users/users.service.spec.ts
+++ b/src/users/users.service.spec.ts
@@ -39,14 +39,14 @@ describe('UsersService', () => {
         email: 'jacques.dupont@mii.com',
         password: '$2a$12$vLQjJ9zAWyUwiXLeQDa6w.yazDArYIpf2WnQF1jRHOjBxADEjUEA3',
       };
-      const userDto: CreateUserDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const userDto: CreateUserDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'create').mockImplementation(async (): Promise<User> => result);
       expect(await service.create(userDto)).toBe(result);
     });
 
     it('User should not be created, already exist', async () => {
       const result = new HttpException('User already exists', HttpStatus.BAD_REQUEST);
-      const userDto: CreateUserDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const userDto: CreateUserDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'create').mockImplementation(async (): Promise<any> => result);
       expect(await service.create(userDto)).toBe(result);
     });
@@ -56,7 +56,7 @@ describe('UsersService', () => {
         'Weak password, it must contain ne lowercase alphabetical character, one uppercase alphabetical character, one numeric character, one special character and be eight characters or longer',
         HttpStatus.UNPROCESSABLE_ENTITY
       );
-      const userDto: CreateUserDto = { email: 'jacques.dupont@mii.com', password: 'test' };
+      const userDto: CreateUserDto = { email: 'jacques.dupont@mii.com', password: 'test' }; //NOSONAR
       jest.spyOn(service, 'create').mockImplementation(async (): Promise<any> => result);
       expect(await service.create(userDto)).toBe(result);
     });
@@ -72,21 +72,21 @@ describe('UsersService', () => {
         password: '$2a$12$vLQjJ9zAWyUwiXLeQDa6w.yazDArYIpf2WnQF1jRHOjBxADEjUEA3',
         role: 0,
       };
-      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' };
+      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'findByLogin').mockImplementation(async (): Promise<User> => result);
       expect(await service.findByLogin(loginDto)).toBe(result);
     });
 
     it('user does not exist, should be unauthorized issue', async () => {
       const result: HttpException = new HttpException('Invalid credentials', HttpStatus.UNAUTHORIZED);
-      const loginDto: LoginDto = { email: 'jean.dupont@mii.com', password: 'test1A!!' };
+      const loginDto: LoginDto = { email: 'jean.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
       jest.spyOn(service, 'findByLogin').mockImplementation(async (): Promise<any> => result);
       expect(await service.findByLogin(loginDto)).toBe(result);
     });
 
     it('wrong password, should be unauthorized issue', async () => {
       const result: HttpException = new HttpException('Invalid credentials', HttpStatus.UNAUTHORIZED);
-      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!!' };
+      const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!!' }; //NOSONAR
       jest.spyOn(service, 'findByLogin').mockImplementation(async (): Promise<any> => result);
       expect(await service.findByLogin(loginDto)).toBe(result);
     });
diff --git a/src/users/users.service.ts b/src/users/users.service.ts
index 4ea11e51fc03c9026ee7712013df0ae79bc06a11..4fb784b185c7142c69bb1476149dabcc0ced1450 100644
--- a/src/users/users.service.ts
+++ b/src/users/users.service.ts
@@ -47,7 +47,7 @@ export class UsersService {
    * @param password string
    */
   private isStrongPassword(password: string): boolean {
-    const strongRegex = new RegExp('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})');
+    const strongRegex = new RegExp('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})'); //NOSONAR
     return strongRegex.test(password);
   }