如何在 Teamcity 执行的 Gradle 脚本中访问内部版本号和 VCS 结帐号?
在 Ant 中,我可以分别使用${build.number}
和${build.vcs.number.1}
。
谢谢你。
如何在 Teamcity 执行的 Gradle 脚本中访问内部版本号和 VCS 结帐号?
在 Ant 中,我可以分别使用${build.number}
和${build.vcs.number.1}
。
谢谢你。
这些只是 TeamCity 为 Ant/Gradle JVM 设置的 JVM 系统属性。您可以使用通常的 Java 方式访问它们,例如System.getProperty("build.number")
.
我用 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。
如果您正在开发 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”......这不起作用。添加“属性”
通过反复试验,我偶然发现了一个显而易见的问题……并准备将其报告为文档错误……但随后在文档中找到了它
总结:在 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 种做同样事情的方法。