#!/bin/sh # Chart를 실제로 렌더링해 배포될 YAML을 만든다. # # 존재 이유가 둘이다. # 1. 검증. HelmDeploymentContractTest는 values와 template의 정적 규칙만 본다. # helper 오류, 잘못된 들여쓰기, 조건 분기 실수는 렌더링해야 드러난다. # 2. 인수인계. GitOps 저장소가 아직 없으므로 여기서 나온 YAML이 "지금 무엇이 배포되는가"의 # 유일한 확인 가능한 형태다. 저장소가 생기면 이 산출물을 그대로 옮기면 된다. # # helm 바이너리가 PATH에 있어야 한다. CI는 helm 컨테이너 안에서 이 스크립트를 실행한다. set -eu CHART=deploy/helm/mcp-server OUT=${OUT_DIR:-build/rendered} # values.yaml의 deployments에서 배포 key 목록을 뽑는다. # 목록의 정본은 values.yaml 하나이며 여기에 복사해 두지 않는다. deployment_keys() { sed -n '/^deployments:/,/^[a-z]/p' "$CHART/values.yaml" | sed -n 's/^ \([a-z0-9-]*\):$/\1/p' } rm -rf "$OUT" mkdir -p "$OUT" keys=$(deployment_keys) if [ -z "$keys" ]; then echo "values.yaml의 deployments에서 배포 key를 찾지 못했다. 형식이 바뀌었는지 확인한다." >&2 exit 1 fi for env in dev test prod; do values="$CHART/values-$env.yaml" namespace="ax-hub-$env" # portal 모드. 배포 하나가 전 route를 서비스한다(ADR-0013). echo "== lint $env / portal" helm lint "$CHART" -f "$values" echo "== render $env / portal" helm template axhub-mcp "$CHART" -f "$values" \ --namespace "$namespace" \ >"$OUT/$env-portal.yaml" # bundles 모드. 배포마다 Tool Service 하나(ADR-0007). # 토폴로지 전체를 돌려야 등급별 replica·PDB·노드 분산 분기가 모두 렌더링된다. for key in $keys; do echo "== lint $env / bundles / $key" helm lint "$CHART" -f "$values" --set mode=bundles --set "deploymentKey=$key" echo "== render $env / bundles / $key" helm template "$key-mcp" "$CHART" -f "$values" \ --set mode=bundles --set "deploymentKey=$key" \ --namespace "$namespace" \ >"$OUT/$env-bundles-$key.yaml" done done echo echo "렌더링 결과: $OUT" ls -1 "$OUT"