我正在为TeamCity项目创建一个kotlin DSL,并希望在实际的kotlin脚本中获得当前分支名称。
如果我运行脚本步骤,当前分支将正确呈现
script {
name="print branch"
scriptContent = """echo "Branch is %teamcity.build.branch%""""
}
从实际的settings.kts
来看,我似乎无法访问它
val currentBranch = DslContext.getParameter("teamcity.build.branch") //yields '<placeholder-1>'
如何在Kotlin代码中获取此参数?
所以事实证明这是不可能的——DSL只是用来表示配置,在构建过程中不会调用。在我的例子中,我想根据我是在main
上还是在功能分支上启用或禁用一些步骤,所以我创建了2个BuildDefinition
对象,这些对象将主构建子类化,并传入分支是否为main
的bool。这样,我就可以启用或禁用构建步骤,并为每个构建更新VCS触发器
似乎对我有效的是
object : BuildType({
val changeList = if ("%teamcity.build.branch%" == "master") "" else "-%teamcity.build.branch%"
...
steps {
maven {
jvmArgs = "-Xmx1024m -Xss1g -Drevision=1.1.%build.counter% -Dchangelist=$changeList"
}
}
})
YMMV
假设每个分支都有一个VCS根,DslContent.settingsRoot就是Kotlin执行的VCS根。
来自我们的Kotlin,它用于针对几个不同的分支构建:
val branchName = "${DslContext.settingsRoot}" // DslContext.settingsRoot.name - .name seems to be blank