deploy_server.py itms 블록의 dev health 게이트 통과 후 호출. front war tar-over-ssh → prod(itms.wise.ai.kr) 재기동 → prod health. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
38 lines
1.5 KiB
Bash
38 lines
1.5 KiB
Bash
#!/usr/bin/env bash
|
|
# ITMS 운영 승격 (dev -> prod, front-only, 무빌드 tar-over-ssh).
|
|
# deploy_server.py itms 블록의 dev health 게이트 통과 후에만 호출된다.
|
|
# 실패 시 exit!=0 (운영 미반영 — 직전 war 유지).
|
|
set -euo pipefail
|
|
|
|
KEY=/var/lib/jenkins/.ssh/id_ed25519_prod
|
|
PROD_HOST=211.37.173.197
|
|
PROD_PORT=9271
|
|
PROD_DOMAIN=itms.wise.ai.kr
|
|
SRC_WAR=/opt/itms/artifacts/current/itms-front.war
|
|
H=$(basename "$(readlink -f /opt/itms/artifacts/current)")
|
|
SSH="ssh -p ${PROD_PORT} -i ${KEY} -o StrictHostKeyChecking=no -o ConnectTimeout=20"
|
|
|
|
echo "[prod-promote] target=${PROD_HOST} hash=${H}"
|
|
|
|
# 1) prod 디렉터리 준비
|
|
${SSH} root@${PROD_HOST} "mkdir -p /opt/itms/artifacts/${H} /etc/itms"
|
|
|
|
# 2) front war 전송 (무빌드)
|
|
scp -P ${PROD_PORT} -i ${KEY} -o StrictHostKeyChecking=no "${SRC_WAR}" \
|
|
root@${PROD_HOST}:/opt/itms/artifacts/${H}/itms-front.war
|
|
|
|
# 3) 심볼릭 갱신 + 재기동 + 헬스 게이트 (Host 헤더 필수)
|
|
${SSH} root@${PROD_HOST} "
|
|
ln -sfn /opt/itms/artifacts/${H} /opt/itms/artifacts/current &&
|
|
systemctl restart itms-front &&
|
|
for i in \$(seq 1 30); do
|
|
sleep 3
|
|
code=\$(curl -s -m5 -o /dev/null -w '%{http_code}' -H 'Host: ${PROD_DOMAIN}' http://127.0.0.1:11020/)
|
|
if [ \"\$code\" = '200' ] || [ \"\$code\" = '301' ] || [ \"\$code\" = '302' ]; then
|
|
echo \"[prod-promote] health OK (\$code)\"; exit 0
|
|
fi
|
|
done
|
|
echo '[prod-promote] health FAIL'; systemctl is-active itms-front; exit 1
|
|
"
|
|
echo "[prod-promote] done"
|