[英]Gitlab CI: use variable in variable correctly
我有這樣的 Gitlab CI/CD 管道:
.template: &template
image: ubuntu
stage: pre
script:
- echo "Startin process..."
- echo $PROJECT_NAME
- VAR1=$( ls )
- echo "LIST_${PROJECT_NAME}=${VAR1}" >> pre.env
artifacts:
reports:
dotenv: pre.env # Export variables to other stages
job1:
variables:
PROJECT_NAME: ProjectA
<<: *template
job2:
variables:
PROJECT_NAME: ProjectB
<<: *template
###########################################
.final-template: &final-template
image: ubuntu
stage: finish
script:
- echo "Run final jobs"
- echo $LIST_ProjectA # works
- echo $LIST_ProjectB # works
- echo $LIST_${PROJECT_NAME} # doesn't work
- VAR1=$LIST_${PROJECT_NAME} # doesn't work
- echo $VAR1 # contains just 'ProjectA' for final-job1 and 'ProjectB' for final-job2
# code using VAR1 value
tags: [ k8s,mn-bw-krun01 ]
final-job1:
variables:
PROJECT_NAME: ProjectA
<<: *final-template
needs: [ "job1" ]
final-job2:
variables:
PROJECT_NAME: ProjectB
<<: *final-template
needs: [ "job2" ]
所以我將環境變量保存在 job1 和 job2 中。 如果使用全名,我可以在下一階段打印它們:
- echo $LIST_ProjectB # works
但我想動態使用它們 - 使用另一個變量$PROJECT_NAME
:
echo $LIST_${PROJECT_NAME} # doesn't work
我嘗試了 ()、{} 和 $ 的所有可能(如我所想)組合,但永遠無法得到結果 - 始終為空值或只是PROJECT_NAME
的值。
在這種情況下如何正確使用變量中的變量?
我找到了答案(感謝這個答案)
保存變量:
stage: pre
script:
- echo "Startin process..."
- echo $PROJECT_NAME
- VAR1=$( ls )
- echo "LIST_${PROJECT_NAME}=${VAR1}" >> pre.env
artifacts:
reports:
dotenv: pre.env # Export variables to other stages
使用變量:
stage: finish
# remember - we define PROJECT_NAME here in variables!
# I skipped it in example because of using anchors
script:
- echo "Run final jobs"
- VAR_TMP=LIST_${PROJECT_NAME} # create tmp var
- echo $VAR_TMP # this prints correct the NAME of variable
- echo ${!VAR_TMP} # this prints correct VALUE of that variable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.