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

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

前言

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 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容