[英]GitLab CI Setting a variable within another variable
我有一個類似這樣的 CI 腳本設置,包含 3 個文件:
# file Vars
.def-vars:
STAGING_SSH_DEST: mysite.com
PROJECT_ROOT: myRoot
# file gitlab-ci
variables:
extends: .def-vars
STAGING_SSH_DEST: myrealsite.com
PROJECT_ROOT: /myRealRoot
deploy-stage:
extends: .deploy
variables:
SSH_DESTINATION: $STAGING_SSH_DEST
# file deploy
.deploy:
variables:
SSH_DESTINATION: mysite.com
RSYNC_DESTINATION: $SSH_DESTINATION:$PROJECT_ROOT
我將我的文件和變量分開,以增加腳本的可重用性。
我的想法是,因為我有多個站點目的地,暫存產品,我希望能夠將 ssh 目的地傳遞給每個目的地,並讓工作自行找出 rsync。 問題是,變量擴展並沒有像我想象的那樣工作。
在部署腳本中,我添加了一個打印並得到以下內容:
$ echo $SSH_DESTINATION # This is the variable name local to job
myrealsite.com # Yep! printed the passed in value
$ echo $RSYNC_DESTINATION # $SSH_DESTINATION:$PROJECT_ROOT
$STAGING_SSH_DEST:/myRealRoot # That is the name of the variable passed in
root 和 SSH_DESTINATION 打印得很好。 追加兩者時,前者似乎擴展了一次太少了。
我已經有了在腳本部分中創建 rsync 變量的想法,但我想避免這種情況,因為我希望能夠在不編輯.deploy
作業的情況下覆蓋 rsync 變量。
如何做到這一點?
Gitlab CI 變量存在問題,阻止您使用extends
設置正確擴展變量。 您解決此問題的選擇是:
before_script
的幫助下使用此解決方案,發布在上述問題中。 存在一些限制,但對於簡單的東西,它工作得很好。 before_script:
- export VAR1="${CI_PIPELINE_ID}"
- export VAR2="test-${VAR1}"
使用GitLab 15.6 (2022 年 11 月),“在另一個變量中設置一個變量”應該更容易
支持 CI/CD 變量中的特殊字符
以前,很難在 CI/CD 變量中使用
$
字符,因為$
通常表示另一個變量的開始。
GitLab 會將其解釋為變量並嘗試對其進行擴展。在此版本中,我們引入了
variable: expand:
關鍵字,它允許您將變量標記為“原始”。
原始變量可以包含任何特殊字符,並且在傳遞給 GitLab 運行程序時不會擴展。
和:
variables:expand
:variables:
VAR1: value1
VAR2: value2 $VAR1
VAR3:
value: value3 $VAR1
expand: false
The result of VAR2 is value2 value1.
The result of VAR3 is value3 $VAR1.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.