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  ~^(?<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

歡迎點贊、關注~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容