GitLab CICD:結構介紹

許博淳
數據共筆
Published in
4 min readJun 3, 2022
圖片出處:https://www.fluentu.com/blog/spanish/wp-content/uploads/sites/2/2014/12/spanish-sentence-structure-a-beginners-guide.jpg

架構大概長成這樣,各部分的說明也寫在註解中

// 主要的工作階段
// 用來標示有哪一些階段,每一個階段不一定只有一個工作,實際有哪些工作在下面定義。
// 有順序性,以範例來說,a_stage 執行完才執行 b_stage。
stages:
- a_stage
- b_stage
first_part:
// 對應主要工作階段的哪一個部分
stage: a_stage
// 使用的 docker image,例如這邊就安裝 python
image: python:3.8-slim-buster
// 預先定義一些會使用到的變數
variables:
- GIT_DEPTH: ${MY_GIT_DEPTH}
// 在主程式碼前先執行的程式碼
before_script:
- echo "getting start ..."
- apt-get update && apt-get install -y git
// 主程式碼
script:
- pip install --no-cache-dir --upgrade mozilla-bigquery-etl
- FILES_CHANGED=$(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHA)
// 如果要多行執行,可以這樣寫
- >
for f in "$FILES_CHANGED"; do
if
[[ "$f" == *".sql"* ]];
then
bqetl format "$f"
fi
done
// 在主程式碼後執行的程式碼
after_script:
- echo "finished ..."
// 是否允許這個工作執行失敗
allow_failure: true
...

but, 就是這個 but,神奇的地方在這裡,結構是可以調整的!

以下是另外一個範例

stages:
- a_stage
- b_stage
// 如果是共通的需求,這些東西可以寫在外面
image: python:3.8-slim-buster
variables:
- GIT_DEPTH: ${MY_GIT_DEPTH}
before_script:
- echo "getting start ..."
- apt-get update && apt-get install -y git
first_part:
stage: a_stage
script:
- pip install --no-cache-dir --upgrade mozilla-bigquery-etl
- FILES_CHANGED=$(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHA)
- >
for f in "$FILES_CHANGED"; do
if
[[ "$f" == *".sql"* ]];
then
bqetl format "$f"
fi
done
// 可以在所有工作最後執行
after_script:
- echo "finished ..."
...

也就是說,共通的部份可以拉出來在最前面或最後面統一執行。

但就算有共通執行的部份,每個獨立工作中還是有自己宣告。

--

--