#github #GitHubPages #hexo
因为懒所以懒
之前不是用Obsidian的git插件实现了自动同步,我转念一想,干脆搞个GitHub Aciton自动发布到博客好了,免得我自己再手动输一行命令去发布多累啊
我使用的架构是这样的,由于先前我们Obsidian使用用来备份的仓库和我们的GitHub Page仓库不是同一个,而且我们也是直接把文章的源文件放到了main分支中,因此我决定将Hexo相关配置放到ObsidanNote仓库的Hexo分支,然后让GitHub Action去调用就行了。
首先我们需要搞一个Token
因为我们需要在 Hexo 项目仓库 执行 Github Actions 向 username.github.io 仓库推送代码,由于 Github 权限限制,我们需要在 GitHub 账户中创建一个具有足够权限的个人访问令牌(Personal Access Token,简称 PAT)。这个令牌需要有足够的权限来修改仓库。
点击右上角头像 -> 打开 Settings -> 左边栏滚到最后找到 Develop Setting 打开,如图
找到 Personal Access Token 点击 Tokens(classic) -> 选择 Generate new token (classic) ,如图
然后随便新建一个好了,只要有读写仓库的权限就行。
将生成的 PAT 添加到你的博客源代码仓库的 Secrets,也就是我们部署GitHub Action的仓库,名字填入 PERSONAL_TOKEN ,后面会用到这个变量名。
然后在我们存放Hexo配置的分支里面创建一个 .github/workflows 文件夹(如果尚未存在),然后新建一个yaml文件用于定义Github Action工作流。以下是我的yaml文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| run-name: Deploy Hexo to GitHub Pages on: push: branches: - main
jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout hexo branch (Hexo environment) uses: actions/checkout@v3 with: ref: hexo path: blog
- name: Checkout articles from main branch (Blog folder) uses: actions/checkout@v3 with: ref: main path: main-temp
- name: Check if Blog folder exists run: ls main-temp/Blog
- name: Move articles to _posts run: mv main-temp/Blog/* blog/source/_posts/
- name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '16'
- name: Cache dependencies uses: actions/cache@v3 with: path: blog/node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-
- name: Install dependencies run: npm install working-directory: ./blog
- name: Install Hexo CLI run: npm install -g hexo-cli working-directory: ./blog
- name: Generate static pages run: hexo generate working-directory: ./blog
- name: List generated files run: ls -R ./blog/public
- name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: personal_token: ${{ secrets.PERSONAL_TOKEN }} publish_dir: ./blog/public external_repository: <your repo> publish_branch: main
|
这里我的配置比较特殊,因为我对笔记文件进行了分类,然后只有Blog目录下的文件会进行发布,因此我们只需要看Blog目录是否发生改变。这个可以根据自己的需要进行修改。
然后我们将这些文件提交至GitHub上,触发特定条件就可以触发GitHub Action工作流实现自动部署