iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

昨天我們成功透過 HTTPS 將新建立的專案複製下來,今天要來嘗試使用 GitLab CI 來 Build 我們的 Image。

Docker Hub Repository

首先我會在 Docker Hub 也建立一個名為 hello-world 的 Private Repository,而我們的 Image 名稱會是以 <username>/hello-world:tagname 的形式來呈現。
這邊我們還需要先將 Docker Hub 的 Username 與 Password 記下來,之後要 Build Image 會需要登入 Docker Hub 取得權限。

CI

要使用 GitLab CI,我們會需要先在專案的最外層建立一個名為 .gitlab-ci.yml 的檔案,這樣我們的 GitLab 專案會自動根據這裡面設定的條件來執行相對應的操作。
https://ithelp.ithome.com.tw/upload/images/20241005/201417942GZsgX0AVY.png

以下是 .gitlab-ci.yml 的內容。

stages:
  - build

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  before_script:
    - echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin
  script:
    - docker build -t $DOCKER_IMAGE:$CI_COMMIT_SHA .
    - docker push $DOCKER_IMAGE:$CI_COMMIT_SHA

首先我這邊只有一個 Stage build,主要做的事情就是建構一個 Docker in Docker 的服務,也就是建立了一個 Container 在裡面根據 Dockerfile 的內容 Build 一張 Image,再上傳 Docker Hub 上。

可以注意到這邊有幾個變數:

  1. DOCKER_USERNAME:Docker Hub 的 Username。
  2. DOCKER_PASSWORD:Docker Hub 的 Password。
  3. DOCKER_IMAGE:<username>/hello-world:tagname
  4. CI_COMMIT_SHA:這個 Commit 的 SHA,可以從 Commit 的 URL 取得。

以上四個變數除了第四個 CI_COMMIT_SHA 會自動帶入以外,都需要我們自己定義。可以選擇寫在 .gitlab-ci.yml 中,也可以直接定義在 GitLab 裡,一般來說 Password 這一類的 Credential 都不會明碼寫在專案內的。

Variables

左側的 Settings > CI/CD 可以進入變數的管理頁面 Variables,點擊 Add variable 後就可以新增變數。
https://ithelp.ithome.com.tw/upload/images/20241005/201417940BFdNnhKcm.png

可以看到我將上述三個變數新增到 Variables 中,這樣之後執行 GitLab CI 就可以在這個專案自動帶入這些變數。
https://ithelp.ithome.com.tw/upload/images/20241005/2014179429Mm6ypABO.png

Pipelines

寫完 .gitlab-ci.yml 後,將其 Push 到我們的 GitLab 內,這邊可能會被要求登入或建立 Token,照著指示建立就行。

Push 後就可以在左邊的 Build 的 Pipelines 看到我們正在執行的 Job 了,而這個 Job 的執行環境就是我們的 Kubernetes Cluster 環境中的一個 Runner Pod。
https://ithelp.ithome.com.tw/upload/images/20241005/20141794r1P9P4zaSC.png

點到這個 Job 的 Log 可以發現最後執行失敗了QQ
https://ithelp.ithome.com.tw/upload/images/20241005/201417948uPkpoRWQx.png

不過仔細想想這環境也真奇怪,在 Docker Container 裡面建立一座 Kubernetes Cluster,這座 Cluster 裡面又建立了一個 Runner Pod,這個 Pod 裡面又建立了一個 Docker Container 來 Build Image XD

明天再來繼續 Debug 吧~


上一篇
Day 20:PEM
下一篇
Day 22:DinD
系列文
在Local建立完整的開發環境筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言