0

我想在 groovy 中为 jenkins 编写一个 DSL 作业构建脚本,它会自动为我们的项目进行部署作业。每个项目中都有一个用于 ansible 角色和主机参数的通用 yml 文件,我想阅读它并使用它的内容来配置作业。

问题是到目前为止我使用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)
}

它以数组列表形式返回地图类类型。

4

1 回答 1

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']
    ]
  ]
 ]
]
于 2016-03-03T09:13:09.967 回答