【发布时间】:2012-06-27 19:54:15
【问题描述】:
如何在 Teamcity 执行的 Gradle 脚本中访问内部版本号和 VCS 签出号?
在 Ant 中,我可以分别使用 ${build.number} 和 ${build.vcs.number.1}。
谢谢。
【问题讨论】:
标签: properties build teamcity gradle
如何在 Teamcity 执行的 Gradle 脚本中访问内部版本号和 VCS 签出号?
在 Ant 中,我可以分别使用 ${build.number} 和 ${build.vcs.number.1}。
谢谢。
【问题讨论】:
标签: properties build teamcity gradle
这些只是 TeamCity 为 Ant/Gradle JVM 设置的 JVM 系统属性。您可以使用通常的 Java 方式访问它们,例如 System.getProperty("build.number")。
【讨论】:
project.teamcity["build.number"]。 See this question for other details.
如果您正在开发 Android 应用程序,您可以访问 build.number 以相应地更新 apk 文件名:
defaultConfig {
applicationId "com.mydemoci"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "0.7"
ext.buildNumber = System.getProperty("build.number") ?: "Regular"
archivesBaseName = "$applicationId-v$versionName-b$buildNumber"
}
要在本地测试,只需运行 gradlew clean build -Dbuild.number=123
【讨论】:
从 TeamCity 9.1.5 开始,这已更改。 “属性”(“系统”和“团队城市”)属性设置为项目扩展属性。
在阅读概览页面https://confluence.jetbrains.com/display/TCD9/Configuring+Build+Parameters#ConfiguringBuildParameters-ConfigurationParameters 时非常困惑@“系统”的使用(在“系统属性”中)让我认为它们被设置为 JVM 系统属性,所以我尝试了这里描述的 Gradle 机制:https://docs.gradle.org/current/userguide/build_environment.html 它说使用“org.gradle.project”。 .. 使用 TeamCity 添加它说使用“系统”。我试图将 gradle 属性“repositoryUrl”设置为“system.org.gradle.project.repositoryUrl”... 这没有用。在团队城市的 gradle 命令中添加“属性”表明有一个名为“org.gradle.project.repositoryUrl”的 gradle 属性
通过反复试验,我偶然发现了一个显而易见的问题……并准备将其报告为文档错误……但后来在文档中找到了它
总结:在 TeamCity 9.1.5+ 中使用
system.<propertyName>
例如
system.repositoryUrl
在 Gradle 中,这些可以作为 rootProject(或项目)“属性”(而不是“系统属性”...例如
println repositoryUrl
println project.repositoryUrl
println rootProject.repositoryUrl
println project.properties["repositoryUrl"]
println rootProject.ext.repositoryUrl
println "${repositryUrl}"
assert hasProperty("repositoryUrl")
以及其他 500 种做同样事情的方法。
【讨论】:
我用 gradle 和注入 build.number 外部变量测试了许多案例。就我而言,我使用 docker 作为构建环境,因此无法成功注入 teamcity 提供的环境。
将变量注入 gradle 有两种可能性。请注意,-D 和 -P 在下面的示例中有所不同。
// 1. gradle build -Pbuild.number=555
aaa = rootProject.properties.get("build.number")
// 2. gradle bulid -Dbuild.number=444
bbb = System.getProperty("build.number")
gradle --help 说 [option] task 作为命令命令,但 task [option] 有效。
build.gradle 脚本示例如下;
ext {
buildNumber = (rootProject.properties.get("build.number") as Integer) ?: 1
}
android {
defaultConfig {
versionCode project.buildNumber
versionName "1.3.7." + project.buildNumber.toString()
}
在我的例子中,我想使用build.number 作为android versionCode,因此需要使用:? null 处理来解析为Integer。
【讨论】: