Gitlab Pages替代解决方案

image.png

再次被Gitlab Pages坑到....

Pages是巨大的坑,无论你有多少种理由或者想法,都不要用它!都不要用它!都不要用它!

原因是太--慢--了------- 绝不要对它抱有任何幻想,不要打开这个功能永远是最好的选择。

打开Pages执行CI/CD操作,2C4G服务器,一个不到2M的站点,单单是cp拷贝操作就需要1分钟,关掉Pages之后只要2秒。

另外,也不要幻想在普通低配服务器(例如2C4G)上跑Nodejs的build,太慢了!还是那个2M不到的站点,总共只有十几个文件,Docusaurus的build竟然需要4分钟甚至十几分钟,并且会跑死机... ——其实想想就知道,在服务器上build有什么意义呢?build好再推上去不香吗?

Pages的替代方案

首先要配置好runner,因为每个runner每次运行都会自动把项目放到/home/gitlab-runner/builds/XXX/0/username/projectname文件夹下,而且这个XXX是不会变的,所以直接配置Nginx做泛域名解析指向这里就OK了,根本不需要Pages这个东西。

/etc/nginx/nginx.conf 的http 中添加下面内容,它会解析usename.git.domain.com/projectname这样的路径到特定的文件夹。其中的_PnNa6rR就是上面说的XXX,需要你自己根据情况修改。

server {
  listen     *:80;
  server_name  ~^(?.+).git.domain.com$;
  root         /home/gitlab-runner/builds/_PnNa6rR/0/$subdomain ; 
  index  index.html index.htm;
 }

Gitlab-ci.yml文件

runner设置为shell模式。

因为整个项目文件都会被runner拷贝过去,所以不需要做特殊的自动化处理,只要启动runner就可以,下面是最简的.gitlab-ci.yml的内容。(没有.gitlab-ci.yml文件runner不启动就不会拷贝项目过去)

pages:
  stage: deploy
  script:
    - git status

也可以做一些比较复杂的拷贝工作,比如下面的代码(进入到website文件夹,把docs下几个子文件夹中的图片都拷贝过去),适合于解决docusaurus愚蠢的设定导致md编辑时候无法直接预览图片的问题(当然可以start起服务器预览,但毕竟有点麻烦)。

pages:
  stage: deploy
  script:
    - cd website
    - ls
    - cp docs/articles/imgs/* build/img/
    - cp docs/cases/imgs/* build/img/
    - cp docs/sources/imgs/* build/img/
    - cp docs/helps/imgs/* build/img/
  artifacts:
    paths:
      - public
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

欢迎点赞、关注~

你可能感兴趣的:(Gitlab Pages替代解决方案)