Gitlab上部署Hexo博客
今天成功在Gitlab上部署了以我的名字全称命名的Hexo博客,本文记录配置过程及和Github上的方便程度。
Github 和Gitlab 上撰写博客的流程对比分析
Github 撰写博客
之前在Github上部署了Hexo博客,这个过程可以参考文章使用Hexo搭建博客,在Github上部署博客写作的流程为:
在本地电脑上安装好撰写Hexo博客的软件
在Github上建立和用户名相同的仓库,并配置好主站配置文件
_config.yml
,同时配置ssh方式登录github使用
hexo n xxx
新建博文xxx
,然后使用nvim source/_post/xxx.md
来编辑内容,执行命令hexo s
可以在本地监控博客的最终显示。待完成博客,hexo g
生成文件, 以hexo d
上载到github
上,这个方式需要在_config.yml
中进行设置,具体方法参见本文开始时引用的博文。由于使用这个方式上载的文是位于文件夹
public
的由hexo
生成的内容,所以对于博客的源文档需要另立仓库单独存放,我之前在github
上以hexosource
来保存这源文件,所以在写完博客后以命令git add .
、git commit -m "xxx"
、git push
将源码上载到hexosource
中。
Gitlab 撰写博客
在Gitlab
上撰写博客,由于Gitlab
的工作特点,他应该比Github
方便不少,这也是以后我决定从Gitlab
上发文章的主要考虑要点。Gitlab
当监控到上载文件到其仓库时,其会触发系统执行脚本gitlab-ci.yml
,从而实现自动部署。然而这依懒于一个应用就是gitlab-runner
,其一这个服务可以由其他用户共享,即所谓的Shared runners
,其二可以在本机安装此服务,并设置开机自启动,由于第一种方式需要自己绑定信用卡来确认账号,很不方便,于是我选择了在自己的Archlinux
上来安装gitlab-runner
服务,自己有针对性的配置主机,反而更加方便。
在本地电脑上安装好撰写Hexo博客的软件
在
Gitlab
上审请账号,同时建立一个yourname.gitlab.io
仓库,用来存放博客源文件配置
ssh
这点和Github
相同将你的
Hexo
站点文件夹推送到repository
中。默认情况下public
目录将不会(并且不应该)被推送到repository
中,建议你检查 .gitignore
文件中是否包含public
一行,如果没有请加上。(这一点相当重要)
由于Gitlab可以设置为私有,所以我们当然是只需要展示博客而不是展示源码,设置如下:
选择 Settings > General。
在弹出的界面中,选择 Visibility, project features, permissions 后面的 Expand 按钮。
Project visibility 设置为
Private
Pages 设置为
Everyone
- 在你的站点文件夹中新建
.gitlab-ci.yml
文件:.gitlab-ci.yml 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Pages/Hexo.gitlab-ci.yml
# Full project: https://gitlab.com/pages/hexo
image: node:18.9.0
cache:
paths:
- node_modules/
before_script:
pages:
script:
# - npm run build
- hexo g
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
注意这里before_script
下面不应当添加和npm
相关命令,因为一切配置都在本机完成了,所以添加后反而导致系统不能部署成功。
- 安装和配置
gitlab-runner
1 | # pacman -S gitlab-runner |
注意,以上注册方法仅输入了必要信息,具体可以参见gitlab Runner
安装与部署。关于注册中需要的token
可以从settings
->CI/CD
->Runners
中找到。他的工作原理为,在本地安装的gitlab-runner
通过这一仓库的token
唯一的与此仓库相关联,当gitlab
检测到系统此仓库发生变化时就会调用此token
对应的gitlab-runner
来运行.gitlab-ci.yml
中对应的命令,从而完成相应工作的自动化。所以一个仓库会有一个token
来标记一个gitlab-runner
,同时也会有一个.gitlab-ci.yml
来指明此gitlab-runner
需要运行的命令,以完成工作。此处只是采用了此自动化功能来完成了博客自动部署。
- 配置
gitlab-runner
开机启动
1 | # systemctl enable gitlab-runner |
上面第二行代码是开机启动gitlab-runner
服务,第三行是关闭gtilab-runner
服务
,同时如果不设置开机启动的话也可以手动启动服务,即 1
2
3$ sudo gitlab-runner start %以root身份启动
$ gitlab-runner run %以user身份启动
$ sudo gitlab-runner run %以root身份启动gitlab-runner
命令也可以参考GitLabRunner命令
或直接使用gitlab-runner --help
来确认使用方法。
1 | NAME: |
由于Gitlab的工作方式与Github不同,编译博客是在上传仓库后触发的,经测试如果以_config.next.yml
放入根目录下,其不能切换主题,于是需要修改themes/next/_config.yml
才可以实现自动部署后切换相应的主题。特别注意,升级Next
主题的时候不要直接执行git pull
命令,务必先备份主题的配置文件themes/next/_config.yml
。
2022-09-28
我对本文章进行了升级,原因是我在北师大配发的电脑上安装配置gitlab-runner
的时候,不能正确使博客渲染,这个问题是因为对安装流程不熟悉,而注册了两个不同的gitlab-runner
,于是全部删除后重新部署了一个gitlab-runner
后,问题解决。特此声明,以后注意!
结论
通过对比我们发现,Github
需要两个仓库,同时需要使用hexo
和git
分别完成部署博客和保存源码操作较复杂,但是不需要安装其他软件。而Gitlab
可以配置自动部署操作,其只需要git
上载源码到指定仓库即可,但是其需要安装gitlab-runner
,为了方便可以进一步设置开机启动,对于现代计算机而言,这点资源消耗可以忽略不计。所以我们从实用方便角度讲,Gitlab
更加接近于之前的网易博客之类的网站,但是其完全自主可控。这里还有一个问题,在申请Gitlab
账号时,由于需要接收一个由Google
服务发送的验证码,所以通常国内不能正常申请,但是我们可以借助于VPN
或者torbrowser
来解决这个问题,一旦申请账号成功,则后面的操作将变得非常开心。正是由于这个原因,我的姓名全拼的域名才没有被抢占,同时也由于便捷性,今后的文章我将主要在Gitlab
上发布。