fix(ci): retry SSH setup steps in remote candidate preparation
Retry remote docker login, bootstrap SSH commands, and scp uploads to handle transient connection timeout and banner exchange failures in GitHub runner environments. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
56
.github/workflows/docker-build-deploy.yml
vendored
56
.github/workflows/docker-build-deploy.yml
vendored
@@ -264,15 +264,39 @@ jobs:
|
||||
echo "镜像标签: $IMAGE_TAG"
|
||||
echo "部署目录: $COMPOSE_DIR/api"
|
||||
|
||||
echo "$ALIYUN_CR_PASSWORD" | ssh ${SSH_COMMON_OPTS:-} -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" \
|
||||
"docker login $REGISTRY --username=$ALIYUN_CR_USERNAME --password-stdin"
|
||||
LOGIN_OK=0
|
||||
for i in 1 2 3; do
|
||||
echo "远端 docker login 尝试 ${i}/3..."
|
||||
if echo "$ALIYUN_CR_PASSWORD" | ssh ${SSH_COMMON_OPTS:-} -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" \
|
||||
"docker login $REGISTRY --username=$ALIYUN_CR_USERNAME --password-stdin"; then
|
||||
LOGIN_OK=1
|
||||
break
|
||||
fi
|
||||
sleep 3
|
||||
done
|
||||
if [ "$LOGIN_OK" -ne 1 ]; then
|
||||
echo "::error::远端 docker login 连续 3 次失败。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ssh ${SSH_COMMON_OPTS:-} -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "
|
||||
set -euo pipefail
|
||||
mkdir -p '$COMPOSE_DIR/api'
|
||||
mkdir -p '$COMPOSE_DIR/api/backups'
|
||||
docker network inspect api_life-echo-network >/dev/null 2>&1 || docker network create api_life-echo-network
|
||||
"
|
||||
BOOTSTRAP_OK=0
|
||||
for i in 1 2 3; do
|
||||
echo "远端目录与网络初始化尝试 ${i}/3..."
|
||||
if ssh ${SSH_COMMON_OPTS:-} -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "
|
||||
set -euo pipefail
|
||||
mkdir -p '$COMPOSE_DIR/api'
|
||||
mkdir -p '$COMPOSE_DIR/api/backups'
|
||||
docker network inspect api_life-echo-network >/dev/null 2>&1 || docker network create api_life-echo-network
|
||||
"; then
|
||||
BOOTSTRAP_OK=1
|
||||
break
|
||||
fi
|
||||
sleep 3
|
||||
done
|
||||
if [ "$BOOTSTRAP_OK" -ne 1 ]; then
|
||||
echo "::error::远端目录与网络初始化连续 3 次失败。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${{ needs.resolve-deploy-target.outputs.target }}" = "prod" ]; then
|
||||
ENV_SRC="api/.env.production"
|
||||
@@ -298,8 +322,20 @@ jobs:
|
||||
fi
|
||||
|
||||
echo "上传候选 compose 与环境文件..."
|
||||
scp ${SSH_COMMON_OPTS:-} -P "$SSH_PORT" ./api/docker-compose.yml "$SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/docker-compose.candidate.yml"
|
||||
scp ${SSH_COMMON_OPTS:-} -P "$SSH_PORT" "$ENV_SRC" "$SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/.env.candidate"
|
||||
SCP_OK=0
|
||||
for i in 1 2 3; do
|
||||
echo "上传候选文件尝试 ${i}/3..."
|
||||
if scp ${SSH_COMMON_OPTS:-} -P "$SSH_PORT" ./api/docker-compose.yml "$SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/docker-compose.candidate.yml" \
|
||||
&& scp ${SSH_COMMON_OPTS:-} -P "$SSH_PORT" "$ENV_SRC" "$SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/.env.candidate"; then
|
||||
SCP_OK=1
|
||||
break
|
||||
fi
|
||||
sleep 3
|
||||
done
|
||||
if [ "$SCP_OK" -ne 1 ]; then
|
||||
echo "::error::上传候选文件连续 3 次失败。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PULL_OK=0
|
||||
for i in 1 2 3; do
|
||||
|
||||
Reference in New Issue
Block a user