Github pages jekyll 插件不支持怎么办
花了一下午的时间,将博客的分页,分类功能加上了。结果发现 github pages 不支持,还不能自己安装 jekyll 的插件。然后头大了。
这片文章记录了如何解决这个麻烦。
github pages 插件别瞎用
当你觉得你完美解决了写博客的问题的时候,就发现问题了。
下午找到一个不错的分页插件:jekyll-paginate-v2, 搞定了 分页,tags 功能,本地渲染出来很不错,甚合我意。
推送之后,发现了蛋疼的事情:所有的列表页面都是空的。
Actions 也都正常,调查半天才发现,github pages 不支持 jekyll-paginate-v2。
这是他支持的:https://pages.github.com/versions/
circleci 集成
那只能用第三方 CI 工具了。用 gitlab ci 肯定是可以的。
现在试试 circleci。 下面记录了过程:
step 1. 创建新分支
创建 cloudbeer.github.io 新分支:soruce。
step 2. 添加 circleci config 文件
在新分支里添加文件:.circleci/config.yml
,内容如下:
version: 2
jobs:
deploy:
docker:
- image: cimg/ruby:2.7.4
environment:
USER_NAME: cloudbeer
USER_EMAIL: cloudbeer@gmail.com
steps:
- checkout
- restore_cache:
keys:
- rubygems-v1-{{ checksum "Gemfile.lock" }}
- rubygems-v1-fallback
- run:
name: Bundle Install
command: bundle install
- save_cache:
paths:
- vendor/bundle
key: rubygems-v1-{{ checksum "Gemfile.lock" }}
- run:
name: Jekyll Build
command: JEKYLL_ENV=production bundle exec jekyll build
- deploy:
name: Deploy Release to GitHub
command: |
if [ $CIRCLE_BRANCH == 'source' ]; then
bash .circleci/deploy.sh
fi
workflows:
version: 2
build:
jobs:
- deploy:
filters:
branches:
only:
- source
代码的意思大概是:
- 使用 ruby 镜像,安装依赖,build
- 然后调用 deploy 脚本
step 3. doploy 脚本
添加脚本 .circleci/deploy.sh
,内容如下:
git config user.name "$USER_NAME"
git config user.email "$USER_EMAIL"
git checkout main
git pull origin main
find . -maxdepth 1 ! -name '_site' ! -name '.git' ! -name '.gitignore' ! -name '.circleci' -exec rm -rf {} \;
mv _site/* .
rm -R _site/
git add -fA
git commit --allow-empty -m "$(git log source -1 --pretty=%B)"
git remote set-url origin https://cloudbeer:${GITHUB_PWD}@github.com/cloudbeer/cloudbeer.github.io.git
git push -f origin main
echo "deployed successfully"
代码的大概意思是:
- 把分支切到 main,把编译目标 _site 目录里面的文件拷贝到根目录。
- 把代码推回去。
- github pages 里设置的是 main 分支的 / 目录,此时 main 下面都是纯 html 页面。
- 稍等一会儿 github pages 发布完成就可以看到结果了。
上面的代码有个地方需要改进,就是这行:
git remote set-url origin https://cloudbeer:${GITHUB_PWD}@github.com/cloudbeer/cloudbeer.github.io.git
推送的时候发现没有权限,先用这个土办法了。这里的 GITHUB_PWD 需要去生产,我把申请到的结果存入了 circleci 的环境变量里。
还需要改进的有:
github 在发现有新的 push 之后 还是在运行 jekyll build,在此种情况下,应该直接部署就好。后面再看看咋搞。
github pages 随便搞
了解了 github pages 的规则,就可以用任意支持 markdown 的框架来做你的博客了,前提是他静态页面生产器。
发现 circleci 在第二次 build 的时候很快啊,比 gitlab 快很多。可能是一个默认缓存,一个没默认缓存的缘故吧。
本文代码参考了如下俩:
How to Deploy to Github Pages Using CircleCI 2.0 + Custom Jekyll Dependencies