前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HEXO系列教程 | 使用GitHub Actions部署Hexo / GitHub Pages | 全流程详细介绍

HEXO系列教程 | 使用GitHub Actions部署Hexo / GitHub Pages | 全流程详细介绍

作者头像
夜梦星尘
发布2024-08-20 19:25:04
2520
发布2024-08-20 19:25:04
举报
文章被收录于专栏:夜梦星尘的折腾日记

1. 前言

夜梦敢说这篇文章和HEXO系列教程 | 使用GitHub部署静态博客HEXO | 小白向教程是全网最详细的Hexo部署教程之二了!如果遇到问题你可以通过邮箱联系夜梦,夜梦看到了就会回复的!当然,再详细的文章也可能有错误,大家如果发现文章有问题的话请联系夜梦哦!

夜梦曾在HEXO系列教程 | 使用GitHub部署静态博客HEXO | 小白向教程中介绍了如何借助GitHub Pages来部署Hexo,但是这篇文章介绍的方法只能够将public文件夹中的内容上传到GitHub(就是纯静态HTML),因此无法使用Qexo来进行动态管理。省流:默认部署方式是Deploy from a branch(以分支部署):

所以这篇文章,夜梦将介绍部署Hexo的另一种方式——借助GitHub Actions部署GitHub Pages。本地部署的方法和夜梦之前写的文章一样,所以这里就直接复制了~

具体可以看官方文档(说实在的这文档有点……一言难尽):在 GitHub Pages 上部署 Hexo | Hexo

2. 准备Hexo

部署Hexo可以参考夜梦的这篇文章的第2节至第5节只需要到第5节!!!):HEXO系列教程 | 使用GitHub部署静态博客HEXO | 小白向教程。因为流程一致,夜梦在这篇文章中不再赘述了。

接下来我们要做的就和夜梦前面写的这篇文章不一样了。前面这篇教程仅需要public/这个文件夹下的内容上传到GitHub中,而利用GitHub Actions部署则不需要上传public/这个文件夹。

简而言之,这篇文章介绍的方法,不需要你在本地生成public文件夹,也就是不需要执行hexo c/hexo g/hexo d等命令。当然夜梦建议你本地执行一下,先看看效果,然后再上传到github中。

3. 首次将gh-pages分支push到GitHub

在本地Hexo仓库(HEXO文件夹)打开git命令界面(Git Bash),初始化仓库

代码语言:javascript
复制
git init

切换到gh-pages分支:

代码语言:javascript
复制
git checkout -b gh-pages

添加文件到暂存区,将项目目录中的所有文件添加到 Git 的暂存区:

代码语言:javascript
复制
git add .

提交更改,提交所有添加的文件,生成一个提交记录:

代码语言:javascript
复制
git commit -m "这是第一次提交Hexo"

复制 GitHub 仓库的 URL: 在浏览器中打开你的 GitHub 仓库,点击 Code 按钮,然后复制仓库的 HTTPS 或 SSH 地址。

然后运行下面的命令,将本地仓库与GitHub仓库关联

代码语言:javascript
复制
git remote add origin <GitHub仓库的URL>

将本地仓库的内容推送到GitHub仓库gh-pages分支:

代码语言:javascript
复制
git push -u origin gh-pages

如果是第一次推送,这个命令会将本地分支与远程分支关联,并推送所有内容。

如果你的Github仓库中已经有文件了,那夜梦建议你直接强制推送本地仓库到GitHub中(运行过上面那行命令就不要运行下面这行命令了!):

代码语言:javascript
复制
git push --force origin gh-pages

4. 创建 Workflow

我们在GitHub的Hexo仓库中,找到Settings->Pages->Build and deployment,将source选择为GitHub Actions

等待它设置完成以后,我们选择Create your own(自己创建一个workflow文件)。在配置这个文件之前,我们先查看一下我们自己电脑上的Node.js版本。

然后将Node.js的版本替换为上个步骤中记下的版本,具体位置可以看夜梦的图示:

修改完成以后,就可以把这个配置文件复制到workflow配置文件中了(记得命名为pages.yml)。

代码语言:javascript
复制
name: Pages

on:
  push:
    branches:
      - gh-pages # 我们设置的分支是 gh-pages

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          # If your repository depends on submodule, please see: https://github.com/actions/checkout
          submodules: recursive
      - name: Use Node.js 20
        uses: actions/setup-node@v4
        with:
          # Examples: 20, 18.19, >=16.20.2, lts/Iron, lts/Hydrogen, *, latest, current, node
          # Ref: https://github.com/actions/setup-node#supported-version-syntax
          node-version: "20.11.1"
      - name: Cache NPM dependencies
        uses: actions/cache@v4
        with:
          path: node_modules
          key: ${{ runner.OS }}-npm-cache
          restore-keys: |
            ${{ runner.OS }}-npm-cache
      - name: Install Dependencies
        run: npm install
      - name: Build
        run: npm run build
      - name: Upload Pages artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./public
  deploy:
    needs: build
    permissions:
      pages: write
      id-token: write
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

5. 再次将gh-pages分支push到GitHub

5.1 第二次push

由于我们在第4节中创建了workflow文件,而我们本地没有,所以我们需要pull一下,把GitHub上建立的workflow拉到本地。

代码语言:javascript
复制
git pull origin gh-pages

然后再进行第二次推送。添加所有更改的文件(当然你也可以选着添加,夜梦这里就不介绍了):

代码语言:javascript
复制
git add .

提交你所做的更改(方便看,相当于就是备注):

代码语言:javascript
复制
git commit -m "夜梦又更新hexo了"

推送:

代码语言:javascript
复制
git push origin gh-pages

5.2 第三次以及以后的push

添加所有更改的文件(当然你也可以选着添加,夜梦这里就不介绍了):

代码语言:javascript
复制
git add .

提交你所做的更改(方便看,相当于就是备注):

代码语言:javascript
复制
git commit -m "夜梦又更新hexo了"

推送:

代码语言:javascript
复制
git push origin gh-pages

6. 常见报错

下面的报错是夜梦在尝试的时候遇到的,也给大家分享一下,一起避坑……

代码语言:javascript
复制
error: src refspec gh-pages does not match any

解决方法如下(由ChatGPT生成,夜梦已经验证了可行性):

1、本地没有创建 gh-pages 分支 你可能正在尝试将 gh-pages 分支推送到远程仓库,但本地并没有创建该分支。 解决方法:

  1. 创建 gh-pages 分支: 你可以通过以下命令从现有的分支(例如 mainmaster)创建 gh-pages 分支:
代码语言:txt
复制
git checkout -b gh-pages

这会基于当前分支创建一个新的 gh-pages 分支,并切换到该分支。

  1. 推送 gh-pages 分支到远程仓库:
代码语言:txt
复制
git push origin gh-pages

2、本地分支还没有任何提交

如果你已经创建了 gh-pages 分支,但没有任何提交记录,那么 Git 会认为该分支不存在,从而导致错误。

解决方法:

  1. gh-pages 分支上提交一些更改:
代码语言:txt
复制
git checkout gh-pages    touch index.html  # 创建一个简单的文件    git add index.html    git commit -m "Initial commit on gh-pages"
  1. 推送 gh-pages 分支到远程仓库:
代码语言:txt
复制
git push origin gh-pages

3、推送分支的名称错误

你可能错误地指定了分支名称,例如拼写错误或分支不存在。

解决方法:

  1. 检查分支名称: 确保你推送的分支名称拼写正确,并且该分支在本地已经存在。
代码语言:txt
复制
git branch  # 查看所有本地分支
  1. 推送正确的分支: 如果你的分支名称是正确的并且存在,确保使用正确的命令推送:
代码语言:txt
复制
git push origin gh-pages

通过这些步骤,你应该能够解决 src refspec gh-pages does not match any 错误并成功推送到远程仓库。

7. 进阶使用

配置YUN主题:

发布文章:

使用自己的域名:

8. 声明

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=ix9n9rnuq63i

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-8-12 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. 准备Hexo
  • 3. 首次将gh-pages分支push到GitHub
  • 4. 创建 Workflow
  • 5. 再次将gh-pages分支push到GitHub
    • 5.1 第二次push
      • 5.2 第三次以及以后的push
      • 6. 常见报错
      • 7. 进阶使用
      • 8. 声明
      相关产品与服务
      云开发 CloudBase
      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档