diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f83aa096f5f4b32697bc7386ec82eaf9c7281962..ba8e17193c6b16492d072aff49caadaa59323405 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,48 +4,57 @@ stages: - deploy variables: - DOCKER_USERNAME: "medkaddour" - TAG: "latest" - DEPLOY_ENV: "local" # Change to 'cloud' if deploying to the cloud + DOCKER_REGISTRY: "registry.gitlab.com" + PROJECT_NAME: "surveillance-system" + K8S_NAMESPACE: "surveillance-system" -before_script: - - echo "Setting up environment..." - -# Build stage: Build the Docker images +# Build stage: Builds Docker images for all services build: stage: build + services: + - docker:dind + image: docker:stable script: + - echo "Logging in to Docker registry..." + - echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY -u "$CI_REGISTRY_USER" --password-stdin - echo "Building Docker images..." - - docker build -t ${DOCKER_USERNAME}/camera:${TAG} ./services/camera - - docker build -t ${DOCKER_USERNAME}/motion_detector:${TAG} ./services/motion_detector - - docker build -t ${DOCKER_USERNAME}/object_recognizer:${TAG} ./services/object_recognizer + - docker build -t $CI_REGISTRY_IMAGE/camera:latest ./services/camera + - docker build -t $CI_REGISTRY_IMAGE/motion_detector:latest ./services/motion_detector + - docker build -t $CI_REGISTRY_IMAGE/object_recognizer:latest ./services/object_recognizer + - echo "Pushing Docker images to registry..." + - docker push $CI_REGISTRY_IMAGE/camera:latest + - docker push $CI_REGISTRY_IMAGE/motion_detector:latest + - docker push $CI_REGISTRY_IMAGE/object_recognizer:latest only: - main -# Test stage: Run unit tests (optional, can be customized based on your services) +# Test stage: Runs tests for each service test: stage: test + image: python:3.9 + before_script: + - pip install pytest script: - - echo "Running tests..." - - docker run ${DOCKER_USERNAME}/camera:${TAG} pytest tests/ - - docker run ${DOCKER_USERNAME}/motion_detector:${TAG} pytest tests/ - - docker run ${DOCKER_USERNAME}/object_recognizer:${TAG} pytest tests/ + - echo "Running tests for Camera service..." + - pytest ./services/camera/tests + - echo "Running tests for Motion Detection service..." + - pytest ./services/motion_detector/tests + - echo "Running tests for Object Recognizer service..." + - pytest ./services/object_recognizer/tests only: - main -# Deploy stage: Deploy using Docker Compose +# Deploy stage: Deploys services to Kubernetes deploy: stage: deploy + image: bitnami/kubectl:latest + before_script: + - echo "$KUBE_CONFIG" | base64 -d > kubeconfig + - export KUBECONFIG=$(pwd)/kubeconfig script: - - echo "Deploying the system..." - - if [ "$DEPLOY_ENV" == "local" ]; then - docker-compose -f ./deploy/docker-compose/docker-compose.yml down --volumes --remove-orphans; - docker-compose -f ./deploy/docker-compose/docker-compose.yml up -d --build --force-recreate; - fi - - if [ "$DEPLOY_ENV" == "cloud" ]; then - docker-compose -f ./deploy/docker-compose/docker-compose.yml down --volumes --remove-orphans; - docker-compose -f ./deploy/docker-compose/docker-compose.yml pull --ignore-pull-failures; - docker-compose -f ./deploy/docker-compose/docker-compose.yml up -d --build --force-recreate; - fi + - echo "Deploying to Kubernetes namespace $K8S_NAMESPACE..." + - kubectl apply -f k8s/deployment.yaml + - kubectl apply -f k8s/service.yaml + - echo "Deployment completed." only: - main