如何使用变量从LinkedHashMap检索值?

时间:2019-01-17 14:37:40

标签: jenkins groovy pipeline linkedhashmap

我想创建一个变量,使我可以访问各种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的版本时,我应该使用(没有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

1 个答案:

答案 0 :(得分: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']