Try   HackMD

Gitlab CI/CD 概念


pipeline & stage & job

  • push 最後的 commit 對應 1 pipeline
  • 1 pipeline 可以有 n stage
  • 1 stage 可以有 n job
  • job 在獨立的 container 跑
  • 同 pipeline 下,stage 有先後順序
  • 同 stage 下的 job,可以平行執行

在我們的DevOps環境


GitLab Runner幫我們做好的事


如果只有改vMME,你只要

  • git push 之後,就會自動產生 pipeline,除非
    就要看 FAQ

vMME 的 CI/CD

  • vMME .gitlab-ci.yml 目前有兩個 stage
  • Test stage - 有一個 make job 會做編譯
  • Deploy stage - 有一個 push_image job 必須手動點三角形,就會把 vmme image 上傳至 http://docker5gc.nmsi.pri:8080/

上傳好的 image 長這樣

  • 專案名稱:commit SHA前八碼

如果要變動vMME的執行環境

例如:新增 library、新增工具


buildenv 的 CI/CD


Part I 修改 buildenv

  1. git clone buildenv
    修改 Dockerfile,例如多一行 apt-get install abby-lib
  2. git commit & push buildenv

Part II 確認 buildenv版本

記住 buildenv:c3f9b97e


Part III 修改 vMME 的 Dockerfile

  1. git clone vMME
  2. 修改 FROM
  3. git commit & push

Private Docker Registry


Prerequisite

  • 機器要先裝好 docker engine
  • docker設定
{
  "live-restore": true,
  "group": "docker",
  "insecure-registries": ["docker5gc:5000"]
}
  • docker info

FAQ


failed

  • pipeline 如果 failed 就要進去看job
  • 跟 docker 有關,就找 Abby
  • library 裝不起來、少了library,去改 buildenv
  • vMME 裡面的問題,自己 debug

pending

  • pipeline 如果 pending 就要進去看job
  • job 如果 pending 太久,表示 gitlab-runner 不夠多,就找 Abby

單元測試相關的 Stage


解釋所有 Stage 的功能

  • Prepare Stage - 編譯、建置暫時的 Docker image
  • Test Stage
    • check_executable - 確認執行檔是否存在
    • unit_test - 以暫時的 image 起動 container,跑 unit test,複製 container 裡的單元測試報告與覆蓋率報告到 GitLab GUI,以供下載
  • Post-test Stage
    • clean_test_env - 刪除測試用途暫時的 image 及 container
    • update_coverage_report_server (only master) - 上傳覆蓋率報告到 http://codecov5gc:8080/
  • Package Stage & Deploy Stage - 手動觸發,跟單元測試無關

Prepare stage


如果要寫 unit test

  • 參考 unit-test/authTest
  • 會用到的所有 Makefile 要有 必要變數必要 g++ gcov flags

Makefile

  • 自己的 Makefile,要自己加變數
  • 共用的 Makefile,已經加好 g++ gcov flags 了
  • 如果要另外創造共用的 Makefile,就要自己加 g++ gcov flags

哪些地方的 Makefile 要注意

  • unit-test/Makefile
  • unit-test/authTest/Makefile
  • 因為有用到 ulibs/auth/Makefile,要找它的g++在哪個檔案?
  • 因為有用到 ulibs/ilog/Makefile,要找它的g++在哪個檔案?
    這樣會沒完沒了

make-rules/* 已經全加 gcov flags 了

在 GitLab Prepare Stage 才會加上 GITLAB_GCOV_FLAGSGITLAB_GCOV_LDFLAGS,在其他環境編譯時不會有作用。

  • make-rules/MakeRules.global.hostType

舉例

  • make-rules/MakeRules.shared-lib
  • make-rules/MakeRules.user-bin

所有 make-rules/*,全加好了。
如果要新建 共用的 Makefile 就要自己加。


Test Stage

unit_test job failed

  1. 可以去下載報告(報告會保留七天)


    <failure><error>的訊息。

  2. Merge Request 時,也會被發現


    點開來


Unit Test Report

<failure><error>,代表那筆testcase有問題。



Code Coverage Report

看到自己 branch 的 code coverage report

Code Coverage Rate 計算方式

  • Lines - 紅色行代表未執行;綠色行代表至少執行過一次;白色行代表註解不採計
  • Branches - 打勾代表有執行過的case;打叉代表沒執行過的case

Post-test Stage

  • update_coverage_report_server
    在 master branch 會再把 coverage.html 上傳到 codecov5gc:8080
  • clean_test_env - 刪除測試用途暫時的 image 及 container