有没有办法从命令行定义teamcity ['build.number']属性?我试过-Pteamcity.build.number = 1但它没有用。
我有一个包含此任务的build.gradle文件:
distTar {
baseName = project.name+'.'+
project.version+'.'+
System.getProperty("system.rnf.brach_name")+'.'+
teamcity['build.number']+'.'+
teamcity['build.vcs.number.1']
archiveName = baseName+'.tar'
into(baseName) {
from '.'
include 'config/*'
include 'run-script/*.sh'
}
}
它适用于构建服务器,但它驱动所有开发人员疯狂,因为我们的机器上没有安装teamcity,并且任何gradle命令都会给我们一个错误:
$ gradle tasks
FAILURE: Build failed with an exception.
* Where:
Build file '/home/me/work/myproject/build.gradle' line: 31
* What went wrong:
A problem occurred evaluating root project 'myproject'.
> Could not find property 'teamcity' on task ':MyProject:distTar'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
答案 0 :(得分:8)
鉴于您描述的场景 - 允许开发人员在本地计算机上运行构建,并且还需要在TeamCity中运行 - 我发现这对我有用(TeamCity 7):
if (hasProperty("teamcity")) {
version = teamcity["build.number"]
} else {
version = '0.0-beta'
}
默认情况下,gradle生成的jar文件会自动使用' version'以他们的名义。因此,使用build.gradle文件中的此代码,开发人员构建将具有使用' 0.0-beta'标记的工件。和TeamCity构建的同一个项目获取TeamCity内部版本号。
但是,如果您想要在清单中添加信息,您可以执行以下操作:
jar {
manifest {
attributes 'Implementation-Title': rootProject.name, 'Implementation-Version': version
}
}
我希望有帮助吗?
答案 1 :(得分:0)
这可以从命令行
开始task hello << {
println project.ext['teamcity.build.number']
}
你称之为
gradle hello -Pteamcity.build.number=1.45
希望这也可以在您的脚本中使用
答案 2 :(得分:0)
这是一个黑客攻击,但这是我提出的临时解决方案。仍在等待更好的一个。
在build.gradle中我添加了:
if (hasProperty("dev")) {
apply from: 'teamcity.gradle'
}
我在teamcity.gradle中有这个:
task teamcity {
teamcity['build.number'] = 1
teamcity['build.vcs.number.1'] = 0
}
我在gradle.properties中有这个:
dev=1
gradle.properties和teamcity.gradle位于.gitignore中。可选地,不是将dev = 1添加到gradle.properties,而是可以在命令行中定义它:-Pdev = 1,这样你可以在同一台机器上执行或不使用hack(虽然我认为它不是很有用)