2013-11-25 33 views
5

有沒有方法從命令行定義teamcity ['build.number']屬性?我試過了-Pteamcity.build.number = 1,但沒有奏效。如何從命令行定義gradle中的teamcity ['build.number']屬性

我有這個任務的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 

回答

8

鑑於你所描述的情況 - 讓開發人員來運行他們的本地計算機上的構建也需要在TeamCity的運行 - 我發現這個工作對我來說(TeamCity的7):

if (hasProperty("teamcity")) { 
    version = teamcity["build.number"] 
} else { 
    version = '0.0-beta' 
} 

默認情況下,gradle這個生成的jar文件將自動在名稱中使用'版本'。因此,通過build.gradle文件中的這段代碼,開發人員構建將使用'0.0-beta'標記的構件,並且同一個項目的TeamCity構建會獲取TeamCity內部版本號。

但是,如果你想,比如,你會做這樣的事情清單中添加信息:

jar { 
    manifest { 
    attributes 'Implementation-Title': rootProject.name, 'Implementation-Version': version 
    } 
} 

我希望幫助?

+0

此解決方案不適合我因爲這是因爲這個https://issues.gradle.org/browse/GRADLE-1826。但我改變了hasProperty(「teamcity」)到rootProject.hasProperty(「teamcity」),現在它正在工作。不管怎樣,謝謝你! – MistaGreen

0

這部作品通過命令行

task hello << { 
    println project.ext['teamcity.build.number'] 
} 

,你叫它

gradle hello -Pteamcity.build.number=1.45 

希望這會還你的腳本

+0

不,我已經試過了:在任務'MyProject:distTar'上找不到屬性'teamcity'。 – Gavriel

+0

您使用project.ext方法有什麼問題?與任務你好它工作正常,雖然我從teamcity ['build.number']更改爲project.ext ['teamcity.build.number']無論如何感到高興你能夠解決它 –

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,這樣你可以在同一臺機器上使用或不使用破解(儘管我認爲它不是很有用)

相關問題