GitLab’s Container Registry:
- 每個GitLab Project都可以有各自獨立的內建空間提供儲存Image
- GitLab本身即為完整的DevOps平台
- GitLab平台提供完整的DevOps workflows
- 有許多內建與外置功能提供給Projects使用
Package Registry支援許多封裝管理套件諸如:
- Maven,npm,NuGet,PyPl,Ruby gems,…
- 也就是包含jar/war這種Java封裝格式
Container Registry:
- 就是放image的!
- 其中要注意的分別是Public vs Private
- 公開的話就會被其他人取用到
- 私人就必須要執行登入動作才能使用
- 預設是依據程式Project是否為私人決定Container Registry是否為私人
Infrastructure Registry:
- 就是Infrastructure as Code在使用的!
- 例如Terraform,不過本課程不會用到這部分
實際撰寫這部分Pipeline:
但是要小心,上面這樣寫,會變成平行處理
所以要增加stages,變成有順序的,並且push要在build後面:
如上先將build跟push這兩個步驟Jobs都放在build這個stage
透過語法"needs"還是會有先後
其中對應的Dockerfile就是:
再來還有一個問題是docker login的部分照理說還需要帳密
以下頁面也會有提示有兩種驗證方式:
這邊就簡單用帳密的模式
而在GitLab Pipeline之中,其實有提供暫時性的憑證的變數可供使用
上述兩個GitLab預建的變數,其中密碼那個僅允許僅僅"1個Job"可以使用
原因在於這個描述:
所以再改造docker login的部分:
這邊就可以Commit看看Pipeline結果:
看了一下是一般User帳號ubuntu沒有權限去摸/var/run/docker.sock
所以首先看一下這連進去Runner執行的帳號是誰:
所以這邊要給這個帳號權限來執行Job:
#給予gitlab-runner這個帳號來執行docker:
#可以先用指令看看有沒有docker的群組:
groups#沒有的話新增群組:
newgrp docker#確認帳號的群組關係:
id gitlab-runner#確定沒有docker群組,就給予:
sudo usermod -aG docker gitlab-runner
這時候再次驅動Pipeline等結果:
看起來正常了,分別看看打包image與push的job:
最後回到GitLab上面看到:
這邊有個複製紐可以按:
#貼上會看到:
registry.gitlab.com/javanoobpig/mynodeapp-cicd-project:1.0
也就是目前完成以下:
Multiple Image Repositories:
這邊講師特別點出這個程式Project的image registry部分看到:
實際上這個程式專案,我們也有可能會打包成不同名稱的image
並且有階層名稱,例如:
registry.gitlab.com/javanoobpig/mynodeapp-cicd-project/microservice/payment#然後再加上tag的話就像是:
registry.gitlab.com/javanoobpig/mynodeapp-cicd-project/microservice/payment:1.0
所以我們可以修改Pipeline:
commit後看到:
看起來OK!
我們也可以把"payment"這個部分改成變數:
commit後立刻取消Pipeline執行:
右上變成如下就是取消了:
接著手動驅動執行Pipeline:
build那邊就不看了...
此時的Container Registry內會看到:
變數宣告:
前面再各個打包推送步驟加入許多變數的使用
可以將依些統一在Pipeline開頭宣告:
另外小改一下tag變成1.1:
順便清理那些echo指令還有debug的whoami,完整Pipeline變成:
一樣Commit後取消自動觸發的Pipeline
主動啟動給MICRO_SERVICE變數設定
一樣有正常跑完: