我正在尝试做一系列应该很简单的事情,但却给我带来了很大的痛苦。在高级别,我想循环遍历一个数组并将每个值传递给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
变量再次正确评估任务。
关于我还能尝试什么的任何想法?
答案 0 :(得分:1)
经过一些研究后,我认为这里的问题是Gradle中没有“调用任务”的概念。 Gradle任务只是一个任务及其依赖关系的图形,因此它们将按照仅遵循这些依赖关系的顺序进行编译。
我最终不得不在没有尝试调用Gradle任务的情况下解决了这个问题(我有一个构建任务将相关数据打印到文件中,而我的jenkins块从文件中读取)
请参阅here