Skip to content
Snippets Groups Projects
Commit 06efb967 authored by Luis Carlos Lopes Silva's avatar Luis Carlos Lopes Silva
Browse files

Added the .gitlab-ci.yml to qkd_end2end

parent 431825f0
No related branches found
No related tags found
1 merge request!273Draft: Resolve "(OPT) Integrate QKD tests in TFS CI/CD pipeline"
# Build, tag, and push the Docker image to the GitLab Docker registry
build qkd_end2end:
variables:
TEST_NAME: 'qkd_end2end'
stage: build
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
script:
- docker buildx build -t "${TEST_NAME}:latest" -f ./src/tests/${TEST_NAME}/Dockerfile .
- docker tag "${TEST_NAME}:latest" "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest"
- docker push "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest"
after_script:
- docker images --filter="dangling=true" --quiet | xargs -r docker rmi
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
- changes:
- src/common/**/*.py
- proto/*.proto
- src/tests/${TEST_NAME}/**/*.{py,in,sh,yml}
- src/tests/${TEST_NAME}/Dockerfile
- .gitlab-ci.yml
# Deploy TeraFlowSDN and Execute end-2-end test
end2end_test qkd_end2end:
variables:
TEST_NAME: 'qkd_end2end'
stage: end2end_test
# Needs to run after build stage
needs:
- build qkd_end2end
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker rm -f crdb nats mock_qkd context device pathcomp-frontend pathcomp-backend service qkd_end2end
- docker network rm teraflowbridge
script:
# Create Docker network for inter-container communication
- docker network create -d bridge --subnet=172.254.253.0/24 --gateway=172.254.253.254 teraflowbridge
# Pull necessary images
- docker pull "$CI_REGISTRY_IMAGE/context:latest"
- docker pull "$CI_REGISTRY_IMAGE/device:latest"
- docker pull "$CI_REGISTRY_IMAGE/service:latest"
- docker pull "$CI_REGISTRY_IMAGE/pathcomp-frontend:latest"
- docker pull "$CI_REGISTRY_IMAGE/pathcomp-backend:latest"
- docker pull "$CI_REGISTRY_IMAGE/qkd_app:latest"
- docker pull "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest"
# Deploy CockroachDB (crdb) and NATS
- docker run --name crdb -d --network=teraflowbridge -p 26257:26257 -p 8080:8080 cockroachdb/cockroach:latest-v22.2 start-single-node --insecure
- docker run --name nats -d --network=teraflowbridge -p 4222:4222 -p 8222:8222 nats:2.9 --http_port 8222 --user tfs --pass tfs123
# Wait for CockroachDB and NATS to initialize
- echo "Waiting for CockroachDB to be ready..."
- while ! docker logs crdb 2>&1 | grep -q 'CockroachDB node starting'; do sleep 1; done
- docker logs crdb
- echo "Waiting for NATS to be ready..."
- while ! docker logs nats 2>&1 | grep -q 'Server is ready'; do sleep 1; done
- docker logs nats
# Start mock QKD nodes
- docker run --name mock_qkd -d --network=teraflowbridge -v "$PWD/src/tests/tools/mock_qkd_nodes:/app" python:3.9-slim bash -c "cd /app && ./start.sh"
# Wait for mock QKD nodes to initialize
- echo "Waiting for mock QKD nodes to be ready..."
- sleep 10
# Deploy TeraFlowSDN services
- CRDB_ADDRESS=$(docker inspect crdb --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}")
- NATS_ADDRESS=$(docker inspect nats --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}")
# Deploy Context Service
- docker run --name context -d -p 1010:1010 --env "CRDB_URI=cockroachdb://tfs:tfs123@${CRDB_ADDRESS}:26257/tfs_test?sslmode=require" --env "MB_BACKEND=nats" --env "NATS_URI=nats://tfs:tfs123@${NATS_ADDRESS}:4222" --network=teraflowbridge $CI_REGISTRY_IMAGE/context:latest
- CONTEXTSERVICE_SERVICE_HOST=$(docker inspect context --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}")
# Deploy Device Service
- docker run --name device -d -p 2020:2020 --env "CONTEXTSERVICE_SERVICE_HOST=${CONTEXTSERVICE_SERVICE_HOST}" --network=teraflowbridge $CI_REGISTRY_IMAGE/device:latest
- DEVICESERVICE_SERVICE_HOST=$(docker inspect device --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}")
# Deploy PathComp Services (frontend and backend)
- docker run --name pathcomp-backend -d -p 8081:8081 --network=teraflowbridge $CI_REGISTRY_IMAGE/pathcomp-backend:latest
- PATHCOMP_BACKEND_HOST=$(docker inspect pathcomp-backend --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}")
- docker run --name pathcomp-frontend -d -p 10020:10020 --env "CONTEXTSERVICE_SERVICE_HOST=${CONTEXTSERVICE_SERVICE_HOST}" --env "PATHCOMP_BACKEND_HOST=${PATHCOMP_BACKEND_HOST}" --env "PATHCOMP_BACKEND_PORT=8081" --network=teraflowbridge $CI_REGISTRY_IMAGE/pathcomp-frontend:latest
- PATHCOMPSERVICE_SERVICE_HOST=$(docker inspect pathcomp-frontend --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}")
# Deploy Service Component
- docker run --name service -d -p 3030:3030 --env "CONTEXTSERVICE_SERVICE_HOST=${CONTEXTSERVICE_SERVICE_HOST}" --env "DEVICESERVICE_SERVICE_HOST=${DEVICESERVICE_SERVICE_HOST}" --env "PATHCOMPSERVICE_SERVICE_HOST=${PATHCOMPSERVICE_SERVICE_HOST}" --volume "$PWD/src/service/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/service:latest
# Wait for services to initialize
- sleep 10
# Run end-to-end tests for QKD application
- docker run --name ${TEST_NAME} -t --network=teraflowbridge --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" $CI_REGISTRY_IMAGE/${TEST_NAME}:latest
after_script:
# Dump logs for TeraFlowSDN components
- docker logs context
- docker logs device
- docker logs pathcomp-frontend
- docker logs pathcomp-backend
- docker logs service
# Dump logs for QKD mock nodes
- docker logs mock_qkd
# Clean up
- docker rm -f context device pathcomp-frontend pathcomp-backend service mock_qkd crdb nats
- docker network rm teraflowbridge
- docker volume prune --force
- docker image prune --force
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
artifacts:
when: always
reports:
junit: ./src/tests/${TEST_NAME}/report_*.xml
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