iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0

昨天 .gitlab-ci.yml 應該各位都有成功跑起來了, GitLab 都可以看到成功完成了,因此這篇要講一些 .gitlab-ci.yml 進階的技巧,讓你可以更加細緻的調整 CI/CD 的流程,使用起來更加的順手。

首先就讓我們複習一下基本的東西。

stages:
  - "build"
  - "test"
  - "deploy"

首先還是第一部分 stages ,這部分沒什麼好講的,就還是定義基本的 Pipeline 各個階段的名稱及順序。

build_job:
  stage: build
  script:
    - echo Build OK

test_job:
  stage: test
  script:
    - echo Test OK

deploy_job:
  stage: deploy
  script:
    - echo Deploy OK
  dependencies:
    - "test_job"
  only:
    - master

然後就是重點的第二部分,第二部分的大致上皆為同樣的結構,最外層的 Job 名稱, Job 內部再定義這個 Job 是運行在上方 Pipeline 的哪個階段 stage ;接著定義這個 Job 主要運行的指令 script ,並且可以以條列的方式執行多行指令。第二部分基本上就是這樣。

接著就要禁入今天的正題了, .gitlab-ci.yml 的一些進階的用法。

第一個是還蠻常用的 image ,我通常放在最上方,主要是定義接下來 CI/CD 的整個流程主要的執行環境;有看過前 10 篇的應該對這個名稱都不陌生,因為 GitLab 就是用 Docker 幫你開好環境的(如果你有注意的話,在前幾天註冊 Runner 時就曾經飛過一個關鍵字叫 Docker )。

因此如果我們需要某些比較特殊的環境,我們可以自己打包出 Image 並在這邊使用。

舉例來說,現在有個 Flask 專案(歡迎各位參考我去年的鐵人賽文章偷葉配一下),我們可以將上方的 YAML 檔改成這樣。

image: python:latest

stages:
  - "build"
  - "test"
  - "deploy"

build_job:
  stage: build
  script:
    - echo Build OK

test_job:
  stage: test
  script:
    - echo Test OK

deploy_job:
  stage: deploy
  script:
    - echo Deploy OK
  dependencies:
    - "test_job"
  only:
    - master

接著是雖然 Python 用不太到,但其他語言可能會用到的 artifacts ,位置在 Job 中(跟 stage 及 script 同一階層),單看這個詞似乎不太能理解它是幹嘛的對吧,簡單說就是如果需要編譯的語言經過了編譯之後,編譯出來的東西需要找個地方暫存時, GitLab 所提供的一小塊空間放置編譯完檔案的地方,這邊因為我主要是使用 Python ,基本上不會使用,因此不演示給各位看了(話說我有點想學 Golang ,明年也許可以學完後再補上這部分)。

最後一個是 rules ,這個就比較特殊了,就是定義這個 Job 在符合怎麼樣的條件時才會執行,大概樣子就如下方所示(雖然好像跟 only 重複了,不過看得懂就好)。

image: python:latest

stages:
  - "build"
  - "test"
  - "deploy"

build_job:
  stage: build
  script:
    - echo Build OK

test_job:
  stage: test
  script:
    - echo Test OK

deploy_job:
  stage: deploy
  script:
    - echo Deploy OK
  dependencies:
    - "test_job"
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
  only:
    - master

那麼就先到這邊,這三個進階的功能我覺得是比較重要的,因此特別提出來說明一下。

大家掰~掰~


上一篇
Day 27 gitlab-ci.yml
下一篇
Day 29 GitLab CI/CD
系列文
30天漫遊雲端之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言