如何从命令行在gradle中定义teamcity ['build.number']属性

时间:2013-11-25 10:31:43

标签: command-line properties gradle teamcity

有没有办法从命令行定义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

3 个答案:

答案 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(虽然我认为它不是很有用)