Skip to content
Snippets Groups Projects
Commit b9fdbf13 authored by Sergio Gonzalez Diaz's avatar Sergio Gonzalez Diaz
Browse files

gitlab-ci.yml file generator

Added python script to automatically generate a gitlab-ci.yml file
parent 2502dad6
No related branches found
No related tags found
1 merge request!54Release 2.0.0
#!/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))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment