Merge pull request #28 from penghanyuan/fix/deploy-ssh-timeout-retries
fix(ci): retry SSH setup steps in remote candidate preparation
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