diff --git a/src/gitlab-ci.yml_generator.py b/src/gitlab-ci.yml_generator.py
new file mode 100644
index 0000000000000000000000000000000000000000..6a78959cf25f974b94019adbb0410870e03b8a57
--- /dev/null
+++ b/src/gitlab-ci.yml_generator.py
@@ -0,0 +1,135 @@
+#!/usr/bin/python
+import argparse
+import os.path
+
+parser = argparse.ArgumentParser(description='Generate .gitlab-cy.yml template for a TeraFlow microservice.')
+parser.add_argument("microservice", help="name of your microservice", type=str)
+parser.add_argument("-t", "--tag", help="tag of the microservice Docker container", type=str, default='latest', required=False)
+args = parser.parse_args()
+path="./{microservice}".format(microservice = args.microservice)
+file="{path}/.gitlab-ci.yml".format(path = path)
+
+if(os.path.isfile(file)):
+    if input("File already exists, do you want to overwrite? (y/n) ") != "y":
+        exit()
+if(os.path.lexists(path)!= True):
+    try:
+        os.mkdir(path)
+    except OSError:
+        print ("Creation of the directory %s failed" % path)
+    else:
+        print ("Successfully created the directory %s " % path)
+
+f=open(file,"w+")
+yml_template = """
+# build, tag and push the Docker image to the gitlab registry
+build {microservice}:
+  variables:
+    IMAGE_NAME: '{microservice}' # name of the microservice
+    IMAGE_TAG: '{tag}' # tag of the container image (production, development, etc)
+  stage: build
+  before_script:
+    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+  script:
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
+    - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+  rules:
+    - changes:
+      - src/$IMAGE_NAME/*.{{py,in,yml}}
+      - src/$IMAGE_NAME/Dockerfile
+      - src/$IMAGE_NAME/tests/*.py
+      - src/$IMAGE_NAME/tests/Dockerfile
+      - manifests/$IMAGE_NAME.yaml
+      - .gitlab-ci.yml
+
+# test if the Docker image can be pulled from the gitlab registry
+test {microservice} pull:
+  variables:
+    IMAGE_NAME: '{microservice}' # name of the microservice
+    IMAGE_TAG: '{tag}' # tag of the container image (production, development, etc)
+  stage: test
+  needs:
+    - build {microservice}
+  before_script:
+    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+  script:
+    - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+  rules:
+    - changes:
+      - src/$IMAGE_NAME/*.{{py,in,yml}}
+      - src/$IMAGE_NAME/Dockerfile
+      - src/$IMAGE_NAME/tests/*.py
+      - src/$IMAGE_NAME/tests/Dockerfile
+      - manifests/$IMAGE_NAME.yaml
+      - .gitlab-ci.yml
+
+# test if the Docker image can be executed
+test {microservice} run:
+  variables:
+    IMAGE_NAME: '{microservice}' # name of the microservice
+    IMAGE_TAG: '{tag}' # tag of the container image (production, development, etc)
+  stage: test
+  needs:
+    - build {microservice}
+  before_script:
+    - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi  
+  script:
+    - docker run -d -p 7070:7070 --name $IMAGE_NAME --network=teraflowbridge --rm "$IMAGE_NAME:$IMAGE_TAG"
+    - docker ps
+  after_script:
+    - docker stop {microservice}
+  rules:
+    - changes:
+      - src/$IMAGE_NAME/*.{{py,in,yml}}
+      - src/$IMAGE_NAME/Dockerfile
+      - src/$IMAGE_NAME/tests/*.py
+      - src/$IMAGE_NAME/tests/Dockerfile
+      - manifests/$IMAGE_NAME.yaml
+      - .gitlab-ci.yml
+
+# apply unit test to the {microservice} component
+test {microservice} pytest:
+  variables:
+    IMAGE_NAME: '{microservice}' # name of the microservice
+    IMAGE_NAME_TEST: '{microservice}-test' # name of the microservice
+    IMAGE_TAG: '{tag}' # tag of the container image (production, development, etc)
+  stage: test
+  needs:
+    - build {microservice}
+  script:
+    - docker build -t "$IMAGE_NAME_TEST:$IMAGE_TAG" -f ./src/$IMAGE_NAME/tests/Dockerfile ./src/
+    - docker run -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" $IMAGE_NAME_TEST:$IMAGE_TAG
+  rules:
+    - changes:
+      - src/$IMAGE_NAME/*.{{py,in,yml}}
+      - src/$IMAGE_NAME/Dockerfile
+      - src/$IMAGE_NAME/tests/*.py
+      - src/$IMAGE_NAME/tests/Dockerfile
+      - manifests/$IMAGE_NAME.yaml
+      - .gitlab-ci.yml
+  artifacts:
+      when: always
+      reports:
+        junit: src/$IMAGE_NAME/tests/report.xml
+
+# Deployment of the {microservice} service in Kubernetes Cluster
+deploy {microservice} development:
+  variables:
+    IMAGE_NAME: '{microservice}' # name of the microservice
+    IMAGE_TAG: '{tag}' # tag of the container image (production, development, etc)
+  stage: deploy
+  needs:
+    - build {microservice}
+    - test {microservice} run
+  script:
+    - kubectl version
+    - kubectl get all
+    - kubectl apply -f "manifests/$IMAGE_NAME.yaml"
+    - kubectl get all
+  when: manual
+"""
+
+#print(yml_text.format(microservice = args.microservice, tag=args.tag))
+f.write(yml_template.format(microservice = args.microservice, tag=args.tag))
+print("File created in the following path: {file}".format(file=file))