diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a70ed2e72ed10864ae22b5ed217d40c3755d002a
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,19 @@
+services:
+  - docker:dind
+
+stages:
+  - build
+  - deploy
+
+build:
+  stage: build
+  variables:
+    IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
+  script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+    - docker build -t $IMAGE_TAG .
+    - docker push $IMAGE_TAG
+  only:
+    - main
+    - develop
+    - /^release-.*$/
\ No newline at end of file
diff --git a/api/dockerfile b/api/dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..885dc3f026dfb8375b2cd858661e3c31dd9aca09
--- /dev/null
+++ b/api/dockerfile
@@ -0,0 +1,30 @@
+FROM node:12.13-alpine As development
+
+WORKDIR /usr/src/app
+
+COPY package*.json ./
+
+RUN npm ci --development
+
+COPY . .
+
+RUN npm run build
+
+RUN npm run test
+
+FROM node:12.13-alpine as production
+
+ARG NODE_ENV=production
+ENV NODE_ENV=${NODE_ENV}
+
+WORKDIR /usr/src/app
+
+COPY package*.json ./
+
+RUN npm ci --production
+
+COPY . .
+
+COPY --from=development /usr/src/app/dist ./dist
+
+CMD ["node", "dist/main"]
\ No newline at end of file
diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts
index f3a15d7680b7bb4f0d167b565160f8e010f25d13..ee877e21e4f6c94938ffe786a68b198bc429a779 100644
--- a/api/src/engine/connectors/datashield/main.connector.ts
+++ b/api/src/engine/connectors/datashield/main.connector.ts
@@ -1,5 +1,5 @@
 import { HttpService } from "@nestjs/axios";
-import { IEngineOptions, IEngineService } from "src/engine/engine.interface";
+import { IEngineOptions, IEngineService } from "src/engine/engine.interfaces";
 
 export default class DataShieldService implements IEngineService {
     constructor(private readonly options: IEngineOptions, private readonly httpService: HttpService) { }
diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts
index e80647b1c6fa3cfd4c5e03d3315a1b8e1abb2ebd..b8a6ae8d6bdb640549172a78968d9a9cfe231a92 100644
--- a/api/src/engine/connectors/exareme/main.connector.ts
+++ b/api/src/engine/connectors/exareme/main.connector.ts
@@ -1,5 +1,5 @@
 import { HttpService } from "@nestjs/axios";
-import { IEngineOptions, IEngineService } from "src/engine/engine.interface";
+import { IEngineOptions, IEngineService } from "src/engine/engine.interfaces";
 
 export default class ExaremeService implements IEngineService {
     constructor(private readonly options: IEngineOptions, private readonly httpService: HttpService) { }
diff --git a/api/src/engine/engine.controller.ts b/api/src/engine/engine.controller.ts
index 503edea819501aa28b12574822a5182ae0b86718..5c9e3c59b04377fc4b4bf0e325a4ca1cd2cfd3fb 100644
--- a/api/src/engine/engine.controller.ts
+++ b/api/src/engine/engine.controller.ts
@@ -1,7 +1,7 @@
 import { HttpService } from '@nestjs/axios';
 import { Controller, Get, Inject } from '@nestjs/common';
 import { ENGINE_SERVICE } from './engine.constants';
-import { IEngineService } from './engine.interface';
+import { IEngineService } from './engine.interfaces';
 
 @Controller()
 export class EngineController {
diff --git a/api/src/engine/engine.interface.ts b/api/src/engine/engine.interfaces.ts
similarity index 59%
rename from api/src/engine/engine.interface.ts
rename to api/src/engine/engine.interfaces.ts
index 073b05a3f933ea9d4b9ab1d26ea840b7f31e5018..271cbb1da4556360a61bbad0c38c009a510bdb8f 100644
--- a/api/src/engine/engine.interface.ts
+++ b/api/src/engine/engine.interfaces.ts
@@ -1,6 +1,3 @@
-import { AxiosResponse } from "axios";
-import { Observable } from "rxjs";
-
 export interface IEngineOptions {
     type: string;
 }
diff --git a/api/src/engine/engine.module.ts b/api/src/engine/engine.module.ts
index 2490e51b9327b2241cbd246206173a953d7a91a8..bd998daf8db49063f9e0174309e443f09074e91c 100644
--- a/api/src/engine/engine.module.ts
+++ b/api/src/engine/engine.module.ts
@@ -4,7 +4,7 @@ import { GraphQLModule } from '@nestjs/graphql';
 import { join } from 'path';
 import { ENGINE_MODULE_OPTIONS, ENGINE_SERVICE } from './engine.constants';
 import { EngineController } from './engine.controller';
-import { IEngineOptions, IEngineService } from './engine.interface';
+import { IEngineOptions, IEngineService } from './engine.interfaces';
 import { EngineResolver } from './engine.resolver';
 
 @Global()
diff --git a/api/src/engine/engine.resolver.ts b/api/src/engine/engine.resolver.ts
index 94f911825d5548eabea84382f7f5727e77e68092..e2bcfa5c76bf3823f895ff90dd77a92a8238c47a 100644
--- a/api/src/engine/engine.resolver.ts
+++ b/api/src/engine/engine.resolver.ts
@@ -1,7 +1,7 @@
 import { Inject } from '@nestjs/common';
 import { Query, Resolver } from '@nestjs/graphql';
 import { ENGINE_SERVICE } from './engine.constants';
-import { IEngineService } from './engine.interface';
+import { IEngineService } from './engine.interfaces';
 
 @Resolver()
 export class EngineResolver {