How can I define the teamcity['build.number'] property in gradle from command line

匿名 (未验证) 提交于 2019-12-03 01:48:02

问题:

Is there a way to define teamcity['build.number'] property from command line? I tried -Pteamcity.build.number=1 but it didn't work.

I have a build.gradle file with this task in it:

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'     }  }

It works on the build server, but it drives all the developers crazy, because we don't have teamcity installed on our machines, and any gradle command gives us an error:

$ 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

回答1:

Given the scenario you describe - allowing developers to run a build on their local machine which also needs to run in TeamCity - I found this worked for me (TeamCity 7):

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

By default the gradle produced jar files will automatically use 'version' in their name. So with this code in the build.gradle file, developer builds will have artifacts tagged with '0.0-beta' and TeamCity builds of the same project pick up the TeamCity build number.

But if you want to, for instance, add information to the manifest you'll do something like:

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

I hope that helps?



回答2:

this works from the command line

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

and you call it

gradle hello -Pteamcity.build.number=1.45

hopefully that'll work also in your script



回答3:

It's a bit of hack, but this is the temporary solution I came up with. Still waiting for a better one though.

in build.gradle I added:

if (hasProperty("dev")) {     apply from: 'teamcity.gradle' }

I have this in teamcity.gradle:

task teamcity {     teamcity['build.number'] = 1     teamcity['build.vcs.number.1'] = 0 }

And I have this in gradle.properties:

dev=1

gradle.properties and teamcity.gradle is in .gitignore. Optionally instead of adding dev=1 to gradle.properties, you can define it in the command line: -Pdev=1, this way you can do with or without the hack on the same machine (though I don't think it's useful)



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!