GitLab .gitlab-ci.yml CI CD AWS ECR EKS GCP GCR GKE


.gitlab-ci.yml 就是在定義一整個流程,在 GitLab CI/CD 上面就稱為 Pipeline

Pipeline 底下又可以分成多個 Stage, 每個 Stage 又可以有多個 Job


首先先定義我們有多少個 Stage, 執行的順序會根據排列的順序

stages:
  - test
  - build

接下來宣告 Jobs

unit_test: # Job 的名稱
  stage: test # 指定是某個 Stage
  script: # Job 所要執型的內容
    - echo "unit_test"

Jobs 的執行順序,會是同一 Stage 的 Jobs,依據排列順序執行

寫到這裡,相信大家就會有疑問了,既然是使用 GitLab Shared Runner,哪裡來的 go 環境可以操作,又怎樣指定我們要的 go 版本

在這雲端化的時代,最簡單的選擇,當然就是使用 Docker 來解決這個問題

我們可以在 yaml 檔定義要使用哪個 Docker Image 來執行所有的 Job,也可以指定單一 Job 使用哪一個

image: docker:19.03.11 # 全局設定,只要 Job 自己沒有指定,就會使用這一個

stage:
  - test
  - build

unit_test:
  stage: test
  image: golang:1.14.3-alpine # Job 自己指定了要使用的 Docker image
  script:
    - echo "unit_test"

build_App:
  stage: build
  script:
    - echo "build_App"

以上面這一個範例來說

unit_test 會跑在 golang:1.14.3-alpine 的 Container

而 build 則會跑在 docker:19.03.11 的 Container


另外一個問題來了

如果某些 Job 我只想要指定在某些 Branch,或者只有某些 Branch 不執行,那該要怎樣做呢 Link

stage:
  - test
  - build

unit_test:
  stage: test
  only:
    - master
  script:
    - echo "unit_test"

build_App:
  stage: build
  except:
    - master
  script:
    - echo "build_App"

以上面這一個範例來說

unit_test 只會在 master 這一個 Branch 上面跑

build_App 只會在 master 以外的 Branch 上面跑


Pipeline 的設定先介紹到這邊

打完收工