首先,Gitlab pages是很簡單的,至少比起github pages要簡單不少。node
Gitlab Pages的原理這是樣的:首先,當你新建一個Gitlab項目的時候,你同時也建了一個存儲庫。
python
只要你的工程目錄的根目錄下有.gitlab-ci.yml文件,注意必須嚴格起這個名字。gitlab runner就會執行這個腳本文件。linux
腳本的最終目的很簡單:把靜態文件放入名爲public目錄下的文件夾內。Gitlab pages會一直去這個存儲庫的public目錄找。注意:這個public是指存儲庫的public,與項目結構無關。換言之,這個public目錄不可見。git
也就是說:當你在項目的根目錄下添加了.gitlab-ci.yml,且在腳本中將靜態文件正確地放入了public文件夾,gitlab page就會自動打開並部署,部署的域名將會默認分配。github
固然,若是你不想使用默認的配置,而是想部署到特定的域名和服務器,則須要在yml文件中進行一些docker的配置。docker
開發者提交代碼後,runner檢索項目根目錄下名爲.gitlab-ci.yml的文件,並執行文件中的腳本,腳本內容包括項目的運行,打包,緩存打包文件,轉移文件到public目錄以供gitlab pages使用。而gitlab pages會到public目錄中解析靜態文件成頁面。npm
好,如今就來看一下我寫的一份CI腳本,首先說一下,CI的代碼風格相似於python這種,純靠縮進來區分層級關係的,因此書寫時,縮進是嚴格的。json
下面是代碼註釋版版的:緩存
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 中,能夠看到線上頁面已經生成了。