@@ -6,7 +6,8 @@
|
|||||||
#
|
#
|
||||||
# 部署(推送到 main/master 时):在仓库「工作流 → 密钥」中配置
|
# 部署(推送到 main/master 时):在仓库「工作流 → 密钥」中配置
|
||||||
# SSH_PRIVATE_KEY DEPLOY_HOST DEPLOY_USER DEPLOY_PATH
|
# SSH_PRIVATE_KEY DEPLOY_HOST DEPLOY_USER DEPLOY_PATH
|
||||||
# DEPLOY_PATH 为 Nginx root,如 /var/www/chat-one-web;rsync 会把 dist/ 下文件同步到该目录。
|
# DEPLOY_PATH 为站点父目录;实际发布目录为 ${DEPLOY_PATH}/chat.alboped.com(与 Nginx root 一致)。
|
||||||
|
# 使用 tar|ssh 推送,远端无需安装 rsync(rsync 会要求在服务器上也存在 rsync 命令)。
|
||||||
|
|
||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
@@ -56,8 +57,8 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
run: yarn build
|
run: yarn build
|
||||||
|
|
||||||
# 直连 deb.debian.org 在国内 Runner 上常极慢或卡住;换镜像并限制超时
|
# 仅需 SSH 客户端;直连 deb.debian.org 在国内 Runner 上常极慢,换镜像并限制超时
|
||||||
- name: Install rsync and OpenSSH client
|
- name: Install OpenSSH client
|
||||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
@@ -71,9 +72,9 @@ jobs:
|
|||||||
"$f"
|
"$f"
|
||||||
done
|
done
|
||||||
apt-get -o Acquire::http::Timeout=30 -o Acquire::https::Timeout=30 -o Acquire::Retries=2 update
|
apt-get -o Acquire::http::Timeout=30 -o Acquire::https::Timeout=30 -o Acquire::Retries=2 update
|
||||||
apt-get install -y --no-install-recommends rsync openssh-client
|
apt-get install -y --no-install-recommends openssh-client
|
||||||
|
|
||||||
- name: Deploy to Nginx (rsync)
|
- name: Deploy to Nginx (tar over SSH)
|
||||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
||||||
env:
|
env:
|
||||||
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
@@ -82,12 +83,14 @@ jobs:
|
|||||||
DEPLOY_PATH: ${{ vars.DEPLOY_PATH }}
|
DEPLOY_PATH: ${{ vars.DEPLOY_PATH }}
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
|
: "${DEPLOY_PATH:?DEPLOY_PATH is not set}"
|
||||||
|
REMOTE_ROOT="${DEPLOY_PATH}/chat.alboped.com"
|
||||||
mkdir -p ~/.ssh
|
mkdir -p ~/.ssh
|
||||||
chmod 700 ~/.ssh
|
chmod 700 ~/.ssh
|
||||||
echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_deploy
|
echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_deploy
|
||||||
chmod 600 ~/.ssh/id_deploy
|
chmod 600 ~/.ssh/id_deploy
|
||||||
ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts
|
ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts
|
||||||
rsync -avz --delete \
|
SSH=(ssh -i ~/.ssh/id_deploy -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes)
|
||||||
-e "ssh -i ~/.ssh/id_deploy -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes" \
|
# 清空发布目录再解压,效果类似 rsync --delete;远端只需 tar,无需 rsync
|
||||||
dist/ \
|
"${SSH[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "mkdir -p '${REMOTE_ROOT}' && find '${REMOTE_ROOT}' -mindepth 1 -delete"
|
||||||
"${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/chat.alboped.com/"
|
tar czf - -C dist . | "${SSH[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "tar xzf - -C '${REMOTE_ROOT}'"
|
||||||
|
|||||||
Reference in New Issue
Block a user