解决 GitLab Pages 不生成页面文件的问题

2017/08/29

这篇文章主要讲的是我在使用第三方主题的过程中遇到的坑,而并非一篇搭建教程。

前言

关于准备博客文件、部署到 GitLab 上等常规过程,其他教程一般也都有讲了,我的问题主要出在,GitLab 无法读取我使用的第三方主题的内容。我使用的 SSG 为 hugo,但我觉得这个问题应该会出现在所有的 SSG 身上,所以我挺奇怪的是都没怎么搜出和我类似的经历,也许是我在哪里没做对,不小心跳坑里了吧。

问题描述

正如前文所言,GitLab 无法读取我使用的第三方主题文件。假设我使用的是 example 主题,那么 GitLab 只知道存在 themes/example 文件夹,却不能获取到里面主题的主题文件。最后应该是作为空文件夹来处理了,这样在执行页面生成命令 hugo 时是不会报错的,(因为 hugo 只会检查 themes/example 文件夹是否存在)只是不会生成任何 .html 页面文件。因此,在 pipeline 任务完成后,访问我的 Pages 页面,得到的也只能是 “404 not Found”。

解决办法

1. 删除主题文件夹内所有跟 git 有关的文件

我猜测无法读取的原因是 themes/example 是一个仓库,而且托管点是 GitLab 站外,所以试着把 themes/example 下所有与 git 有关的文件都删除了,重新部署,发现果然成功了。这个方法简单粗暴却十分有效,尤其适合更新较少的主题

2. 使用 git 子模块(git submodule)管理主题

这种方法更为正统。我也是在搜索“在一个仓库中加载另一个仓库”的时候才第一次知道了子模块这种东西。其实也就是帮助你在 git 仓库中集成第三方库,目的是方便管理。

将你要使用的主题(最好 fork 一下)作为子模块添加,而非使用 git clone

git submodule add git@example.git themes/example

如果有原始文件夹的话要先删除

接着 .gitlab-ci.yml 也要做一些相应的修改,这是我在一个国外博客上1看到的,需要添加以下几行

variables:
  GIT_SSL_NO_VERIFY: "1"
  GIT_SUBMODULE_STRATEGY: recursive

实在是懒得看 CI 的官方文档,不过这几行的作用在博客中也已经讲的很清楚了。

这种方法同样可以部署成功。


  1. BUILDING A STATIC WEBSITE WITH HUGO ON GITLAB PAGES