【问题标题】:Accessing Teamcity build number in Gradle build script在 Gradle 构建脚本中访问 Teamcity 内部版本号
【发布时间】:2012-06-27 19:54:15
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: properties build teamcity gradle


    【解决方案1】:

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

    【讨论】:

    • 请注意,这个答案现在有点过时了。假设在 TeamCity 中使用“Gradle”运行程序(隐式应用 TeamCity 定义的初始化脚本),您现在必须执行以下操作:project.teamcity["build.number"]See this question for other details.
    • 知道如何在 TeamCity VCS 标签中访问 Android 应用版本号吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      从 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”... 这没有用。在团队城市的 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 种做同样事情的方法。

      【讨论】:

        【解决方案4】:

        我用 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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-20
          • 2015-01-27
          • 1970-01-01
          • 2013-07-16
          • 2011-10-03
          • 2016-11-02
          • 1970-01-01
          相关资源
          最近更新 更多