gitlab
stages: unit-test (Golang)
開始需注意:
- 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 ./... #測試覆蓋率