Mar*_*fin 4 teamcity dsl kotlin
我使用TeamCity Kotlin DSL 2018.1来设置构建配置.我的settings.kts文件如下所示:
version = "2018.1"
project {
buildType {
id("some-id")
name = "name"
steps {
ant {
name = "Step1"
targets = "target1"
mode = antFile { path = "/some/path" }
workingDir = "/some/dir"
jdkHome = "some_jdk"
}
ant {
name = "Step2"
targets = "target2"
mode = antFile { path = "/some/path" }
workingDir = "/some/dir"
jdkHome = "some_jdk"
}
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但我想避免一遍又一遍地为每个步骤编写相同的重复参数.
我试着编写函数,它将构造预填充默认值的构建步骤:
fun customAnt(init: AntBuildStep.() -> kotlin.Unit): AntBuildStep {
val ant_file = AntBuildStep.Mode.AntFile()
ant_file.path = "/some/path"
val ant = AntBuildStep()
ant.mode = ant_file
ant.workingDir = "/some/dir"
ant.jdkHome = "some_jdk"
return ant
}
project {
buildType {
id("some-id")
name = "name"
steps {
customAnt {
name = "Step1"
targets = "target1"
}
customAnt {
name = "Step2"
targets = "target2"
}
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
它编译但不起作用:TeamCity只是忽略以这种方式定义的构建步骤.
遗憾的是,官方文档不包含有关自定义和扩展DSL的任何信息.可能,我对Kotlin的() -> Unit构造做错了,但是找不到究竟是什么问题.
我知道了.
实际上,我很亲密.以下代码正如我所希望的那样工作:
version = "2018.1"
fun BuildSteps.customAnt(init: AntBuildStep.() -> Unit): AntBuildStep {
val ant_file = AntBuildStep.Mode.AntFile()
ant_file.path = "/some/path"
val result = AntBuildStep(init)
result.mode = ant_file
result.workingDir = "/some/dir"
result.jdkHome = "some_jdk"
step(result)
return result
}
project {
buildType {
steps {
customAnt {
name = "step1"
targets = "target1"
}
customAnt {
name = "step2"
targets = "target2"
}
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |