OSVauco/cloudbuild.mcp.yaml

111 lines
3.7 KiB
YAML

# 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:
- name: 'alpine/git'
id: clone
entrypoint: 'sh'
args:
- '-c'
- |
git clone --depth=1 --branch=main \
http://136.111.198.14:3000/chris/osvauco.git /workspace/src
cp -r /workspace/src/. /workspace/
# 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