Properties 在Gradle构建脚本中访问Teamcity构建编号

Properties 在Gradle构建脚本中访问Teamcity构建编号,properties,build,teamcity,gradle,Properties,Build,Teamcity,Gradle,如何在Teamcity执行的Gradle脚本中访问构建编号和VCS签出编号 在Ant中,我可以分别使用${build.number}和${build.vcs.number.1} 谢谢。这些只是TeamCity为Ant/Gradle JVM设置的JVM系统属性。您可以使用常用的Java方式访问它们,例如System.getProperty(“build.number”)如果您正在开发Android应用程序,您可以访问build.number相应地更新apk文件名: defaultConfig {

如何在Teamcity执行的Gradle脚本中访问构建编号和VCS签出编号

在Ant中,我可以分别使用
${build.number}
${build.vcs.number.1}


谢谢。

这些只是TeamCity为Ant/Gradle JVM设置的JVM系统属性。您可以使用常用的Java方式访问它们,例如
System.getProperty(“build.number”)

如果您正在开发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"
 } 

从TeamCity 9.1.5开始,要进行本地测试,只需运行gradlew clean build-Dbuild.number=123即可。“属性”(包括“系统”和“团队城市”)属性设置为项目外部属性

在阅读概览页面时,非常困惑使用“system”(在“system properties”中)让我认为它们被设置为JVM系统属性,因此我尝试了如下所述的Gradle机制: 上面写着使用“org.gradle.project”。。在TeamCity中添加了“system”,我尝试将gradle属性“repositoryUrl”设置为“system.org.gradle.project.repositoryUrl”。。。 这不管用。在TeamCity中向gradle命令添加“properties”表明有一个名为“org.gradle.project.repositoryUrl”的gradle属性

经过反复试验,我无意中发现了显而易见的。。。并准备将其报告为docs bug。。但后来在文档中找到了它

小结:在TeamCity 9.1.5+中使用

system.<propertyName>
在Gradle中,这些属性可以作为根项目(或项目)“属性”(而不是“系统属性”)访问


以及其他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版本代码,因此需要使用
:?
null处理解析为整数。

注意,这个答案现在有点过时。假设在TeamCity中使用“Gradle”运行程序(隐式应用TeamCity定义的初始化脚本),您现在必须执行以下操作:
project.teamcity[“build.number”]
。知道如何在teamcity VCS中访问Android应用程序版本号吗?
// 1. gradle build -Pbuild.number=555
aaa = rootProject.properties.get("build.number") 

// 2. gradle bulid -Dbuild.number=444
bbb = System.getProperty("build.number")
ext {
    buildNumber = (rootProject.properties.get("build.number") as Integer) ?: 1
}

android {

    defaultConfig {
        versionCode project.buildNumber
        versionName "1.3.7." + project.buildNumber.toString()
    }