利用 GitHub Actions 实现 hexo 自动部署到远程服务器

AI智能摘要
GitHub Actions 实现 Hexo 自动部署教程。文章介绍通过 GitHub Actions 的工作流自动化部署 Hexo 博客至 GitHub Pages 和远程服务器。工作流触发在 main 分支推送时,包含安装 Node、Hexo 依赖及配置环境变量等步骤。最后部署部分使用 rsync 将静态文件从 public 目录同步到服务器指定路径。需在服务器上生成 SSH 密钥,并将私钥内容添加到 GitHub 项目 secrets。文章强调整个流程能节省大量时间。
— 此摘要由AI分析文章内容生成,仅供参考。

前言

GitHub Actions 是 GitHub 推出的可用于自动化构建,测试和部署项目的平台,可以通过创建工作流来自动化,自定义和执行软件开发工作流程. GitHub Actions 的具体用法有很多,本文仅介绍如何利用它来实现对 Hexo 项目的自动化部署.

准备工作

  • 本地已搭建好 Hexo 项目
  • 创建一个 GitHub 仓库用于存储你的 Hexo 项目源码
  • 创建一个 GitHub 仓库用于存储生成的静态页面文件 (如未主动创建,则Github会将生成的静态文件推送到项目源码的master分支)

代码

name: 自动部署
 # 当有改动推送到master分支时,启动Action
on:
  push:
    branches:
      - main
  release:
    types:
      - published

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 检查分支
        uses: actions/checkout@v3
        with:
          ref: main

      - name: 安装 Node
        uses: actions/setup-node@v3
        with:
          node-version: "20.x"

      - name: 安装 Hexo
        run: |
          export TZ='Asia/Shanghai'
          npm install hexo-cli -g

      - name: 缓存 Hexo
        id: cache-npm
        uses: actions/cache@v3
        env:
          cache-name: cache-node-modules
        with:
          path: node_modules
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-

      - name: 安装依赖
        if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
        run: |
          npm install gulp-cli -g #全局安装gulp
          npm install --save
   
      - name: 配置algolia环境变量
        run: |
          export ALGOLIA_ADMIN_API_KEY=…
          export HEXO_ALGOLIA_INDEXING_KEY=…
          
      - name: 生成静态文件
        run: |
          hexo clean
          hexo bangumi -u
          hexo cinema -u
          hexo generate
          hexo algolia
          hexo deploy
          gulp

      - name: 部署到Github
        run: |
          cd ./public
          git init
          git config --global user.name "username"
          git config --global user.email "e-mail"
          git add .
          git commit -m '${{ github.event.head_commit.message }}'
          git push --force --all https://username:github token@github.com/sucooer/sucooer.github.io.git
      - name: 部署到服务器
        uses: burnett01/rsync-deployments@5.2.1
        with:
          switches: -avzh
          path: public/
          remote_path: /root/docker/npm/
          remote_host: 服务器ip
          remote_port: 22
          remote_user: root
          remote_key: ${{ secrets.SERVER_KEY }}
图片[1]-利用 GitHub Actions 实现 hexo 自动部署到远程服务器-四次元拾光

文本中流程执行结果是将静态文件部署到个人服务器中去

最后部署部分脚本通过 ssh 上的 rsync 将文件部署到远程文件夹中,具体参数如下

  • switches:rsync 标志,例如:-avzr --delete
  • path:要上传文件地址,当前 hexo g 之后静态文件在 public/
  • remote_path:博客在服务器中的路径
  • remote_host:主机地址
  • remote_port:ssh 连接端口号
  • remote_user:要连接的用户
  • remote_key:服务器生成的密钥

服务器获取SSH连接密钥

登录服务器终端,输入命令 ssh-keygen

出现的提示内容一路回车,最终会在 ~/.ssh 生成公钥和私钥 id_rsa.pubid_rsa

将公钥 id_rsa.pub 复制到 authorized_keys

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

复制一份私钥内容填入secret

需要在远程主机上安装 rsync 命令,否则会同步失败 (不同 linux 版本均可用包管理器直接安装)

总结

本文中的工作流实现了在本地提交 Hexo 项目源码的时候自动部署至 GitHub Pages 及远程服务器主机的功能. 大大节省了时间.

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共2条

请登录后发表评论

    • 头像夏雨0
    • 头像ArcaneSniper0