繁体   English   中英

如何在 Jenkins (Groovy) 中阅读 YAML 字典

[英]How to read YAML dict in Jenkins (Groovy)

我有一个 YAML 文件:

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

我在詹金斯读的

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

但是,当我检查地图时,它只有最后一个元素。

我的 YAML 文件格式是否不正确?

当我运行“println(scan_path.size())”时,我只得到 1,并且

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

只返回“dotnet,ServiceCatalog”

您可以使用snakeyaml库来解析yaml文件。

类似的问题已在这里得到解答。

另一个教程如何使用snakeyaml。

最终为我工作的解决方案是将我的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')}"
}

这里的问题是 scan_path 是一个映射,因此要访问其键,您使用 scan_path.key 并访问其值(在本例中为映射列表)使用 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:遍历地图时如何使用 sh 模块?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM