隨著 GitLab 每個月固定釋出新版本持續的演進,GitLab CI/CD YAML 的語法也陸續有一些更新、調整,難免,也會有一些語法會進入棄用階段,這一篇將會列出現行 GitLab CI/CD YAML 的語法,有哪些已經宣告即將停用,也會順帶提出目前可能的替代方案。
在目前最新版本的 GitLab 手冊中 Deprecated keywords紀錄著即將停用的語法關鍵字,這邊會分為幾個部分紀錄:
.gitlab-ci.yml
的 global 區域,目前宣告,需要移動到 default
區段,如:image
、services
、cache
、before_script
、after_script
,移動後語法沒有變化,只是改放置到 default
區段下,例如手冊上的範例:
default:
image: ruby:3.0
services:
- docker:dind
cache:
paths: [vendor/]
before_script:
- bundle config set path vendor/bundle
- bundle install
after_script:
- rm -rf tmp/
only
/except
調整為 rules
語法另外,還有一系列語法是預備完全棄用的,如 only
/except
這一對語法,主要原因是因為這語法可以由 rules
完全取代,因為彼此可以替代的語法同時存在 Job 中時,兩者很容易有所混淆。雖然目前還沒直接停用,也建議使用者目前可以把語法一律調整為 rules
。
透過 only
/ except
設定 Job 只在特定分支執行,或不在特定分支執行:
job1:
script: echo
only:
- main
- /^issue-.*$/
- merge_requests
job2:
script: echo
except:
- main
- /^stable-branch.*$/
- schedules
使用 rules
可以直接以 rules:if
替代,可以修改如下:
job1:
script: echo
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_BRANCH =~ "/^issue-.*$/"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
job2:
script: echo
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_BRANCH !~ "/^stable-branch.*$/"
- if: $CI_PIPELINE_SOURCE == "schedule"
==
及 不相等 !=
if: $VARIABLE == "some value"
if: $VARIABLE != "some value"
=~
與不成立 !~
if: $VARIABLE =~ /^content.*/
if: $VARIABLE !~ /^content.*/
&&
、前後邏輯 OR ||
($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH == "develop") && $MY_VARIABLE
在 only
/except
的說明內容中有提到,所有的 job 當沒有設定條件時,其 only
的預設值如 job2,這邊說明的是因為有預設值,所以 job1 及 job2 的執行條件其實是一致的:
job1:
script: echo "test"
job2:
script: echo "test"
only:
- branches
- tags
當未來 only
/except
正式移除之後,可以想像,其代表的則會是:
job2:
script: echo "test"
rules:
- if: $CI_COMMIT_BRANCH
- if: $CI_COMMIT_TAG
if: $CI_COMMIT_BRANCH
代表的是當有 git 進行 push 到任何分支的動作而 if: $CI_COMMIT_TAG
則是代表有 push 任何的 tag。
其他原本可以在 only
/except
中使用的還有 only:changes
及 except:changes
其可以直接以 rules:changes
替代就不再贅述。
隨著 GitLab 每個月的版本推進,在每個月的變更清單中,可以看到 GitLab 持續不斷的調整讓 CI/CD 的環境變得更加彈性、靈活,還有可以重複使用,當然有變更,就多少會有一些相對比較不成熟的功能做停用或棄用,如果要跟著 GitLab 一起前進,適時的檢視身邊的 CI/CD YAML 並對其做一些重構也是必要的。我是墨嗓(陳佑竹),期待這次的內容能帶給你實用的啟發與幫助。