如何在Jenkins(Groovy)中阅读YAML dict

agyaoht7  于 2022-11-01  发布在  Jenkins
关注(0)|答案(3)|浏览(191)

我有一个YAML文件:

project_name: my-project
project_version: 1.0
scan_path: 
    javascript: Core
    dotnet: Deadbolt
    dotnet: ServiceCatalog

我在Jenkins阅读

data = readYaml file: "Jenkins/config.yml
scan_path = data[scan_path]

但是当我检查Map时,它只包含最后一个元素。
我的YAML文件格式不正确吗?
当我运行“println(scan_path.size())”时,我只得到1,而

scan_path.each { k, v ->
                echo "${k}, ${v}"

仅返回“点网,服务目录”

kiayqfof

kiayqfof1#

最终对我有效的解决方案是将我的YAML配置改为如下所示:

project_name: project_name
project_version: 1.0
scan_path: 
  - application: dotnet
    path: Core
  - application: dotnet
    path: Brickburn
  - application: dotnet
    path: ServiceCatalo

我将其保存到变量中

data = readYaml file: "Jenkins/config.yml
scan_path = data[scan_path]

访问方式如下:

scan_path.each { e ->
                echo "Translating ${e.getAt('application')} application 
${e.getAt('path')}"
}
oxf4rvwz

oxf4rvwz2#

这里的问题是scan_path是一个Map,因此要访问它的键,请使用scan_path.key;要访问它的值(在本例中为Map列表),请使用scan_path. value。

scan_path.value.each { k, v ->
    echo "${k}, ${v}"
}

我更喜欢这样:

scan_path.value.each { application ->
    echo "${application.key}, ${application.value}"
}

注意:如果使用for(x in y){echo“x.key,x.value”},则可能会出现错误
请参阅:Jenkins Pipeline: How do I use the sh module when traversing a map?

4ktjp1zp

4ktjp1zp3#

你可以使用snakeyaml库来解析yaml文件。
类似的问题已经得到回答here
另一个tutorial如何使用snakeyaml。

相关问题