Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
controller
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
TFS
controller
Commits
06efb967
Commit
06efb967
authored
2 months ago
by
Luis Carlos Lopes Silva
Browse files
Options
Downloads
Patches
Plain Diff
Added the .gitlab-ci.yml to qkd_end2end
parent
431825f0
No related branches found
No related tags found
1 merge request
!273
Draft: Resolve "(OPT) Integrate QKD tests in TFS CI/CD pipeline"
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/tests/qkd_end2end/.gitlab-ci.yml
+119
-0
119 additions, 0 deletions
src/tests/qkd_end2end/.gitlab-ci.yml
with
119 additions
and
0 deletions
src/tests/qkd_end2end/.gitlab-ci.yml
0 → 100644
+
119
−
0
View file @
06efb967
# 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
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment