Hexo

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

npm install hexo-cli -g
hexo init blog
cd blog
npm install
hexo server

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

GitLab

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

  1. GitLab账户注册。
  2. 创建一个username.gitlab.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运行
.\gitlab-runner.exe register
  1. 输入URL。这个URL在哪找呢?Settings-CI/CD Settings-Runners-Specific runners,里面就有URL。一般是https://gitlab.com/ 。
  2. 输入token。
  3. 输入描述。可不写。
  4. 输入tag。最好不写。否则还得后面还得去设置untag。
  5. 输入备注。可不写。
  6. 输入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的版本:
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
  1. 将hexo文件夹push到GitLab。一旦push完成,GitLab自动部署开始。
  2. 当GitLib CI成功部署,username.gitlab.io就能运行了。
  3. (可选)如果希望检查生成的站点资产(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报错。
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

报错:

! [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,如下所示:

[[runners]]
  shell = "pwsh"

改为:

shell = "powershell"

后记

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