将任何自定义插件/Gem 与托管在 Jekyll 博客的 GitHub 页面一起使用
这是您可以在 GitHub Pages 托管网站上使用任何自定义插件的方法。我在自己的博客上使用它,所以我 100% 确定它有效。基本思想是,您使用 TravisCI 在 staging 分支上构建自定义 Jekyll 站点,然后自动将其推送到为您的网站提供服务的 GitHubPages master 分支。下面是快速演练:
a) 您将 GitHub Pages 配置为从您的 master 分支的 docs 文件夹托管
b) 你添加并配置一个 staging 分支作为你的 repo 的默认分支,在那里你可以做你所有的本地工作,通过在这个分支上设置一个 git 标签来发布工作
c) 您使用_config.yml 文件将您的destination 目录设置为docs
# _config.yml
destination: docs
d) 为避免 Travis CI 的构建问题,您可以将 Gemfile.lock 添加到您的 .gitignore 文件,并将 docs 文件夹添加到您的本地 .git/info/exclude,因为您不想再推送它们了。从本地推送中排除 docs 文件夹是可选的,但对我来说效果最好。您可能还需要先删除Gemfile.lock,然后让 Travis CI 为所选 Docker 操作系统选择合适的版本,否则您可能会遇到很难修复的版本冲突。
e) 使用 Travis CI 部署到 production 又名您的实时站点,您可以添加 .travis.yml 文件:
language: ruby
rvm:
- 2.6.3
install:
- bundle install
script:
- JEKYLL_ENV="production" bundle exec jekyll build
deploy:
provider: script
script: bash script/deploy.sh
skip_cleanup: true
on:
tags: true
branch: staging
branches:
only:
- staging
- /\d+\.\d+(\.\d+)?(-\S*)?$/
env:
global:
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
- secure: TRAVIS_SECRET_KEY_FOR_GITHUB_CREDENTIALS
sudo: false
cache: bundler
notifications:
email: false
g) script/deploy.sh 看起来有点像这样:
#!/usr/bin/env bash
bundle install
JEKYLL_ENV="production" bundle exec jekyll build
git status
git add .
git commit -m"[skip travis] Automated build"
git remote set-url origin https://USERNAME:$PSW@github.com/YOUR_GIT_USER/YOUR_REPO.git
git push origin HEAD:master --force
e) 使用部署脚本中使用的 $PSW 变量在 .travis.yml 中获取加密的 TRAVIS_SECRET_KEY_FOR_GITHUB_CREDENTIALS,只需遵循 Encryption Key Doc
完成此配置后,您可以像在 localhost 上一样使用任何 Gem,因为构建部分不再由 GitHub 完成,而是由 TravisCI 完成。
结论
您只需在 staging 上工作,只让 Travis CI 推送到您的主分支。您使用1.0.0 形式的标签进行部署。您现在需要做的就是将jekyll-paginate-multiple 添加到您的Gemfile 和_config.yml,然后您就准备好了。
如果有人对这些步骤的更多详细信息感兴趣,请查看此Blog Post 详细说明问题