GitLab 結合 Docker 容器開發測試

Philip Zheng
Aug 27, 2017 · 9 min read

感謝各位學員參加廣宣學堂Docker 進階班,因時間限制,未能詳細說明 GitLab 和 Azure CLI 相關設置步驟。故附上此篇教學文件,希望能幫助各位自行學習和操作。

此文章主要講解 GitLab 基本使用,涉及 Git 版本控管,GitLab CI 持續整合 pipeline 和存放容器映像檔的 GitLab Registry ,如圖一,三位一體的整合功能,示範如何透過 Dockerfile 建置出映像檔,並存放到 GitLab 內建的 Registry ,再使用包裝成容器映像檔的測試工具作壓力測試,最後存放到 Docker Hub,並且透過 Azure CLI 上線到 Azure PaaS 網站,整個建置、測試、部署、上線,這四個階段都是使用容器。

圖一:GitLab 三合一示意圖

設定 Auzre PaaS 服務

由於此範例最後是自動上線到 Azure PaaS 服務,所以先設定好 Web 應用環境,首先登入到 Azure Portal,點選左邊加號,選擇「Web + 行動」,按下「Linux 上的 Web 應用程式」選項,如圖二,按下後,填寫欲使用的網址、資源群組,以及設定使用容器,按下後即可看到如圖三的多種容器儲存庫選項,包含 Azure Container Registry 、Docker Hub 和私人登錄(Private Registry),因主要著重在 GitLab 使用,為求範例單純,故使用 Docker Hub,選擇一個公用容器映像檔,最後記得按下”建立”。

圖二:Azure Web App on Linux
圖三:Azure Web App 詳細設定內容

新增 GitLab 專案

接下來,為了透過 GitLab CI pipeline 自動化上線到 Azure PaaS ,先建立一個新專案,按下「New project」,選好專案名稱後,按下「Create project」,如圖四。在本地端開啟終端畫面,輸入 `git clone https://gitlab.com/philipz/paas-ci` ,複製專案到本地端,並且把進階課程的 Section_6 範例內容,複製到專案目錄中。

圖四:GitLab 新增專案畫面

取得 Azure CLI 上線所需參數

取得所需 Azure 參數有兩種方式,第一種是利用 Azure CLI 容器方式,第二種是直接用 Azure Portal 網頁上的 Cloud Shell ,如圖五,步驟皆相同,差別只在第一種是先執行 `docker run -it azuresdk/azure-cli-python`,另一個是直接用內建 Azure CLI 的 Web 終端機,啟動好 Azure CLI 終端畫面,先輸入 `az login` 來認證身份,需要開啟瀏覽器,並輸入那認證字串,認證通過後,即可輸入 `az ad app list` 查詢前面所設定的 Azure PaaS 服務內容,詳細 Azure CLI 指令說明,請參閱 Azure CLI 2.0 Reference

再來,需建立可供 GitLab CI pipeline 使用的 Azure 服務主體,詳細說明請參考使用 Azure CLI 2.0 來建立 Azure 服務主體,步驟如下:

1. 確認登入完成,輸入`az ad sp create-for-rbac — name {appId} — password “{strong password}” `,其中 {appId} 為自動上線程式名稱,{strong password}是自行設定的密碼。

2. 按下ENTER,便出現相關參數,請記下 appIdpasswordtenant ,在 GitLab 設定中,需要在 pipeline 畫面中填寫。

圖五:Azure Cloud Shell

在 GitLab pipeline 設定 Azure 參數

回到前面建立的 GitLab 專案,選擇「Settings」,再按下「Pipelines」,可看到 CI 生產線的相關設定,往下移動到「Secret variables」,分別新增下列的 Key 和 Value :

1. KEY: AZURE_LOGIN_USER ,填入前面的 appId

2. KEY: AZURE_PASSWORD ,填入前面的 password

3. KEY: AZURE_TENANT ,填入前面的 tenant

4. KEY: DOCKER_USER ,請輸入您的 Docker Hub 帳號。

5. KEY: DOCKER_PASS ,請輸入您的 Docker Hub 密碼。

6. KEY: GITLAB_USER ,則輸入您的 GitLab 帳號。

完成後,請開啟從進階課程的 Section_6 範例內容,複製到專案目錄的 .gitlab-ci.yml 檔案,在variables:中的 DOCKER_IMAGE_NAME: ,需將 “paas-ci” 改為您的專案名稱。

這檔案配置了四個步驟, build 、test 、deploy 和 release ,每個步驟皆可對應到下面的內容,而 GitLab CI 撰寫詳細說明,請參閱 Configuration of your jobs with .gitlab-ci.yml,以下分別說明四個步驟的內容。

build

此步驟單純利用專案內的 Dockerfile 來建置出容器映像檔,並設置標籤為 registry.gitlab.com/$GITLAB_USER/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG ,接著登入到 GitLab Registry ,並 Push 到 GitLab Registry 儲存庫。

test

接著,由於每個步驟都是獨立容器環境,因此必須重新 pull 剛建置出的映像檔,故 `docker login` 和 `docker pull` ,並建立一個名為 wrktest 的 docker network ,分別啟動前面所建置的映像檔,命名為 app ,等待五秒後,再啟動另一個內建[網頁壓力測試工具](https://github.com/wg/wrk)的 williamyeh/wrk 映像檔,並針對 app 容器執行壓力測試 `wrk -t2 -c5 -d5s — timeout 2s http://app/` ,再把結果存到 test/result.txt ,由於此環境沒有 bash shell ,需安裝(`apk add — update bash bc`)才能透過 test.sh 來檢查壓力測試的結果是否符合標準,只要超過 1000 個 request ,便會印出 Performace Tests passed 的結果,若失敗則為 Performace Tests failed

deploy

這步驟只是把原本通過測試的網頁映像檔,從 GitLab Registry 取得後,存放到 Docker Hub 上,當然若有自架 Private Registry 或 Azure Container Registry 亦可使用。

release

最後步驟,就是藉由 azuresdk/azure-cli-python 映像檔所啟動的容器,來執行 `az login — service-principal -u $AZURE_LOGIN_USER — password $AZURE_PASSWORD — tenant $AZURE_TENANT` 和 `az appservice web config container update -n AZURE_PAAS_NAME -g RESOURCE_GROUP -c $DOCKER_USER/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG` 的 release.sh 腳本程式,記得將 AZURE_PAAS_NAME 替換成前面 Azure PaaS 服務所設定的網址名稱, RESOURCE_GROUP 則是資源群組名稱,利用 docker run -e 來設定環境變數,將前面設定的 Key/Value 帶入到容器中,以便 Azure CLI 使用,呼叫 Azure PaaS 使用 deploy 階段所佈署好的映像檔。

實際運作

解說完整個 GitLab CI pipeline 步驟,就動手將此專案上傳到 GitLab ,並實際運作 CI 生產線,記得修改好 .gitlab-ci.yml 檔案中的 DOCKER_IMAGE_NAME: DOCKER_IMAGE_TAG: 亦可改成自己的版本號。完成後,輸入 `git add .` ,再 commit `docker commit -m “First init.”` ,最後 push 到 GitLab ,`git push` 。

上傳後,CI pipeline 便開始運作,畫面如圖六,四個階段完成後,便可開啟 Auzre PaaS 網址,查看是否生效,也可修改 index.html 網頁內容,再 git push 上去,自動上線新版網頁,等待 pipeline 完成後,開啟 Azure PaaS 網址,就可看到如圖七的網頁。

圖六:GitLab pipeline 畫面
圖七:Azure PaaS 自動上線完成網頁

這便是 GitLab 生產線結合 Docker 容器開發、測試、佈署、上線的整合應用說明。

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade