Gitlab 中的變數可以在幾個地方設定:
- 在群組設定中
- 在項目設定中
- 裡面.gitlab-ci.yml
在這種情況下,群組和項目設定中的變數可以設定為“檔案”或“常規變數”,並選取“受保護”和“屏蔽”複選框。
我們先從簡單的繼承開始,逐漸變得更複雜。
最終的優先列表可以在文件末尾找到。
組繼承 [來源]
來自組的變數是繼承的,規則是距離項目越近的組,其值越重要。
具有變數的組
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
管道結果
$ echo $MSG
B
如果變數沒有在 B 組中指定,那麼我們會看到值 A。
繼承 .gitlab-ci.yml 中的變量 [來源]
這裡的一切都非常簡單:您可以全域設定一個變量,也可以在作業中覆寫它。
具有變數的組
.gitlab-ci.yml
現在讓我們建立 2 個作業,在其中一個作業中我們將明確指定 $MSG。
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
管道結果
- 迴聲:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- 與變數回顯:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
與群組和 .gitlab-ci.yml 內部的繼承 [來源]
讓我們試著結合前面的兩個例子。 群組變數優先於 .gitlab-ci.yml 內的變數。
具有變數的組
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
管道結果
- 迴聲:
$ echo $MSG Y Job succeeded
- 與變數回顯:
$ echo $MSG Y Job succeeded
透過在項目設定中指定變數進行繼承 [來源]
專案設定中的變數始終具有最高優先權! 且 .gitlab-ci.yml 中指定的變數不起任何作用。
具有變數的組
組變數的優先權較低。
.gitlab-ci.yml
讓我們使用前面範例中的文件。 這裡再次在 .gitlab-ci.yml 中指定了變量,但組內的變量仍然優先於它們。
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
管道結果
- 迴聲:
$ echo $MSG project-3 Job succeeded
- 與變數回顯:
$ echo $MSG project-3 Job succeeded
空值繼承 [來源]
空值也是一個值
空值不等於 Null
具有變數的組
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
管道結果
- 迴聲:
$ echo $MSG Job succeeded
- 與變數回顯:
$ echo $MSG Job succeeded
使用 include 和 groups 進行繼承 [來源]
這裡我們將嘗試將project-2包含在project-3中
在這種情況下,團體具有優先權。
具有變數的組
.gitlab-ci.yml
並在 .gitlab-ci.yml 中全域設定變量
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
管道結果
- 迴聲:
$ echo $MSG B Job succeeded
- 與變數回顯:
$ echo $MSG B Job succeeded
繼承包含 [來源]
這裡我們將嘗試將project-2包含在project-3中。
條件是:團體和專案本身都沒有任何變數。
具有變數的組
.gitlab-ci.yml
與前面的範例相同
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
管道結果
- 迴聲:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- 與變數回顯:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
結果如下 優先事項:
- 項目設定中的變數
- 組中的變數
- 作業內嚴格指定的變數(包括包含的文件)
- .gitlab-ci.yml 內的全域變量
- 包含文件內的全域變數
結論
最不明顯的一點是,「變數離程式碼越近,它就越重要」這一規則首先適用於群組,然後同樣的規則適用於 .gitlab-ci.yml 中的變量,但僅在以下條件下有效組中的變數未指定。
接下來,重要的一點是要了解主 .gitlab-ci.yml 和包含的 .gitlab-ci.yml 的全域空間是通用的。 並且發生包含的文件具有優先權。
來源: www.habr.com