首先,Gitlab pages是很簡單的,至少比起github pages要簡單很多。
Gitlab Pages的原理這是樣的:首先,當你新建一個Gitlab項目的時候,你同時也建了一個存儲庫。
只要你的工程目錄的根目錄下有.gitlab-ci.yml文件,注意必須嚴格起這個名字。gitlab runner就會執行這個腳本文件。
腳本的最終目的很簡單:把靜態文件放入名為public目錄下的文件夾內。Gitlab pages會一直去這個存儲庫的public目錄找。注意:這個public是指存儲庫的public,與項目結構無關。換言之,這個public目錄不可見。
也就是說:當你在項目的根目錄下添加了.gitlab-ci.yml,且在腳本中將靜態文件正確地放入了public文件夾,gitlab page就會自動打開並部署,部署的域名將會默認分配。
當然,如果你不想使用默認的配置,而是想部署到特定的域名和服務器,則需要在yml文件中進行一些docker的配置。
開發者提交代碼后,runner檢索項目根目錄下名為.gitlab-ci.yml的文件,並執行文件中的腳本,腳本內容包括項目的運行,打包,緩存打包文件,轉移文件到public目錄以供gitlab pages使用。而gitlab pages會到public目錄中解析靜態文件成頁面。
好,現在就來看一下我寫的一份CI腳本,首先說一下,CI的代碼風格類似於python這種,純靠縮進來區分層級關系的,所以書寫時,縮進是嚴格的。
下面是代碼注釋版版的:
building: //自己隨便命名的 image: node:latest //node鏡像為最新版的,最好指定版本號 stage: build //當前stage階段為build script: //build階段運行的腳本 - npm install --progress=false --no-optional //根據package.json來安裝依賴 progress設為false是為了不打印安裝的具體進度,no optional是為了跳過npm推薦的但不是編譯必須的,也沒有寫在package.json里一些依賴,比如說查看源代碼等 - npm run build //打包 artifacts: //工件,可以緩存在gitlab的流水線記錄中,供直接下載 expire_in: 3 days //工件緩存的有效時間 paths: //路徑 - dist //工件指向的目錄,這里指整個dist目錄 cache: //緩存 paths: //路徑 - node_modules/ //緩存node_mudules將大大提高ci運行的速度 pages: //隨便起的名字 stage: deploy //當前階段為deploy script: //deploy階段運行的命令 - rm -rf public/* //linux命令,遞歸無詢問刪除public目錄下所有文件- mv dist/* public //將dist目錄下的所有文件都移動到public目錄下 artifacts: //工件緩存 expire_in: 3 days //時效為3天 paths: //路徑 - public //緩存整個public目錄的文件 only: - dev //ceate pages下的所有操作只在dev分支上進行
下載一個工件下來看看:
可以發現我所言非虛。這時候我們把這個提交推到遠程。
等待這個流水線跑完,在 項目 --> 設置 --> pages 中,可以看到線上頁面已經生成了。