GitLab CI/CD課程23

Build Docker Image & Push to Private Registry(GitLab本身的image registry)

ZONGRU Li
Aug 12, 2022

目前已完成以下Pipeline流程:

接著先從簡單的部分做起,嘗試完成以下兩步,先完成簡單Pipeline:

首先先修正main branchTest Code:

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後面:

如上先將buildpush這兩個步驟Jobs都放在build這個stage

透過語法"needs"還是會有先後

其中對應的Dockerfile就是:

再來還有一個問題是docker login的部分照理說還需要帳密

以下頁面也會有提示有兩種驗證方式:

這邊就簡單用帳密的模式

而在GitLab Pipeline之中,其實有提供暫時性的憑證的變數可供使用

LINK

上述兩個GitLab預建的變數,其中密碼那個僅允許僅僅"1個Job"可以使用

原因在於這個描述:

沒辦法跨Job的意思!這個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等結果:

看起來正常了,分別看看打包imagepushjob:

打包image的job
推image

最後回到GitLab上面看到:

這邊有個複製紐可以按:

#貼上會看到:
registry.gitlab.com/javanoobpig/mynodeapp-cicd-project:1.0

也就是目前完成以下:

改善Pipeline Configuration:

注意到以下:

其實這裡也有提供:

LINK

所以可以改成這樣:

為了更加確定這兩個值的內容,事先echo出來看看

微調再重跑後看到:

Multiple Image Repositories:

這邊講師特別點出這個程式Projectimage 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:

當然也可以像之前學的那樣去Setting →CICD那邊設定自定義變數

build那邊就不看了...

此時的Container Registry內會看到:

變數宣告:

前面再各個打包推送步驟加入許多變數的使用

可以將依些統一在Pipeline開頭宣告:

另外小改一下tag變成1.1:

順便清理那些echo指令還有debugwhoami,完整Pipeline變成:

一樣Commit後取消自動觸發的Pipeline

主動啟動給MICRO_SERVICE變數設定

一樣有正常跑完:

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet