charles
Charles
gitlab

stages: unit-test (Golang)

stages: unit-test (Golang)
0 views
3 min read
#gitlab

開始需注意:

  • Group Runner 已經建立成功
  • 在專案的根目錄上新增 .gitlab-ci.yml 檔案
  • 如果還沒有建立 Group Runner 這有

Q:什麼是 .gitlab-ci.yml

A:Gitlab CI/CD Pipeline 是Gitlab 平台上的一個自動化流程,其中包括了多個階段,如建置、測試、封裝、部署等。 開發人員可以通過在 Repo 上編寫 .gitlab-ci.yml 文件,定義整個流程的每一個階段,以及每個階段所需要執行的指令。

以下是 .gitlab-ci.yaml 檔案範例

Stage 是控制要執行的循序 unit test, coverage, build 和 deploy

  • stages: 階段可以包含零個、一個或多個要執行的作業
  • test stages: 做 Unit-test 單元測試
  • build stages: 使用 docker ci build images
  • deploy stages:是 deploy 至到 GCP Cloud Run / GKE 上
stages:
  - before
  - test
  - build
job-before_script:
  image: golang:latest
  stage: before
  - cd app
  - go mod tidy
  - $HOME/go/bin/swag init
  - mkdir GcpFile
job-test:
  stage: test
  image: golang:latest
  tags:
    - shared
  script:
    - cp $ENV_TEST .env.test
    - cp $GCS_KEY_FILE_CONTENT_DEV ./GcpFile/rpa-gcs.json
    - cp $GOOGLE_MEMORY_STORE_CA_FILE_CONTENT_DEV ./GcpFile/redis_dev_cert.pem
    - go test --coverprofile=coverage.out ./...
# Build Image to Artifacts Registry & Deploy To Cloud Run Demo Env
job-build-dev:
  stage: build
  image: google/cloud-sdk:latest
  tags:
    - shared
  script:
    - cp $ENV_DEV .env
    - cat .env
    - cp $GCS_KEY_FILE_CONTENT_DEV ./GcpFile/rpa-gcs.json
    - cp $GOOGLE_MEMORY_STORE_CA_FILE_CONTENT_DEV ./GcpFile/redis_dev_cert.pem
    - gcloud auth activate-service-account --key-file=$RPA_SA
    - gcloud config set project bot-detection-201904
    - gcloud builds submit --region=asia-northeast1 --config=../cloudbuild.dev.yaml .
  rules:
    - if: $CI_COMMIT_BRANCH == "feature"

兩種類型的stages

test :做 Unit-test build :使用 cloudbuild.yaml build docker images 接著 deploy 至到 Cloud Run 上

stages:
  - test
  - build 

job 開始前的前置作業,此區塊可有可無,請依照個人需求填寫需要的指令

before_script:
  - cd app
  - go mod tidy
  - $HOME/go/bin/swag init
  - mkdir GcpFile

job-test

  • 有些檔案或訊息沒有上GitLab,可於Settings -> CICD -> Variables 設定,用$ 開頭後面接自訂的參數名稱的方式帶入,如底下的$ENV_TEST
  • 此job沒有寫rules,所以每次推程式上gitlab,都會執行此job
job-test: #job的名稱,可自行定義
  stage: test #設定目前job的stage類型
  image: golang:latest #設定環境、版本
  tags:
    - shared
  script: #依個人需求處理需要但沒在gitlab上的檔案及資訊,最後測試覆蓋率
    - cp $ENV_TEST .env.test
    - cp $GCS_KEY_FILE_CONTENT_DEV ./GcpFile/rpa-gcs.json
    - cp $GOOGLE_MEMORY_STORE_CA_FILE_CONTENT_DEV ./GcpFile/redis_dev_cert.pem
    - go test --coverprofile=coverage.out ./...  #測試覆蓋率