昨天我們成功透過 HTTPS 將新建立的專案複製下來,今天要來嘗試使用 GitLab CI 來 Build 我們的 Image。
首先我會在 Docker Hub 也建立一個名為 hello-world
的 Private Repository,而我們的 Image 名稱會是以 <username>/hello-world:tagname
的形式來呈現。
這邊我們還需要先將 Docker Hub 的 Username 與 Password 記下來,之後要 Build Image 會需要登入 Docker Hub 取得權限。
要使用 GitLab CI,我們會需要先在專案的最外層建立一個名為 .gitlab-ci.yml
的檔案,這樣我們的 GitLab 專案會自動根據這裡面設定的條件來執行相對應的操作。
以下是 .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 上。
可以注意到這邊有幾個變數:
<username>/hello-world:tagname
。以上四個變數除了第四個 CI_COMMIT_SHA 會自動帶入以外,都需要我們自己定義。可以選擇寫在 .gitlab-ci.yml 中,也可以直接定義在 GitLab 裡,一般來說 Password 這一類的 Credential 都不會明碼寫在專案內的。
左側的 Settings > CI/CD 可以進入變數的管理頁面 Variables
,點擊 Add variable 後就可以新增變數。
可以看到我將上述三個變數新增到 Variables 中,這樣之後執行 GitLab CI 就可以在這個專案自動帶入這些變數。
寫完 .gitlab-ci.yml 後,將其 Push 到我們的 GitLab 內,這邊可能會被要求登入或建立 Token,照著指示建立就行。
Push 後就可以在左邊的 Build 的 Pipelines 看到我們正在執行的 Job 了,而這個 Job 的執行環境就是我們的 Kubernetes Cluster 環境中的一個 Runner Pod。
點到這個 Job 的 Log 可以發現最後執行失敗了QQ
不過仔細想想這環境也真奇怪,在 Docker Container 裡面建立一座 Kubernetes Cluster,這座 Cluster 裡面又建立了一個 Runner Pod,這個 Pod 裡面又建立了一個 Docker Container 來 Build Image XD
明天再來繼續 Debug 吧~