Github action 静态文件github pages 和rsync 打包上传

19 min read
name: Deploy website on push

on:
  push:
    branches:
      - main

jobs:
  web-deploy:
    name: Deploy
    runs-on: ubuntu-latest
    steps:
      - name: Get latest code
        uses: actions/checkout@v3
        with:
          # 获取所有标记和分支的所有历史记录(updatetime 必须,否则每次都会变化)
          fetch-depth: 0
          # 如果你文档需要 Git 子模块,取消注释下一行
          # submodules: true

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn

      - name: Install dependencies
        run: yarn install --frozen-lockfile
      - name: Build website
        run: yarn build

      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@v4
        with:
          # 这是文档部署到的分支名称
          branch: gh-pages
          folder: build

      - name: Sync files
        uses: SamKirkland/FTP-Deploy-Action@4.3.3
        with:
          local-dir: build/
          server: ${{ secrets.ftp_host }}
          username: ${{ secrets.ftp_username }}
          password: ${{ secrets.ftp_password }}
          port: ${{ secrets.ftp_port }} # 建议更改默认的 21 端口
          timeout: 600000

改用 rsync

- name: Sync files
  run: rsync -rav -e ssh --delete ./build/ username@hostname:/path/to/remote/directory/
  env:
    SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}

其中,name 是这个步骤的名称。run 是要执行的命令,这里使用 rsync 命令将本地的 ./build/ 目录同步到远程服务器的 /path/to/remote/directory/ 目录中。

-rav 参数表示递归同步所有文件并保持文件权限、时间戳和所有权。

--delete 参数表示删除远程服务器上不存在的文件。

-e ssh 参数表示使用 ssh 连接。username 和 hostname 是远程服务器的登录凭据,

SSH_PRIVATE_KEY 是 SSH 私钥,需要在 GitHub Secrets 中添加。

注意:-e ssh 参数会在本地机器上使用 ssh 客户端连接到远程服务器。为了避免每次都需要输入密码或者手动确认 ssh 密钥,建议在本地机器上配置 SSH 密钥。

需要将本地机器上的公钥添加到远程服务器上的 ~/.ssh/authorized_keys 文件中,以便允许该机器使用 SSH 密钥连接到远程服务器。另外,需要在 GitHub Actions 中将 SSH 私钥添加到 Secrets 中,以便在执行 rsync 命令时使用。