Gradle
Gradle 构建运行程序运行 Gradle 项目。
要使用 Gradle 运行构建,所有代理机器上都必须安装 Gradle 0.9-rc-1 或更高版本。 或者,如果您使用 Gradle wrapper ,您需要在您的版本控制中检入正确配置的 Gradle Wrapper 脚本。
运行器支持所有 Gradle 构建配置,包括 build.gradle 和 build.gradle.kts。
Gradle 参数
选项 | 描述 |
|---|---|
Gradle 任务 | 指定由空格分隔的 Gradle 任务名称。 例如, 其他的 任务选项也应在此字段中输入。 例如, |
Gradle 构建文件 | 一条通往 Gradle 构建文件 的路径,相对于工作目录。 如果为空(默认),Gradle 使用自己的设置来确定它。 |
增量构建 | TeamCity 可以利用 Gradle 的 |
Gradle 主目录路径 | 在此指定 Gradle 主目录的路径( |
附加的 Gradle 命令行参数 | 可选的以空格分隔的 Gradle 属性列表。 例如, |
Gradle Wrapper | 如果启用,TeamCity 将在签出目录中查找 Gradle Wrapper 脚本,并使用上述字段指定的 Gradle 任务和额外的命令行参数来启动相应的脚本。 在这种情况下, Gradle home path 中指定的 Gradle 和代理上安装的 Gradle 将被忽视。 |
运行参数
选项 | 描述 |
|---|---|
调试 | 选择 记录调试信息复选框等同于添加 |
堆栈跟踪 | 选择 Print stacktrace 复选框等同于添加 |
Java 参数
选项 | 描述 |
|---|---|
JDK | 选择一个 JDK。 本节详述了可用的选项。 默认值为 |
JDK 主目录路径 | 当上方选择了 <Custom> 时,此选项便可用。使用此字段来指定用于运行构建的自定义 JDK 的路径。 如果该字段为空,则会从代理机器的 |
JVM 命令行参数 | 附加的 JVM 命令行参数允许您设置初始和最大堆大小,启用额外的日志记录,选择所需的字节码验证器模式等等。 您可以指定标准的(例如以 要指定多个命令行参数,使用空格作为分隔符。 例如:
-verbose:gc -Xdiag -Xcomp -Xmx512m -Xms256m
|
构建属性
在 Gradle 构建中,TeamCity 系统属性与 Java 系统属性不同。
常规的 Java 系统属性可以全局访问。 使用
System.getProperty("my.property")或providers.systemProperty("my.property").get()方法获取这些属性的值。TeamCity 系统属性在构建初始化时写入到 Project 对象中。 因此,只要
Project(项目)可用,就可以在任何地方访问 TeamCity 系统属性(使用project.hasProperty("property.name")检查所需属性是否可用)。
参考 TeamCity 系统属性的推荐方式如下:
或者如果系统属性的名称是合法的名称标识符(例如, system.myPropertyName = myPropertyValue):
Docker 设置
在这个部分,您可以指定一个将被 用于运行构建步骤 的 Docker 镜像。
Code Coverage(代码覆盖率)
Gradle 构建运行程序支持基于 IDEA 代码覆盖率引擎 和 JaCoCo 的代码覆盖率。
配置缓存
从2024.03版本开始,TeamCity Gradle runner 支持 configuration cache。 此功能通过缓存配置阶段的结果并在后续构建中重用此缓存,显著提高了构建性能。
如果满足以下任何一种情况,配置缓存就会被启用:
--configuration-cache参数已添加到运行器的 附加的 Gradle 命令行参数 字段中。一个
gradle.properties文件包括org.gradle.configuration-cache=true(适用于 Gradle 8.1+)或org.gradle.unsafe.configuration-cache=true(适用于旧版 Gradle)行。 这既适用于项目的gradle.properties文件,也适用于GRADLE_USER_HOME目录中的文件。
当前限制和已知问题
在以下情况下,Gradle 配置缓存可能无法按预期工作:
如果虚拟构建(在 并行测试 或 Matrix Build 运行期间生成的那些)的运行顺序与创建缓存时的顺序不同。 请参阅此 YouTrack 工单以获取更多信息: TW-86556。
如果 Clean Checkout(干净签出) 已启用;
如果构建步骤在 Docker 或 Podman 容器内运行;
如果 Gradle 忽略配置缓存问题。
如果附加命令行参数列表包含了 Gradle Tooling API 不支持的参数(
--daemon、--停止等等)。
构建参数 其值始终会在每次构建中变化(例如, build.id 或 build.number ),只会在需要时加载。 您仍然可以使用直接引用(例如, project.teamcity["build.number"] )来获取这些属性的值,但是 findProperty() 方法(project.findProperty("build.number") )不会产生任何结果。 如果您需要在您的 Gradle 脚本中调用此方法,请使用以下解决方案:
创建一个新的配置参数,并将其映射到受影响的参数:
MyBuildNumber=%build.number%。创建一个新的系统属性,将其映射到您的新配置参数:
system.buildNumber = %MyBuildNumber%。在您的 Gradle 脚本中,使用
${findProperty}("buildNumber")}语法来获取所需的值。
请注意,这种解决方法会阻止您的构建配置重用配置缓存,因此,您可能还希望将其禁用。