再次被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 ~^(?<subdomain>.+).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
欢迎点赞、关注~