尝试循环遍历数组并将每个值传递给gradle任务

时间:2016-07-07 09:04:59

标签: gradle groovy jenkins-job-dsl

我正在尝试做一系列应该很简单的事情,但却给我带来了很大的痛苦。在高级别,我想循环遍历一个数组并将每个值传递给gradle任务,该任务应该返回自己的数组。然后我想使用这个数组来设置一些Jenkins配置。

我尝试过多种方法来完成这项工作,但这是我目前的设置:

project.ext.currentItemEvaluated = "microservice-1"

task getSnapshotDependencies {
    def item = currentItemEvaluated
    def snapshotDependencies = []

    //this does a load of stuff like looping through gradle dependencies,
    //which means this really needs to be a gradle task rather than a 
    //function etc. It eventually populates the snapshotDependencies array.

    return snapshotDependencies
}

jenkins {
    jobs {
        def items = getItems() //returns an array of projects to loop through
        items.each { item ->
           "${item}-build" {
                project.ext.currentItemEvaluated = item
                def dependencies = project.getSnapshotDependencies
                dsl {
                    configure configureLog()
                    //set some config here using the returned dependencies array
             }
         }
     }
}

我无法真正改变jenkins块的设置方式,因为它已经很成熟,所以如果可能的话,我需要在该结构中工作。

我尝试过多种方法尝试将变量传递给任务 - 这里我使用的是项目变量。问题似乎是任务在jenkins阻塞之前进行评估,我无法弄清楚如何使用新设置的currentItemEvaluated变量再次正确评估任务。

关于我还能尝试什么的任何想法?

1 个答案:

答案 0 :(得分:1)

经过一些研究后,我认为这里的问题是Gradle中没有“调用任务”的概念。 Gradle任务只是一个任务及其依赖关系的图形,因此它们将按照仅遵循这些依赖关系的顺序进行编译。

我最终不得不在没有尝试调用Gradle任务的情况下解决了这个问题(我有一个构建任务将相关数据打印到文件中,而我的jenkins块从文件中读取)

请参阅here