59 lines
2.5 KiB
YAML
59 lines
2.5 KiB
YAML
# Gitea Actions — 릴리스 태그(v*) push 시 이미지 빌드/푸시 후 YakCloud 에 리컨실 배포.
|
|
# 매니페스트 구동형: yakcloud.yaml 의 각 workload.build 를 빌드해 image 로 push → yakcloud_deploy.py.
|
|
# 프로젝트마다 수정 불필요(레포명은 GITHUB_REPOSITORY 로 자동).
|
|
# 필요 secrets: REGISTRY_TOKEN, YAKCLOUD_URL, YAKCLOUD_TOKEN, YAKCLOUD_CLUSTER
|
|
# 러너: 전용 host act_runner, 라벨 ci-polyglot(잡 컨테이너에 host docker.sock 마운트).
|
|
name: deploy
|
|
on:
|
|
push:
|
|
tags: ["v*"]
|
|
|
|
jobs:
|
|
build-and-deploy:
|
|
runs-on: ci-polyglot
|
|
env:
|
|
REGISTRY: gitea.yakenator.io
|
|
steps:
|
|
- name: Build, push images & deploy
|
|
env:
|
|
REG_USER: ${{ github.actor }}
|
|
REG_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
|
|
YAKCLOUD_URL: ${{ secrets.YAKCLOUD_URL }}
|
|
YAKCLOUD_TOKEN: ${{ secrets.YAKCLOUD_TOKEN }}
|
|
YAKCLOUD_CLUSTER: ${{ secrets.YAKCLOUD_CLUSTER }}
|
|
run: |
|
|
set -eo pipefail
|
|
TAG="${GITHUB_REF_NAME}"
|
|
echo "▸ tag=$TAG repo=$GITHUB_REPOSITORY registry=$REGISTRY"
|
|
|
|
# 1) 소스 체크아웃(git clone — JS 액션 미사용, 견고)
|
|
git clone --depth 1 -b "$TAG" \
|
|
"https://${REG_USER}:${REG_TOKEN}@${REGISTRY}/${GITHUB_REPOSITORY}.git" src
|
|
cd src
|
|
|
|
# 2) 레지스트리 로그인
|
|
echo "$REG_TOKEN" | docker login "$REGISTRY" -u "$REG_USER" --password-stdin
|
|
|
|
# 3) PyYAML 준비(yakcloud-runner 이미지엔 이미 있음)
|
|
python3 -c "import yaml" 2>/dev/null \
|
|
|| python3 -m pip install --quiet --break-system-packages pyyaml 2>/dev/null \
|
|
|| pip3 install --quiet pyyaml
|
|
|
|
# 4) 매니페스트의 각 workload.build → image 빌드/푸시(${TAG} 치환)
|
|
python3 - "$TAG" <<'PY'
|
|
import subprocess, sys, yaml
|
|
tag = sys.argv[1]
|
|
m = yaml.safe_load(open("yakcloud.yaml"))
|
|
for w in m.get("workloads", []):
|
|
ctx = w.get("build")
|
|
if not ctx:
|
|
continue # build 없으면 외부 이미지로 간주(빌드 스킵)
|
|
img = w["image"].replace("${TAG}", tag)
|
|
print(f"▸ build {w['name']}: {ctx} -> {img}", flush=True)
|
|
subprocess.check_call(["docker", "build", "-t", img, ctx])
|
|
subprocess.check_call(["docker", "push", img])
|
|
PY
|
|
|
|
# 5) YakCloud 리컨실 배포(콘솔 API, PAT 인증)
|
|
TAG="$TAG" python3 scripts/yakcloud_deploy.py yakcloud.yaml
|