如何在Teamcity执行的Gradle脚本中访问内部版本号和VCS结帐编号?
在Ant中,我可以分别使用${build.number}
和${build.vcs.number.1}
。
谢谢。
答案 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属性。
在阅读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。