簡體   English   中英

Gitlab CI:正確使用變量中的變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM