时隔快一年了终于想起来把blog整理一下了……
于是做了个迁移,并记录一些过程中出现的问题和思路。
[补档]关于图片插入
主要是需要解决两个问题:1.图片的管理;2.图片引用方式
主要参考了hexo文档的资源文件夹 ^1 相关内容,在config.yml中开启资源文件夹:
| 1 | post_asset_folder: true | 
当资源文件管理功能打开后,Hexo将会在你每一次通过
hexo new [layout] <title>命令创建新文章时自动创建一个文件夹。这个资源文件夹将会有与这个文章文件一样的名字。将所有与你的文章有关的资源放在这个关联文件夹中之后,你可以通过相对路径来引用它们,这样你就得到了一个更简单而且方便得多的工作流。
然后使用标签插入图片
| 1 | {% asset_img example.jpg This is an example image %} | 
通过这种方式,图片将会同时出现在文章和主页以及归档页中。在上述的情况下,图片资源引用的相对路径的根目录就是对应文章配套的assets文件夹。
这种方法的缺点是标准markdown 编辑器就无法识别图片了。
[补档]关于主题的使用
使用的主题是melody。
注意现在很多的主题都支持 npm 安装,然后添加主题配置文件(如_config.melody.yml)实现配置。
blog迁移:GitHub-Actions的使用
之前是为了保证github.io的其他功能(图片站和小工具网页)导致整个repo的结构异常混乱:
于是采用了诡异的操作:在项目文件下建立.blog-src/文件夹储存hexo工程,重定向工程输出到blog/;写自动跳转index.html从 https://dwcarrot.github.io/ 自动跳转至https://dwcarrot.github.io/blog
思来想去还是把blog源文件放在单独的repo下,并使用自动化构建器进行自动发布。
于是需要解决的问题是:如何使得自动git发布能够只修改外部repo的一个子文件夹,并且外部repo自身其他的更新不会导致push失败?
用三个repo的方案 ^2 最后还是被放弃了 刷Commit是坏文明;用三个repo的主要原因是  hexo-deployer-git好像不支持发布到子文件夹。那么有没有能够支持更新到子文件夹的插件呢?不知道
不过其实hexo官方英文版给的方案就不是用hexo-deployer-git的^3,而是基于peaceiris/actions-gh-pages。后者的确是支持发布到子文件夹的! 问题解决。
其实问题在于hexo官方中文版页面和英文版给的方案居然不一样
最后方案是这样的:
- Github新建一个 - blogrepo 用于存储blog源文件;这里将该repo改为private。
- 生成一对新密钥对用于自动化发布: - 在当前目录生成一个 ssh 密钥对。请勿在 repo 文件夹生成并上传到 GitHub - 1 - ssh-keygen -f ./hexo-deploy - 在 - blogrepo settings 添加 Depoly keys,Title 为- HEXO_DEPLOY_PUB,Key 为- hexo-deploy.pub文件内的内容,勾选 Allow write access。- 在 - blog-sourcerepo settings 添加 Secrets。- Name - Value - GIT_EMAIL - 填写 Git 邮箱(执行 - git config user.email查看)- GIT_USER - 填写 Git 用户名(执行 - git config user.name查看)- BLOG_DEPLOY_KEY - 填写 - hexo-deploy文件内的内容
- blog内容的迁移和自动化脚本编写。 - 这里先放出 - Github Actions脚本。在blog源码repo下新建- .github/workflows/deploy-blog.yml:- 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- # This is a basic workflow to help you get started with Actions 
 name: Deploy Blog Into Github Pages
 # Controls when the workflow will run
 on:
 # Triggers the workflow on push or pull request events but only for the master branch
 push:
 branches: [ master ]
 # Allows you to run this workflow manually from the Actions tab
 workflow_dispatch:
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
 # This workflow contains a single job called "deploy"
 deploy:
 # The type of runner that the job will run on
 runs-on: ubuntu-latest
 # Steps represent a sequence of tasks that will be executed as part of the job
 steps:
 # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
 - uses: actions/checkout@v2
 
 - name: Install Node
 uses: actions/setup-node@v2
 with:
 node-version: '14.x'
 - name: Cache node modules
 uses: actions/cache@v2
 env:
 cache-name: cache-node-modules
 with:
 # npm cache files are stored in `~/.npm` on Linux/macOS
 path: ~/.npm
 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: Install Dependencies
 run: npm install
 - name: Build
 run: npm run build
 
 - name: Deploy
 uses: peaceiris/actions-gh-pages@v3
 with:
 deploy_key: ${{ secrets.BLOG_DEPLOY_KEY }}
 publish_dir: ./public
 external_repository: DWCarrot/DWCarrot.github.io
 publish_branch: master
 destination_dir: blog- 注意几个要点: - 可以注意到步骤中没有显式安装hexo的步骤。这是因为自动构建时是局部安装hexo的,受到blog source下的package.json控制。
 本次做的是迁移,就是之前已有的blog源文件是包含这个package.json的,迁移时把有效文件粘过来就行。如果是要重开一个全新的blog,现在能想到的方法是:全局hexo init <blog-name>先初始化一个模板然后整体复制过去。
 在迁移完成后的blog源文件中,可以执行npm install->npm run build|./node_modules/bin/hexo generate来进行构建,不用全局的hexo,这样可以测试在Github Actions上能不能正常工作。
- 步骤Deploy中参数说明:- deploy_key:后面的变量就是blog源文件repo的secrets 设置的变量,即那个密钥私钥;
- publish_dir:与- _config.yml中- public_dir对应;
- external_repository和- publish_branch:部署目标repo及branch;
- destination_dir:部署目标repo的目标子文件夹。注意因为用到子文件夹所以- _config.yml的- root还是要保持一致的;
 
 
- 可以注意到步骤中没有显式安装
TODO
- Github Actions 里面 actions/cache的正确使用方式
- 把小工具也迁移出去
