【问题标题】:How to retrieve value from LinkedHashMap using variables?如何使用变量从 LinkedHashMap 中检索值?
【发布时间】:2019-01-17 14:37:39
【问题描述】:

我想创建允许我访问不同 YAML 结构的变量。

envFile 是包含如下数据的 YAML 文件:

ENVNAME:
  MYSYS:
    MYSUBSYS:
      MYDETAIL:
        version: 1.0.0
        path: C:\wwwroot\sys
  MYSYS2:
    MYSUBSYS2:
      version: 1.0.1
      path: C:\wwwroot\sys2

重要的是MYSYS2没有MYDETAIL级别

在我正在使用的 Jenkins 管道中:

envs = readYaml file: envFile

然后我可以使用以下方法获取版本值:

verNum = envs."${environment}"."${sysName}"."${subSysName}"."${detailName}".version

但是当我想要获取 MYSYS2 的版本时,我应该使用 (no detailName):

verNum = envs."${environment}"."${sysName}"."${subSysName}".version

所以我需要变量取决于 sysName..

我想使用如下语法:

if (sysName == 'MYSYS'){
  mySuperVariable = "${environment}"."${sysName}"."${subSysName}"."${detailName}"
}
else if (sysName == 'MYSYS2'){
  mySuperVariable = "${environment}"."${sysName}"."${subSysName}"
}

(...)

sysVer = envs."${mySuperVariable}".version

【问题讨论】:

    标签: jenkins groovy jenkins-pipeline linkedhashmap


    【解决方案1】:

    如果我没记错的话,您可以通过map[key][sub-key] 访问地图。所以你的情况是:

    if (sysName == 'MYSYS'){
      mySuperVariable = envs[environment][sysName][subSysName][detailName]
    }
    else if (sysName == 'MYSYS2'){
      mySuperVariable = envs[environment][sysName][subSysName]
    }
    
    (...)
    
    sysVer = mySuperVariable['version']
    

    【讨论】:

    • 它有效,但前提是我在最后一行使用 sysVer = mySuperVariable.version。谁能解释一下为什么?
    • version 在你的情况下我猜不是一个变量。所以如果是mySuperVariable["version"]mySuperVariable.version。其他人正在工作,因为它们是包含字符串的变量。我现在正在相应地调整答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2014-04-23
    • 2021-05-28
    相关资源
    最近更新 更多