首页 > 解决方案 > Kotlin 中的 TeamCity 配置 - 子项目中的构建 id 冲突

问题描述

可以根据子项目 ID 而不是根项目 ID 生成构建 ID 吗?

我收到验证错误:

BuildType 'RootProjectId_build': id 'RootProjectId_build' is already used
in BuildType(uuid='', id='RootProjectId_build', name='buildA')

对于具有相同类名(但在不同包中)的 2 个子项目和构建的以下项目

RootTestProject.kt

package _Self

import A.SubProjectA
import B.SubProjectB
import jetbrains.buildServer.configs.kotlin.v2018_1.Project

object RootTestProject : Project({
    subProject(SubProjectA)
    subProject(SubProjectB)
})

子项目A.kt:

package A

import jetbrains.buildServer.configs.kotlin.v2018_1.BuildType
import jetbrains.buildServer.configs.kotlin.v2018_1.Project

object build : BuildType({name = "buildA"})

object SubProjectA : Project({
    name = "SubProjectNameA"
    buildType(build)
})

子项目B.kt:

package B

import jetbrains.buildServer.configs.kotlin.v2018_1.BuildType
import jetbrains.buildServer.configs.kotlin.v2018_1.Project

object build : BuildType({name = "buildB"})

object SubProjectB : Project({
    name = "SubProjectNameB"
    buildType(build)
})

出于某种原因,我需要为构建保留相同的类名,所以我不会简单地将“object build”更改为“object buildA”和“object buildB”

标签: kotlinteamcity

解决方案


假设包名称等同于子项目,解决方法是:

object build : BuildType({name = "buildB"
    id(this.javaClass.`package`.name +"_"+id.toString().split("_")[1])
})

这种方式构建ID是:RootProjectId_B_build


推荐阅读