Bash
在 yaml gitlab ci 中從 bash 中失去變數
需要幫忙
我正在學習 bash 和 gitlab
不能讓它工作
gitlab 管道 .gitlab-ci.yml
variables: var1: test1 var2: test2 stages: - build build-job: stage: build script: - | bash -s << EOF #!/bin/bash test1 () { echo $var1 test3=$var1 } test2 () { test1 echo $var2 echo $test3 } test2 EOF
’''
得到了錯誤的答案
’''
執行作業腳本的“step_script”階段 00:00
$ bash -s << EOF # 折疊的多行命令
測試1
測試2
作業成功
失去變數 test3
’''
相同的 bash 腳本 test.sh
#!/bin/bash test1 () { echo $var1 test3=$var1 } test2 () { test1 echo $var2 echo $test3 } test2
’''
$ export var1=test1 $ 導出 var2=test2
$sh 測試.sh
得到了很好的答案這是正確的:
測試1 測試2 測試1
但是yaml構造在函式之間失去了變數test3
我知道從 gitlab ci 執行 test.sh,但我需要在 yaml 中以文本形式執行它我該怎麼做?
謝謝
正如我對您上一個問題的回答中提到的,需要引用此處的文件。如果不是,則變數的擴展(以及任何其他擴展)將在
bash -c
腳本執行之前由呼叫 shell 執行。如果您還雙引號在
bash -c
腳本中的每個擴展,那將是最好的。所以:
bash -s <<'END_SCRIPT' test1 () { echo "$var1" test3=$var1 } test2 () { test1 echo "$var2" echo "$test3" } test2 END_SCRIPT
(請注意,由於您
bash
顯式執行腳本,因此不需要#!
-line。)如果您沒有在 here-document 的開頭引用 here-document 分隔符,則為執行
bash -c
腳本而啟動的 shell 將替換所有變數。假設var1
和var2
存在於環境中作為值test1
和test2
,將執行的腳本將等效於以下內容:bash -s <<END_SCRIPT test1 () { echo "test1" test3=test1 } test2 () { test1 echo "test2" echo "" } test2 END_SCRIPT