我想在groovy中为jenkins编写一个DSL作业构建脚本,它自动为我们的项目进行部署工作。每个项目中都有一个通用的yml文件用于ansible角色和hosts参数,我想要读取它并使用其内容来配置作业。
问题是到目前为止我使用snakeyml来读取yml文件,但是它返回了一个我无法有效使用的arraylist(更像是地图)。
有谁知道更好的解决方案?
我的yml示例文件:
---
- hosts: app.host
roles:
- role: app-db
db_name: myproje_db
db_port: "3306"
migrate_module: "my-proje-api"
- role: java-app
app_name: "myproje-api"
app_artifact_name: "my-proje-api"
app_links:
- myproje_db
我在主要的groovy脚本中从工作区读取文件:
InputStream configFile = streamFileFromWorkspace('data/config.yml')
并在另一个类的另一个函数中处理它:
public String configFileReader(def out, InputStream configFile){
def map
Yaml configFileYml = new Yaml()
map = configFileYml.load(configFile)
}
它将地图类类型返回为arraylist。
答案 0 :(得分:2)
这是预期的输出,此配置以" - "开头。代表一个清单。它是一个主机集合,每个主机都有一组角色"。
如果你想在每个主机上进行迭代,你可以这样做:
Yaml configFileYml = new Yaml()
configFileYml.load(configFile).each { host -> ... }
当读取此配置时,它等同于以下结构(以groovy格式):
[ // collection of map (host)
[ // 1 map for each host
hosts:"app.host",
roles:[ // collection of map (role)
[ // 1 map for each role
role: 'app-db',
db_name: 'myproje_db',
db_port: "3306",
migrate_module: "my-proje-api"
],
[
role: 'java-app',
app_name: "myproje-api",
app_artifact_name: "my-proje-api",
app_links:['myproje_db']
]
]
]
]