介绍
Gitlab
已经越来越强大,同时也可以使用它提供的 pages
搭建个人静态博客
官网 pages 介绍
官网 doc
搭建步骤
Fork
官网推荐模板
模板支持很多种静态博客:hugo, hexo, jekyll
等
这里选用hexo
:hexo模板链接- Enable shared Runners
在Settings -- CI / CD -- Runners settings
中检查,是否打开该功能 - Configure your project (optional)
在Settings -- General -- Advanced settings -- Rename repository
中,将仓库名称和路径都修改为username.gitlab.io
- Manually run a pipeline
下载该仓库修改并提交后,触发一次自动编译
在CI / CD -- Pipelines
中,查看任务是否执行成功 - Visit your site!
搭建完毕!直接访问https://username.gitlab.io
即可
如果无法访问,可能会存在一点延时,过几分钟后再访问
Hexo
环境搭建
介绍
Hexo
是一个快速、简洁且高效的博客框架。Hexo
使用 Markdown
(或其他渲染引擎)解析文章,在几秒内即可利用靓丽的主题生成静态网页。
安装 Node.js
和 git
Hexo
安装依赖 Node.js
和 git
,所以需要先安装这两个环境
- Node.js
Node.js 官网 下载Windows
下的稳定安装包,一路Next
安装完毕后,重新开启window cmd
终端,查看版本号测试是否安装成功:
1 | $ npm --version |
安装 Hexo
Windows
下的 Node.js
和 git
环境准备好后,在 windows cmd
终端中,只需一条命令就可以安装 Hexo
:npm install -g hexo-cli
官网安装文档
windows cmd
终端中查看版本号:
1 | $ hexo --version |
gitlab
博客本地环境预览
本地安装好 Hexo
环境后,可以本地预览 gitlab
中写的博客了。Hexo
相关命令建议在 windows cmd
中输入,打印信息会比 git bash
中的多
hexo
初始化博客目录cmd
中执行如下命令,等待初始化完毕,并产生node_modules
目录E:\01_work\00_My\06_blog> hexo init username.gitlab.io
- 安装
hexo-server
Hexo 3.0
把服务器独立成了个别模块,必须先安装 hexo-server 才能使用:npm install hexo-server --save
注意:搭建时如果没有先安装该模块,也可以直接执行hexo server
;但是当安装完本地搜索hexo-generator-searchdb
后,提示需要安装该模块,而此时再安装hexo-server
,会导致hexo server
运行后,无法预览网页。 - 下载博客
git-bash
在同级目录中下载gitlab
博客仓库:git clone git@gitlab.com:username/username.gitlab.io.git username.gitlab
- 重命名博客目录并拷贝第一步生成的
node_modules
目录
将前面hexo
命令生成的username.gitlab.io
目录重命名delete
将git
下载的博客目录由username.gitlab
更换为username.gitlab.io
将delete
目录中的node_modules
拷贝到username.gitlab.io
中
也就是从gitlab
中下载的博客目录需要hexo
初始化命令生成的node_modules
(这里也可以简单的使用比较工具BeyondCompare
将git
管理的仓库,合入到hexo
建立的博客目录中,这样效率比较高) cmd
开启服务验证
1 | E:\01_work\00_My\06_blog\username.gitlab.io>hexo server -l |
浏览器中打开 http://localhost:4000/username.gitlab.io
验证!如果有时读取失败或者读取的内容不对,可以清空浏览器的缓存,再重新登录查看!
设置主题和样式 NexT
介绍
Hexo
可以非常方便的更换主题,而且官网及第三方精美主题也很多,本博客选用了国内最流行主题之一: NexT
Hexo 官网及主题
NexT github
NexT 文档
NexT 作者博客
5-7版本
8及以上版本
下载 NexT
主题
Hexo
所有主题都在目录 theme\
下,直接下载 NexT
主题到该目录:git clone --branch v5.1.3 https://github.com/iissnan/hexo-theme-next themes/next
下载好后,删掉目录中的 .git, .github
目录,并将该目录整体提交到博客仓库中
更换博客主题
修改站点配置文件,仓库根目录下 _config.yml
,更换主题为 next
:
1 | diff --git a/_config.yml b/_config.yml |
更换博客样式
修改主题配置文件,文件路径 theme\next\_config.yml
,本博客采用和主题作者一直的样式 Pisces
:
1 | diff --git a/themes/next/_config.yml b/themes/next/_config.yml |
参考官网文档对这几种样式有基本的介绍及效果展示:
- Muse
默认 Scheme,这是 NexT 最初的版本,黑白主调,大量留白
XiaMo | OAwan | Hui Wang - Mist
Muse 的紧凑版本,整洁有序的单栏外观
Jeff | uchuhimo | xirong - Pisces
双栏 Scheme,小家碧玉似的清新
Vi | Acris | Rainy - Gemini
Ivan.Nginx | Alynx | Raincal
设置语言,支持中文
修改站点配置文件,仓库根目录下 _config.yml
,设置语言为 zh-Hans
支持中文:
1 | diff --git a/_config.yml b/_config.yml |
设置菜单
常见菜单有:主页、标签、分类、归档,NexT
默认只有主页和归档,需要添加标签和分类
- 新建页面
Hexo 的分类与标签文档,官网上有详细的新建流程
1 | // 1. hexo 命令新建标签页面 |
- 添加新菜单支持
修改主题配置文件,文件路径theme\next\_config.yml
,把tags
和categories
注释取消掉
1 | menu: |
添加本地搜索
添加百度/谷歌/本地 自定义站点内容搜索
- 安装
hexo-generator-searchdb
在站点的根目录下执行以下命令:
1 | E:\01_work\00_My\06_blog\username.gitlab.io>npm install hexo-generator-searchdb --save |
- 编辑站点配置文件,新增以下内容到任意位置:
1 | search: |
- 编辑主题配置文件,启用本地搜索功能:
1 | # Local search |
设置站点相关信息
修改站点配置文件,仓库根目录下 _config.yml
,添加站点相关信息:
1 | # Site |
其他主题设置
修改主题配置文件,文件路径 theme\next\_config.yml
站点建立时间
取消如下字段的注释:since: 2017
开启页面统计
找到busuanzi_count
设置项,按照如下方法修改
1 | $ git diff themes/next/_config.yml |
- 开启页面阅读进度
scrollpercent: true
gitlab/github
混合发布
最近(2018.3.1之后) gitlab pages
功能异常,每次提交后 CI/CD
都会出错,提示 hexo
找不到,具体错误如下:
1 | ├── moment@2.21.0 |
提了个 issues ,后期再找解决方案。当前先采用 gitlab/github
混合发布的方法提交:
github
发布的时候,提交上去的只有转换好的html
文件,当做pages
使用。gitlab
保存文本及所有提交记录,方便后续追溯。
环境准备
按照上面的方法搭建 gitlab
环境及 hexo
博客,参考静态博客搭建指南 搭建 github pages
,生成对应的仓库,并添加 ssh-key
。
修改配置文件
上一步拿到了 github pages
仓库地址:git@github.com:***/***.github.io.git
,修改当前博客的配置文件 _config.yml
:
1 | diff --git a/_config.yml b/_config.yml |
注意:有些公司可能会屏蔽
github
的ssh
连接,因此repo
中需要使用https
的免密方式来访问github
。
- 问题描述
使用ssh
来测试是否能正确访问github
,提示22
端口被reset
;原因是公司可能开防火墙等封了这种访问方式。1
2$ ssh -T git@github.com
Connection reset by 52.74.223.119 port 22 - 解决方案
在_config.xml
中使用https
方式,显示指定账号密码来访问:1
2# repo: git@github.com:***/***.github.io.git
repo: https://username:password@github.com/username/username.github.io.git
安装 hexo-deployer-git
- 安装
npm install --save hexo-deployer-git
,安装hexo-deployer-git
发布工具。 - 配置
安装完hexo-deployer-git
工具后,执行hexo d -g
后会在当前blog
目录下,生成.deployer-git
目录,它是一个.git
仓库,我们使用hexo d
命令发布时,也就是将该.git
仓库提交到远程目标仓库上。
使用git config user.name/email
配置远程仓库的访问账号。
提交和发布
- 提交
提交是指提交到gitlab
中,使用常用的git
命令commit
就行。 - 发布
发布是指发布到github pages
中,使用hexo d -g
命令发布,同时会在github
中生成提交记录,但这个提交记录可读性非常差,通常为生成html
更新所有目录。
问题排查过程
问题描述:代码推送(git push
) 到 gitlab
仓库后, CI/CD
中 Pipelines
总是出错,导致博客主页无法显示最新的修改。整理排查流程如下:
Pipelines
中查看问题原因
- 在
gitlab/CI/CD/pipeline
查看具体的JobId
- 点开这个
JobId
查看具体的出错原因;可以看出是hexo generator
失败
本地直接执行验证
本地执行 hexo generator
验证发现是成功的,继续查看上面的日志,发现 gitlab
中使用的是 hexo 4.x
而本地是安装的 hexo 3.x
:
- 本地升级
hexo
版本,重新按照新建博客本地环境,并拷贝node_modules
;合入hexo 3.x
的配置文件,在新博客目录下再次验证发现仍然失败 hexo init myblog.io
重新初始化一个空博客,在这个空博客中验证本地环境,结果是正常显示;说明hexo
环境没问题- 切换自己博客主题为
hexo
默认主题landscape
,验证结果正常显示;说明是自己博客选的第三方主题NexT
的兼容性问题 - 到
NexT
官网查看,发现当前NexT
的版本5.x
只支持hexo 3.x
,参考 NexT upgrade from 5.x - 升级
NexT
到最新的7.x
,并合入5.x
的配置文件,再次本地验证,能够正常显示;说明本地环境全部正常了 - 推送到
gitlab
发现Pipelines
还是失败,原因仍然是hexo generator
失败;怀疑本地环境和gitlab
环境不一致 - 因为
gitlab
博客是在docker
环境发布的,在gitlab hexo pages
主页 查看最新.gitlab-ci.yml
配置文件 - 将最新的
.gitlab-ci.yml
替换本地配置文件重新提交到gitlab
后,Pipelines
运行通过!! - 查看博客网址验证,全部正常,至此问题全部解决
如果遇到其他问题,也可以在 gitlab hexo pages
主页 中提 issues
,或者查看其他人是否有遇到过类似问题。
常见问题
css is missing
访问博客时,没有任何 css
样式,解决方案为在 _config.yml
文件中修改 root
目录:
1 | diff --git a/_config.yml b/_config.yml |
hexo version
查看版本号提示本地没有 hexo
错误信息如下,查看版本提示并没有 hexo
命令?
1 | E:\01_work\00_My\06_blog> hexo version |
这是因为当前博客目录已经包含了 hexo
相关配置文件了,需要重新在 Windows cmd
终端中运行上述命令,生成 node_modules
目录。