From f82144c977ebe14ca4e3df4fe323b0a20718a98b Mon Sep 17 00:00:00 2001 From: jgrusewski Date: Sat, 28 Feb 2026 19:17:24 +0100 Subject: [PATCH] fix(ci): replace old per-image deploy with S3 binary share deploy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The deploy job was using kubectl set image to stamp per-service Docker images (api_gateway:, etc.) — these images no longer exist after the S3 binary share migration. Replace with kubectl apply + rollout restart, which picks up YAML changes and triggers initContainers to fetch latest binaries from S3. Delete redundant deploy-services job (merged into deploy). Co-Authored-By: Claude Opus 4.6 --- .gitlab-ci.yml | 60 +++++--------------------------------------------- 1 file changed, 6 insertions(+), 54 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5390a41bc..befb10011 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1410,60 +1410,12 @@ deploy: kubernetes: namespace: foxhunt script: - # Update images to this commit's build - # Format: image_repo:deployment_name:container_name - - | - SERVICES=" - trading_service:trading-service:trading-service - api_gateway:api-gateway:api-gateway - broker_gateway_service:broker-gateway:broker-gateway - ml_training_service:ml-training-service:ml-training-service - backtesting_service:backtesting-service:backtesting-service - trading_agent_service:trading-agent-service:trading-agent-service - web-gateway:web-gateway:web-gateway - " - TOTAL=0 - FAILED=0 - for entry in $SERVICES; do - IMAGE_REPO=$(echo "$entry" | cut -d: -f1) - DEPLOY_NAME=$(echo "$entry" | cut -d: -f2) - CONTAINER_NAME=$(echo "$entry" | cut -d: -f3) - TOTAL=$((TOTAL + 1)) - echo "Deploying ${DEPLOY_NAME} (image: ${IMAGE_REPO}:${CI_COMMIT_SHA})..." - if ! kubectl -n foxhunt set image "deployment/${DEPLOY_NAME}" "${CONTAINER_NAME}=${REGISTRY}/${IMAGE_REPO}:${CI_COMMIT_SHA}"; then - echo "WARNING: failed to update ${DEPLOY_NAME} (deployment may not exist yet)" - FAILED=$((FAILED + 1)) - fi - done - echo "Deploy complete: $((TOTAL - FAILED))/${TOTAL} services updated" - # Fail if ALL deployments failed (cluster probably unreachable) - [ "$FAILED" -lt "$TOTAL" ] - -# -------------------------------------------------------------------------- -# Stage 5: Deploy — rolling restart of all service deployments -# -------------------------------------------------------------------------- -deploy-services: - stage: deploy - image: - name: bitnami/kubectl:latest - entrypoint: [""] - tags: - - kapsule - - docker - needs: - - job: write-manifest - variables: - KUBERNETES_CPU_REQUEST: "100m" - KUBERNETES_MEMORY_REQUEST: "64Mi" - rules: - - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push" - when: manual - allow_failure: true - - if: $CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "api" - when: manual - allow_failure: true - script: + # S3 binary share: services use generic runtime image + initContainer to fetch binaries from S3. + # Deploy = apply K8s manifests (picks up YAML changes) + rollout restart (fetch new binaries). - echo "Deploying ${CI_COMMIT_SHA}..." + # Apply all service manifests (idempotent — picks up any YAML changes) + - kubectl apply -f infra/k8s/services/ -f infra/k8s/storage/ -f infra/k8s/training/ + # Rolling restart triggers initContainers to fetch latest binaries from S3 - | for svc in trading-service api-gateway broker-gateway \ ml-training-service backtesting-service \ @@ -1477,4 +1429,4 @@ deploy-services: trading-agent-service data-acquisition-service web-gateway; do kubectl -n foxhunt rollout status deployment/$svc --timeout=120s done - - echo "All services deployed" + - echo "All services deployed with S3 binaries"