在Gradle构建脚本中访问Teamcity内部版本号

时间:2012-06-26 13:26:09

标签: properties build teamcity gradle

如何在Teamcity执行的Gradle脚本中访问内部版本号和VCS结帐编号?

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

谢谢。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

从TeamCity 9.1.5开始,这已经改变了。 “属性”(“system”和“teamcity”)属性都设置为项目ext属性。

https://confluence.jetbrains.com/display/TCD9/Defining+and+Using+Build+Parameters+in+Build+Configuration

在阅读overveiw页面https://confluence.jetbrains.com/display/TCD9/Configuring+Build+Parameters#ConfiguringBuildParameters-ConfigurationParameters时非常困惑使用“system”(在“系统属性”中)让我觉得它们被设置为JVM系统属性所以我尝试了Gradle机制,如下所述:{{ 3}} 它说使用“​​org.gradle.project”。 ..添加与TeamCity说,使用“系统”。我试图将gradle属性“repositoryUrl”设置为“system.org.gradle.project.repositoryUrl”... 这没用。在团队城市的gradle命令中添加“properties”显示有一个名为“org.gradle.project.repositoryUrl”的 gradle 属性

通过反复试验,我偶然发现了明显的......并且即将报告为文档错误..但后来在文档中找到了它

摘要:在TeamCity 9.1.5+中使用

system.<propertyName>

e.g。

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种做同样事情的方式。

答案 3 :(得分:0)

我测试了许多使用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。