不是标题党,我自己刚写的,保证最新。(2022年6月)


前言(可不看)

  以前生活博客放在Gitee上,每次命令部署后还得登录网页管理端手动更新一下Page服务才能完成一次部署,着实很麻烦。懒人要贯彻到底,为追求效率,弃之转GitLab。
  幸好生活博客都是我静悄悄自娱自乐写写东西,没推广,百度也搜不到,基本没人看,损失的点击数不心疼哈哈哈。

  但是,全网我竟然搜不到一篇像样的GitLab搭建博客教程(很多都是三四年前的,过时了,都不教GitLab的runners如何自建的。),反观Github搭建博客教程可是满天飞!

  是GitLab,不是GitHub,看错请在下方评论哈哈哈。

  不能忍,我只好自己写了。(草稿箱里这几个月堆积的其它文章都还没发……属实是和博客纠纠缠缠多少年)

Hexo

  前置条件:安装Node.js和Git。

1
2
3
4
5
npm install hexo-cli -g
hexo init blog
cd blog
npm install
hexo server

  本地能运行http://localhost:4000/ ,ok。

GitLab

官网指引
  看英文版!
  看英文版!
  看英文版!
  重要的事情说三遍!我中途看了一下中文版,被坑了好几次。那个中文网的配置文件不对,部署疯狂报错!!!(中英文文档版本竟然不一致,我也是醉了…)

  1. GitLab账户注册。
  2. 创建一个username.github.io的项目,或者把已有项目更名为此,可以选择Private。
  3. Settings > CI/CD > Runners > Enable,开启Runners。

  重点来了!!!

Pipeline failing? To keep GitLab spam and abuse free we ask that you verify your identity.Until then, shared runners will be unavailable. Validate your account or use your own runners.

  GitLab要求上传身份证(经评论区指正,是信用卡号)才给用shared runners。Validate是不可能validate的。现有的教程到这里都是直接用共享runners,我猜前几年可能GitLab无需验证这一步吧。

  既然还有自建Runners这种方法当然要试一试了。

GitLab自建Runners

  首先,这个东西是干什么用的呢?Github部署博客时,是在本地hexo g生成好静态页面,然后把静态页面hexo d部署上去。而GitLab不同,它要把所有源文件push到项目中,当push后,GitLab会自动调用一个叫runners的玩意儿帮项目自动生成页面并部署。它本身是个优化的东西,叫CI/CD,也就是持续集成、持续交付和持续部署,用它可以很好地实现自动化开发。

  介绍完毕,开始安装。

安装

https://docs.gitlab.com/runner/install/

  以windows为例。
https://docs.gitlab.com/runner/install/windows.html

  1. 创建一个文件夹,如E:\GitLab-Runner。
  2. 下载二进制文件。
  3. 限制文件夹写权限。(我没特地设置)
  4. 打开cmd。
  5. 注册一个runner。
      怎么注册呢?这里也是一个坑巨多的地方。想建博客的小伙伴们就别想那么多了,跟着我一步步走就完事了。

注册Runner

https://docs.gitlab.com/runner/register/index.html

  1. 在刚才下载好文件的文件夹中打开cmd运行

    1
    .\gitlab-runner.exe register
  2. 输入URL。这个URL在哪找呢?Settings-CI/CD Settings-Runners-Specific runners,里面就有URL。一般是https://gitlab.com/

  3. 输入token。
  4. 输入描述。可不写。
  5. 输入tag。最好不写。否则还得后面还得去设置untag。
  6. 输入备注。可不写。
  7. 输入runner执行器。我写的shell。结束注册。如果是docker,后面还要输入默认image。

  怎么验证我的runner是好的呢?
  Settings-Runners-Specific runners下方出现刚才建立的Runner,并且前面有个绿色的圆圈。如果是感叹号,证明上面的过程出现问题。

配置

  1. 使用node --version检查Node.js版本,记录下来(比如v16.y.z)。
  2. 在项目中增加.gitlab-ci.yml文件,其中将16替换为自己Node.js的版本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    image: node:16-alpine
    cache:
    paths:
    - node_modules/

    before_script:
    - npm install hexo-cli -g
    - npm install

    pages:
    script:
    - npm run build
    artifacts:
    paths:
    - public
    rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
  3. 将hexo文件夹push到GitLab。一旦push完成,GitLab自动部署开始。

  4. 当GitLib CI成功部署,username.gitlab.io就能运行了。
  5. (可选)如果希望检查生成的站点资产(html、css、js等),可看https://docs.gitlab.com/ee/ci/pipelines/job_artifacts.html

  注意,网站看起来似乎能运行了,结果把GitLab账号退出后再点击网站就看不到了,而是转到GitLab要登录。这是因为项目本身是Private的,需要把Page页的权限设置为Public!
  Settings->General->Visibility, project features, permissions,仓库权限保持private,下面的Pages选项改为Everyone。

一些报错解决方法

  1. GitLab push报错。
    1
    2
    3
    4
    5
    cd existing_repo
    git init
    git remote add origin https://gitlab.com/username/username.gitlab.io.git
    git branch -M main
    git push -uf origin main

  报错:

1
! [remote rejected] main -> main (pre-receive hook declined)

  这是因为main分支默认是protected,需要在Settings-Repository-Protected branch,修改权限。

  1. 部署时runner报错。

    ERROR: Job failed (system failure): prepare environment: failed to start process: exec: “pwsh”: executable file not found in %PATH%.

  转到GitLab运行程序的安装目录,如E:\GitLab-Runner。记事本打开config.toml文件,并用powershell替换pwsh,如下所示:

1
2
[[runners]]
shell = "pwsh"

改为:

1
shell = "powershell"

后记

  换到GitLab部署后,总体效率是不错,一次push就完事儿,还把源文件备份的工作一道给解决了,而不是像Github部署那样,项目内只存页面。而且page打开速度似乎也比Gitee快不少。缺点就是GitLab自动部署比自己手动hexo d的速度要慢。
  把生活博客切换修好花了我大半天时间,踩了好多坑(之前没咋用过GitLab)。干脆把过程整理出来造福有需要的人吧。知识共享、开源精神yyds!
  (难得我还为此博文专门做了一张封面图,虽然很丑)