fix(ci): jar 전송을 scp→ssh(cat)로 변경 + 접속 확인
최신 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:
@@ -50,11 +50,13 @@ jobs:
|
|||||||
ssh-keyscan -p "$PORT" "$DEPLOY_HOST" >> ~/.ssh/known_hosts 2>/dev/null
|
ssh-keyscan -p "$PORT" "$DEPLOY_HOST" >> ~/.ssh/known_hosts 2>/dev/null
|
||||||
SSH="ssh -p $PORT -i $HOME/.ssh/id_deploy -o StrictHostKeyChecking=yes"
|
SSH="ssh -p $PORT -i $HOME/.ssh/id_deploy -o StrictHostKeyChecking=yes"
|
||||||
|
|
||||||
JAR=$(ls build/libs/*.jar | grep -v -- '-plain.jar' | head -n1)
|
$SSH -o ConnectTimeout=10 "$DEPLOY_USER@$DEPLOY_HOST" "echo ok" >/dev/null \
|
||||||
echo "▶ [PROD] $JAR → $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_JAR_PATH"
|
|| { echo "::error::SSH 접속 실패 — 공개키/계정/포트 확인"; exit 1; }
|
||||||
|
|
||||||
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "mkdir -p \"\$(dirname '$DEPLOY_JAR_PATH')\""
|
JAR=$(ls build/libs/*.jar | grep -v -- '-plain.jar' | head -n1)
|
||||||
scp -P "$PORT" -i "$HOME/.ssh/id_deploy" "$JAR" "$DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_JAR_PATH.new"
|
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" "\
|
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "\
|
||||||
mv -f '$DEPLOY_JAR_PATH.new' '$DEPLOY_JAR_PATH'; \
|
mv -f '$DEPLOY_JAR_PATH.new' '$DEPLOY_JAR_PATH'; \
|
||||||
docker compose -f '$COMPOSE_FILE' up -d --force-recreate api; \
|
docker compose -f '$COMPOSE_FILE' up -d --force-recreate api; \
|
||||||
|
|||||||
@@ -54,13 +54,15 @@ jobs:
|
|||||||
ssh-keyscan -p "$PORT" "$DEPLOY_HOST" >> ~/.ssh/known_hosts 2>/dev/null
|
ssh-keyscan -p "$PORT" "$DEPLOY_HOST" >> ~/.ssh/known_hosts 2>/dev/null
|
||||||
SSH="ssh -p $PORT -i $HOME/.ssh/id_deploy -o StrictHostKeyChecking=yes"
|
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)
|
$SSH -o ConnectTimeout=10 "$DEPLOY_USER@$DEPLOY_HOST" "echo ok" >/dev/null \
|
||||||
echo "▶ $JAR → $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_JAR_PATH"
|
|| { echo "::error::SSH 접속 실패 — 공개키(authorized_keys)/계정/포트 확인"; exit 1; }
|
||||||
|
|
||||||
# 원자적 교체: 임시파일 업로드 후 mv (실행 중 파일 손상 방지)
|
JAR=$(ls build/libs/*.jar | grep -v -- '-plain.jar' | head -n1)
|
||||||
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "mkdir -p \"\$(dirname '$DEPLOY_JAR_PATH')\""
|
echo "▶ 전송: $(basename "$JAR") ($(du -h "$JAR" | cut -f1))"
|
||||||
scp -P "$PORT" -i "$HOME/.ssh/id_deploy" "$JAR" "$DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_JAR_PATH.new"
|
|
||||||
|
# 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" "\
|
$SSH "$DEPLOY_USER@$DEPLOY_HOST" "\
|
||||||
mv -f '$DEPLOY_JAR_PATH.new' '$DEPLOY_JAR_PATH'; \
|
mv -f '$DEPLOY_JAR_PATH.new' '$DEPLOY_JAR_PATH'; \
|
||||||
docker compose -f '$COMPOSE_FILE' up -d --force-recreate dev-api; \
|
docker compose -f '$COMPOSE_FILE' up -d --force-recreate dev-api; \
|
||||||
|
|||||||
Reference in New Issue
Block a user