diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index deaf69f2821f9bc4ee4787071281f5661e9c60e7..0304201b54056500c4a85e3e181e0d6db6e6cbd3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,6 +4,9 @@ stages: - test - deploy +variables: + VERSION: '1.0' # version of the TeraFlow release + # include the individual .gitlab-ci.yml of each micro-service include: - local: '/src/monitoring/.gitlab-ci.yml' diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/README.md @@ -0,0 +1 @@ + diff --git a/controller b/controller new file mode 160000 index 0000000000000000000000000000000000000000..acc18d04c16466d7895a93eb258f363e3ef20740 --- /dev/null +++ b/controller @@ -0,0 +1 @@ +Subproject commit acc18d04c16466d7895a93eb258f363e3ef20740 diff --git a/src/monitoring/.gitlab-ci.yml b/src/monitoring/.gitlab-ci.yml index 9e449f64ffcc2227fed3932f4900c7d94722100a..e40c1e9ee3c2c1410bcfca115396e050d9ba8e1e 100644 --- a/src/monitoring/.gitlab-ci.yml +++ b/src/monitoring/.gitlab-ci.yml @@ -2,80 +2,131 @@ build monitoring: variables: IMAGE_NAME: 'monitoring' # name of the microservice - IMAGE_TAG: 'latest' # 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" + - |- + if [[ $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH ]]; then + docker build -t "$IMAGE_NAME:$CI_DEFAULT_BRANCH" -t "$IMAGE_NAME:$VERSION" -f ./src/$IMAGE_NAME/Dockerfile ./src/ + docker tag "$IMAGE_NAME:$CI_DEFAULT_BRANCH" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_DEFAULT_BRANCH" + docker tag "$IMAGE_NAME:$VERSION" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$VERSION" + docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_DEFAULT_BRANCH" + docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$VERSION" + elif [[ $CI_PIPELINE_SOURCE == "merge_request_event" ]]; then + docker build -t "$IMAGE_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" -f ./src/$IMAGE_NAME/Dockerfile ./src/ + docker tag "$IMAGE_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" + docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" + elif [[ $CI_PIPELINE_SOURCE == "push" ]]; then + docker build -t "$IMAGE_NAME:$CI_COMMIT_BRANCH" -f ./src/$IMAGE_NAME/Dockerfile ./src/ + docker tag "$IMAGE_NAME:$CI_COMMIT_BRANCH" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_BRANCH" + docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_BRANCH" + fi 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 + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + 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 + - if: '$CI_PIPELINE_SOURCE == "push"' + 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 monitoring pull: variables: IMAGE_NAME: 'monitoring' # name of the microservice - IMAGE_TAG: 'latest' # tag of the container image (production, development, etc) stage: test needs: - build monitoring before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" + - |- + if [[ $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH ]]; then + docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_DEFAULT_BRANCH" + docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$VERSION" + elif [[ $CI_PIPELINE_SOURCE == "merge_request_event" ]]; then + docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" + elif [[ $CI_PIPELINE_SOURCE == "push" ]]; then + docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_BRANCH" + fi 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 + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + 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 + - if: '$CI_PIPELINE_SOURCE == "push"' + 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 monitoring run: variables: IMAGE_NAME: 'monitoring' # name of the microservice - IMAGE_TAG: 'latest' # tag of the container image (production, development, etc) stage: test needs: - build monitoring 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" + - |- + if [[ $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH ]]; then + docker run -d -p 7070:7070 --name $IMAGE_NAME --network=teraflowbridge --rm "$IMAGE_NAME:$CI_DEFAULT_BRANCH" + elif [[ $CI_PIPELINE_SOURCE == "merge_request_event" ]]; then + docker run -d -p 7070:7070 --name $IMAGE_NAME --network=teraflowbridge --rm "$IMAGE_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" + elif [[ $CI_PIPELINE_SOURCE == "push" ]]; then + docker run -d -p 7070:7070 --name $IMAGE_NAME --network=teraflowbridge --rm "$IMAGE_NAME:$CI_COMMIT_BRANCH" + fi - docker ps after_script: - - docker stop monitoring + - docker stop $IMAGE_NAME 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 + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + 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 + - if: '$CI_PIPELINE_SOURCE == "push"' + 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 monitoring component test monitoring pytest: variables: IMAGE_NAME: 'monitoring' # name of the microservice IMAGE_NAME_TEST: 'monitoring-test' # name of the microservice - IMAGE_TAG: 'latest' # tag of the container image (production, development, etc) stage: test needs: - build monitoring 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 + - docker build -t "$IMAGE_NAME_TEST" -f ./src/$IMAGE_NAME/tests/Dockerfile ./src/ + - docker run -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" $IMAGE_NAME_TEST rules: - changes: - src/$IMAGE_NAME/*.{py,in,yml} @@ -89,7 +140,7 @@ test monitoring pytest: reports: junit: src/$IMAGE_NAME/tests/report.xml -# Deployment of the monitoring service in Kubernetes Cluster +# Deployment of the monitoring service in development Kubernetes Cluster deploy monitoring development: variables: IMAGE_NAME: 'monitoring' # name of the microservice @@ -103,14 +154,49 @@ deploy monitoring development: - kubectl get all - kubectl apply -f "manifests/$IMAGE_NAME.yaml" - kubectl get all + # environment: + # name: development + # url: https://example.com + # kubernetes: + # namespace: development 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 + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"' when: manual + 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 +# Deployment of the monitoring service in production Kubernetes Cluster +deploy monitoring production: + variables: + IMAGE_NAME: 'monitoring' # name of the microservice + IMAGE_TAG: 'latest' # tag of the container image (production, development, etc) + stage: deploy + needs: + - build monitoring + - test monitoring run + script: + - kubectl version + - kubectl get all + - kubectl apply -f "manifests/$IMAGE_NAME.yaml" + - kubectl get all + # environment: + # name: production + # url: https://example.com + # kubernetes: + # namespace: production + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH' + when: manual + 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