首页 > 解决方案 > 如何使用变量从 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

标签: jenkinsgroovyjenkins-pipelinelinkedhashmap

解决方案


如果我没记错的话,您可以通过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']

推荐阅读