6

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

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

谢谢你。

4

4 回答 4

6

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

于 2012-06-26T13:40:43.943 回答
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。

于 2018-03-22T07:23:13.470 回答
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

于 2015-12-04T09:49:35.253 回答
0

从 TeamCity 9.1.5 开始,这已更改。“属性”(“系统”和“团队城市”)属性设置为项目扩展属性。

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

阅读概述页面时非常混乱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 种做同样事情的方法。

于 2016-02-22T00:49:04.057 回答