# cloudbuild.mcp.yaml — CI/CD for opax-mcp Cloud Run service # Trigger: push til main (opax-mcp/** endret) # Service: opax-mcp (us-central1) # SA: jason-vauger@propane-will-491900-m5.iam.gserviceaccount.com steps: # Steg 1: Bygg Docker-image - name: 'gcr.io/cloud-builders/docker' id: build args: - 'build' - '--cache-from' - '${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/opax-mcp:latest' - '-t' - '${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/opax-mcp:$BUILD_ID' - '-t' - '${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/opax-mcp:latest' - 'opax-mcp' - '-f' - 'opax-mcp/Dockerfile' # Steg 2: Push image - name: 'gcr.io/cloud-builders/docker' id: push waitFor: ['build'] args: - 'push' - '--all-tags' - '${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/opax-mcp' # Steg 3: Deploy til Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' id: deploy waitFor: ['push'] entrypoint: gcloud args: - 'run' - 'deploy' - 'opax-mcp' - '--image=${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/opax-mcp:$BUILD_ID' - '--region=${_REGION}' - '--project=${PROJECT_ID}' - '--service-account=${_MCP_SA}' - '--set-env-vars=GOOGLE_CLOUD_PROJECT=${PROJECT_ID},OPAX_BASE_URL=https://opax.vauco.no,GH_REPO=vauco-saas/OSVauco' - '--set-secrets=MCP_SECRET=mcp-server-key:latest,GITHUB_PAT=github-pat:latest' - '--no-allow-unauthenticated' - '--port=8080' - '--memory=512Mi' - '--cpu=1' - '--min-instances=0' - '--max-instances=2' - '--quiet' # Steg 4: Smoke test - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' id: smoke-test waitFor: ['deploy'] entrypoint: bash args: - '-c' - | echo "=== MCP Smoke Test ===" SVC_URL="https://opax-mcp-zjbqp3prqq-uc.a.run.app" echo "Service URL: $$SVC_URL" TOKEN=$$(curl -s -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=$$SVC_URL&format=full") STATUS=$$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer $$TOKEN" "$$SVC_URL/health" 2>/dev/null || echo "000") echo "Health status: $$STATUS" [ "$$STATUS" = "200" ] && echo "OK" || echo "WARN: health check returnerte $$STATUS" echo "=== Smoke Test ferdig ===" # Steg 5: Notify - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' id: notify waitFor: ['smoke-test'] entrypoint: bash args: - '-c' - | WH_URL=$$(gcloud secrets versions access latest \ --secret=webhook-url --project=${PROJECT_ID} 2>/dev/null || echo "") if [[ -n "$$WH_URL" ]]; then MSG="✅ opax-mcp deploy fullført\nCommit: $COMMIT_SHA\nService: opax-mcp (${_REGION})\nhttps://opax-mcp-zjbqp3prqq-uc.a.run.app" curl -s -X POST "$$WH_URL" \ -H 'Content-Type: application/json' \ -d "{\"text\": \"$$MSG\"}" || true echo "✓ Varsel sendt" else echo "⚠️ Ingen webhook-url — hopper over varsling" fi substitutions: _REGION: us-central1 _ARTIFACT_REPO: osvauco-repo _MCP_SA: jason-vauger@propane-will-491900-m5.iam.gserviceaccount.com options: substitutionOption: ALLOW_LOOSE logging: CLOUD_LOGGING_ONLY