在GitHub上使用Jekyll插件
构建这个博客的Jekyll是一个静态网页生成工具,要实现一些额外的功能必须要使用Jekyll插件。
Jekyll插件是由ruby编写的,在Jekyll构建静态网时执行的程序。虽然插件不能改变生成的web站点是静态网页的本质,但能通过强大的模板功能扩展Jekyll的能力。
比如这篇博客提到的category_plugin,可以实现博客的分类功能。
但被广泛使用的Jekyll托管站点GitHub Pages却不支持Jekyll插件。虽然原因可以理解,却使Jekyll生成的博客的可用性大大降低。要使GitHub Pages“支持”Jekyll插件,其实有个很耍小聪明的解决方案:直接部署经过Jekyll+插件构建后的站点到GitHub上。
思路如下
-
安装本地的Jekyll环境。
-
使用 jekyll new
命令新建一个jekyll站点目录。
-
在本地的jekyll站点编写博客。这时可以使用jekyll插件。
-
使用 jekyll build
命令生成静态站点。默认的输出目录是_site/
-
把_site/目录下的文件发布到github。因为这就是一个静态站点不需要GitHub再次利用Jekyll构建,所以在根目录下添加一个内容为空的.nojekyll文件(touch .nojekyll
)
这个过程的4、5两步可以利用脚本实现自动化。我写的脚本如下:
1
2
3
4
5
6
7
8
#!/bin/sh
cd ~/raw.gongshw.github.io;
jekyll build || error_exit "$LINENO: jekyll build failed";
cp -r _site/ ../gongshw.github.io/;
cd ../gongshw.github.io/;
git add .;
git commit -am 'Latest build.';
git push;
我在~/raw.gongshw.github.io目录存放模板。每次构建后自动复制_site到gongshw.github.io/这个git目录并提交到github.
2015年8月7日更新
上文的脚本在mac环境下一直运行正常, 不过在linux下cp命令常常被alias到cp -i,可能需要先unalias再执行脚本. 我最新使用的脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
cd ~/raw.gongshw.github.io;
jekyll build || error_exit "$LINENO: jekyll build failed";
git add .;
git commit -am "Latest build: ${1}";
git push;
rm -rf ../gongshw.github.io/*;
cp -r _site/* ../gongshw.github.io/;
cd ../gongshw.github.io/;
git add .;
git commit -am "Latest build: ${1}";
git push;
2016年6月30日更新
jekyll升级到3.0之后出现了大量的不兼容,最新的脚本指定了jekyll的版本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
if [ $# -eq 0 ]; then
echo "git need a commit message!"
exit 1
fi
cd ~/raw.gongshw.github.io;
jekyll _2.5.3_ build || error_exit "$LINENO: jekyll build failed";
git add .;
git commit -am "${1}";
git push;
cd ~/gongshw.github.io/;
git pull
rm -rf ./*;
cp -r ~/raw.gongshw.github.io/_site/* .;
git add .;
git commit -am "[auto sync] ${1}";
git push;
构建这个博客的Jekyll是一个静态网页生成工具,要实现一些额外的功能必须要使用Jekyll插件。
Jekyll插件是由ruby编写的,在Jekyll构建静态网时执行的程序。虽然插件不能改变生成的web站点是静态网页的本质,但能通过强大的模板功能扩展Jekyll的能力。
比如这篇博客提到的category_plugin,可以实现博客的分类功能。
但被广泛使用的Jekyll托管站点GitHub Pages却不支持Jekyll插件。虽然原因可以理解,却使Jekyll生成的博客的可用性大大降低。要使GitHub Pages“支持”Jekyll插件,其实有个很耍小聪明的解决方案:直接部署经过Jekyll+插件构建后的站点到GitHub上。
思路如下
-
安装本地的Jekyll环境。
-
使用
jekyll new
命令新建一个jekyll站点目录。 -
在本地的jekyll站点编写博客。这时可以使用jekyll插件。
-
使用
jekyll build
命令生成静态站点。默认的输出目录是_site/ -
把_site/目录下的文件发布到github。因为这就是一个静态站点不需要GitHub再次利用Jekyll构建,所以在根目录下添加一个内容为空的.nojekyll文件(
touch .nojekyll
)
这个过程的4、5两步可以利用脚本实现自动化。我写的脚本如下:
| #!/bin/sh
cd ~/raw.gongshw.github.io;
jekyll build || error_exit "$LINENO: jekyll build failed";
cp -r _site/ ../gongshw.github.io/;
cd ../gongshw.github.io/;
git add .;
git commit -am 'Latest build.';
git push;
|
我在~/raw.gongshw.github.io目录存放模板。每次构建后自动复制_site到gongshw.github.io/这个git目录并提交到github.
2015年8月7日更新
上文的脚本在mac环境下一直运行正常, 不过在linux下cp命令常常被alias到cp -i,可能需要先unalias再执行脚本. 我最新使用的脚本如下:
| #!/bin/sh
cd ~/raw.gongshw.github.io;
jekyll build || error_exit "$LINENO: jekyll build failed";
git add .;
git commit -am "Latest build: ${1}";
git push;
rm -rf ../gongshw.github.io/*;
cp -r _site/* ../gongshw.github.io/;
cd ../gongshw.github.io/;
git add .;
git commit -am "Latest build: ${1}";
git push;
|
2016年6月30日更新
jekyll升级到3.0之后出现了大量的不兼容,最新的脚本指定了jekyll的版本:
| #!/bin/sh
if [ $# -eq 0 ]; then
echo "git need a commit message!"
exit 1
fi
cd ~/raw.gongshw.github.io;
jekyll _2.5.3_ build || error_exit "$LINENO: jekyll build failed";
git add .;
git commit -am "${1}";
git push;
cd ~/gongshw.github.io/;
git pull
rm -rf ./*;
cp -r ~/raw.gongshw.github.io/_site/* .;
git add .;
git commit -am "[auto sync] ${1}";
git push;
|