Gitlab – .gitlab-ci.yml (Pipeline -> Stage -> Job)

Loading

上傳到 GitLab 的程式有辦法自行進行測試嗎? 可以透過 CI/CD 的功能. 我們須編輯 .gitlab-ci.yml 檔案來指定整個流程

下面的範例使用 Windows 當作 Runner , 須先建立好 Gitlab Runner – Windows shell ( PowerShell) – https://benjr.tw/106161

將我們的專案 .gitlab-ci.yml 設定如下( 範例是 參考文章 https://editor.leonh.space/2022/gitlab-ci/ ).

stages:
  - build
  - test
  - deploy

default:
  tags:
    - windows
  before_script:
    - Set-Variable -Name "time" -Value (date -Format "%H:%m")
    - echo ${time}
    - echo "started by ${GITLAB_USER_NAME}"

build-job:
  stage: build
  script:
    - echo "running scripts in the build job"

test-job1:
  stage: test
  script:
    - echo "running scripts in the test job 1"

test-job2:
  stage: test
  script:
    - echo "running scripts in the test job 2"

deploy-job:
  stage: deploy
  script:
    - echo "running scripts in the deploy job"

整個架構流程為

Pipeline -> Stage -> Job

  • Pipeline
    整個 Pipeline 是由 不同的 Stage ( 上面範例為 : build , test , deploy) 所組成 ( 當前面 Stage 失敗之後,後面的 Stage 就會暫停 ).
  • Stage
    不同的 Stage 包含不同的 Job (如: test stage 就包含 test-job1 與 test-job2 ),同一個 Stage 所執行的時間點是依序的 ( 在 build stage 結束後會依序執行 test stage 的 test-job1 與 test-job2 )
  • Job
    每個 script 所定義的實際工作內容 ,可以定義多個 script 來依序執行 , 也可以使用 before_script 或是 after_script 在執行這些 script 的前後來執行.

執行結果:

各別點進去可以看到詳細執行內容.

來看一下 .gitlab-ci.yml 設定檔案寫了什麼, 詳細參數使用方式請參考 – https://docs.gitlab.com/ee/ci/yaml/#keywords

Stage 指定我們要依序執行那些 pipeline (流水線),這邊定義了 build , test , deploy 3個流水線.

stages:
  - build
  - test
  - deploy

每個 Job 共用的工作可以定義在 預設 default 區塊.

default:
  tags:
    - windows
  before_script:
    - Set-Variable -Name "time" -Value (date -Format "%H:%m")
    - echo ${time}
    - echo "started by ${GITLAB_USER_NAME}"

可用以下關鍵字作定義:

  • after_script
    每個 Job 執行後須做的動作.
  • artifacts
  • before_script
    每個 Job 執行前須做的動作.
  • cache
  • hooks
  • id_tokens
  • image
  • interruptible
  • retry
  • services
  • tags
    指定要執行哪一個 runner .
  • timeout

接下來就是定義 不同的 Stage 與其執行的 Job 內容.

build-job:
  stage: build
  script:
    - echo "running scripts in the build job"
test-job1:
  stage: test
  script:
    - echo "running scripts in the test job 1"

test-job2:
  stage: test
  script:
    - echo "running scripts in the test job 2"
deploy-job:
  stage: deploy
  script:
    - echo "running scripts in the deploy job"

預設只要 Project 內的程式有更新就會建立 pipeline 來進行測試,如果需要指定狀況才執行 pipeline 可以透過定義 workflow 來避免太頻繁的 pipelines 工作,詳細請參考.

沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料