fix(ci): jar 전송을 scp→ssh(cat)로 변경 + 접속 확인
Deploy (dev) / deploy (push) Has been cancelled
CI / build (push) Failing after 15m10s

최신 OpenSSH scp(SFTP 모드)의 'open: no such file' 경로 이슈 회피.
ssh stdin 으로 jar 전송, 배포 전 SSH 접속 체크 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
sb
2026-07-11 18:10:34 +09:00
parent f6a54d9f33
commit 1cdff136c3
2 changed files with 14 additions and 10 deletions
+6 -4
View File
@@ -50,11 +50,13 @@ jobs:
ssh-keyscan -p "$PORT" "$DEPLOY_HOST" >> ~/.ssh/known_hosts 2>/dev/null
SSH="ssh -p $PORT -i $HOME/.ssh/id_deploy -o StrictHostKeyChecking=yes"
JAR=$(ls build/libs/*.jar | grep -v -- '-plain.jar' | head -n1)
echo "▶ [PROD] $JAR → $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_JAR_PATH"
$SSH -o ConnectTimeout=10 "$DEPLOY_USER@$DEPLOY_HOST" "echo ok" >/dev/null \
|| { echo "::error::SSH 접속 실패 — 공개키/계정/포트 확인"; exit 1; }
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "mkdir -p \"\$(dirname '$DEPLOY_JAR_PATH')\""
scp -P "$PORT" -i "$HOME/.ssh/id_deploy" "$JAR" "$DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_JAR_PATH.new"
JAR=$(ls build/libs/*.jar | grep -v -- '-plain.jar' | head -n1)
echo "▶ [PROD] 전송: $(basename "$JAR") ($(du -h "$JAR" | cut -f1))"
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "mkdir -p \"\$(dirname '$DEPLOY_JAR_PATH')\" && cat > '$DEPLOY_JAR_PATH.new'" < "$JAR"
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "\
mv -f '$DEPLOY_JAR_PATH.new' '$DEPLOY_JAR_PATH'; \
docker compose -f '$COMPOSE_FILE' up -d --force-recreate api; \
+8 -6
View File
@@ -54,13 +54,15 @@ jobs:
ssh-keyscan -p "$PORT" "$DEPLOY_HOST" >> ~/.ssh/known_hosts 2>/dev/null
SSH="ssh -p $PORT -i $HOME/.ssh/id_deploy -o StrictHostKeyChecking=yes"
# bootJar 산출물 (plain jar 제외 — 실제로 bootJar 만 돌려 하나뿐이지만 방어적으로)
JAR=$(ls build/libs/*.jar | grep -v -- '-plain.jar' | head -n1)
echo "▶ $JAR → $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_JAR_PATH"
# 접속 확인
$SSH -o ConnectTimeout=10 "$DEPLOY_USER@$DEPLOY_HOST" "echo ok" >/dev/null \
|| { echo "::error::SSH 접속 실패 — 공개키(authorized_keys)/계정/포트 확인"; exit 1; }
# 원자적 교체: 임시파일 업로드 후 mv (실행 중 파일 손상 방지)
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "mkdir -p \"\$(dirname '$DEPLOY_JAR_PATH')\""
scp -P "$PORT" -i "$HOME/.ssh/id_deploy" "$JAR" "$DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_JAR_PATH.new"
JAR=$(ls build/libs/*.jar | grep -v -- '-plain.jar' | head -n1)
echo "▶ 전송: $(basename "$JAR") ($(du -h "$JAR" | cut -f1))"
# jar 전송: scp(SFTP) 경로 이슈 회피 위해 ssh stdin(cat) 사용. 임시파일 후 mv(원자적 교체).
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "mkdir -p \"\$(dirname '$DEPLOY_JAR_PATH')\" && cat > '$DEPLOY_JAR_PATH.new'" < "$JAR"
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "\
mv -f '$DEPLOY_JAR_PATH.new' '$DEPLOY_JAR_PATH'; \
docker compose -f '$COMPOSE_FILE' up -d --force-recreate dev-api; \