OSVauco/cloudbuild.yaml

118 lines
4.1 KiB
YAML

# cloudbuild.yaml — Auto-build, cost-check og deploy osvauco-agent på push til main
steps:
# Steg 1: Kost-sjekk før deploy
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
id: cost-check
entrypoint: bash
args:
- '-c'
- |
echo "=== Cost Check ==="
bash infrastructure/09-cost-check.sh || true
echo "=== Cost Check ferdig ==="
# Steg 2: Bygg Docker-image
- name: 'gcr.io/cloud-builders/docker'
id: build
args:
- 'build'
- '--cache-from'
- '${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/osvauco-agent:latest'
- '-t'
- '${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/osvauco-agent:$BUILD_ID'
- '-t'
- '${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/osvauco-agent:latest'
- '.'
- '-f'
- 'agents/core-logic/Dockerfile'
# Steg 3: Push image
- name: 'gcr.io/cloud-builders/docker'
id: push
waitFor: ['build']
args:
- 'push'
- '--all-tags'
- '${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/osvauco-agent'
# Steg 4: Deploy til Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
id: deploy
waitFor: ['push']
entrypoint: gcloud
args:
- 'run'
- 'deploy'
- '${_CLOUD_RUN_SERVICE}'
- '--image=${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REPO}/osvauco-agent:$BUILD_ID'
- '--region=${_REGION}'
- '--project=${PROJECT_ID}'
- '--service-account=${_AGENT_SA}'
- '--set-env-vars=GOOGLE_CLOUD_PROJECT=${PROJECT_ID},GOOGLE_CLOUD_LOCATION=${_GEMINI_LOCATION},GOOGLE_GENAI_USE_VERTEXAI=True,BILLING_TABLE=billing_export.gcp_billing_export_v1_0171F6_057E6B_A260BA,RAG_CORPUS=projects/propane-will-491900-m5/locations/europe-west4/ragCorpora/6917529027641081856,RAG_LOCATION=europe-west4'
- '--set-secrets=GOOGLE_CLIENT_ID=GOOGLE_CLIENT_ID:1,SESSION_SECRET=SESSION_SECRET:1,GOOGLE_CLIENT_SECRET=GOOGLE_CLIENT_SECRET:1,MCP_SECRET=mcp-server-key:latest'
- '--no-allow-unauthenticated'
- '--port=8080'
- '--memory=1Gi'
- '--cpu=1'
- '--min-instances=0'
- '--max-instances=3'
- '--quiet'
# Steg 5: Smoke test — verifiser at agenten svarer etter deploy
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
id: smoke-test
waitFor: ['deploy']
entrypoint: bash
args:
- '-c'
- |
echo "=== Smoke Test ==="
BASE_URL="https://osvauco-agent-357036551735.us-central1.run.app"
echo "BASE_URL: $$BASE_URL"
TOKEN=$$(gcloud auth print-identity-token 2>/dev/null)
echo "TOKEN_EMPTY: $([ -z "$$TOKEN" ] && echo YES || echo NO)"
echo "TOKEN_PREFIX: $${TOKEN:0:30}"
echo "=== Raw curl output ==="
curl -v -H "Authorization: Bearer $$TOKEN" \
"$$BASE_URL/health" 2>&1
echo "=== Without auth ==="
curl -v "$$BASE_URL/health" 2>&1
echo "=== Debug done ==="
# Steg 6: Deploy-notifikasjon til webhook/chat-app
- 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
NOTIFY_MSG="✅ OSVauco Deploy fullført. Commit: $COMMIT_SHA, Service: ${_CLOUD_RUN_SERVICE}, Region: ${_REGION}"
curl -s -X POST "$$WH_URL" \
-H 'Content-Type: application/json' \
-d "{\"text\": \"$$NOTIFY_MSG\"}" || true
echo "✓ Deploy-notifikasjon sendt"
else
echo "⚠️ Ingen webhook-url i Secret Manager — hopper over varsling"
fi
substitutions:
_REGION: us-central1
_ARTIFACT_REPO: osvauco-repo
_CLOUD_RUN_SERVICE: osvauco-agent
_CLOUD_RUN_URL: osvauco-agent-357036551735.us-central1.run.app
_AGENT_SA: osvauco-agent-sa@propane-will-491900-m5.iam.gserviceaccount.com
_GEMINI_LOCATION: global
options:
substitutionOption: ALLOW_LOOSE
logging: CLOUD_LOGGING_ONLY