如何在build.gradle中引用Travis安全变量?

如何在build.gradle中引用Travis安全变量?,gradle,environment-variables,travis-ci,Gradle,Environment Variables,Travis Ci,我的一个项目依赖项位于一个私有的Bintray repo上,它需要用户名和密码才能访问。在本地,我在我的gradle.properties中设置了这些: bintrayUsername=<myUserName> bintrayPassword=<myPass> 在Travis上,我使用了,所以我不必在我的公共回购中暴露这些价值,但目的是能够直接从我的公共回购中构建。构建开始时,您可以看到变量已导出: Setting environment variables from

我的一个项目依赖项位于一个私有的Bintray repo上,它需要用户名和密码才能访问。在本地,我在我的
gradle.properties
中设置了这些:

bintrayUsername=<myUserName>
bintrayPassword=<myPass>
在Travis上,我使用了,所以我不必在我的公共回购中暴露这些价值,但目的是能够直接从我的公共回购中构建。构建开始时,您可以看到变量已导出:

Setting environment variables from .travis.yml
$ export bintrayUsername=[secure]
$ export bintrayPassword=[secure]
$ export TERM=dumb

...

FAILURE: Build failed with an exception.
* Where:
Build file '/home/travis/build/ataulm/wutson/build.gradle' line: 15
* What went wrong:
A problem occurred evaluating root project 'wutson'.
> Could not find property 'bintrayUsername' on repository container.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
我不确定如何在我的
build.gradle
中引用导出的环境变量,以便找到它们

我已经检查了哪些似乎不起作用(如上所述),以及哪些导致了相同的构建失败


我尝试过的一系列提交可以在这里看到,最新的是:

错误是由于您的三元语句试图将
bintrayUsername
作为条件的一部分进行求值

hasProperty()
方法接受一个
String
参数,因此您应该使用
hasProperty('bintrayUsername')
,而不是
hasProperty(bintrayUsername)
。执行后一种操作将尝试评估可能不存在的属性,从而导致
MissingPropertyException


请记住,尝试计算任何不存在的符号通常会导致
MissingPropertyException

下面的示例定义一个项目属性,而不是一个局部变量,如果它没有定义,则从环境中获取值,即Travis将安全变量放在哪里

project.ext {
    if (! project.hasProperty('some_prop')) { 
        some_prop = System.getenv('some_prop') 
    }
}
如果从未将其设置为属性(不使用gradle.properties文件),并且始终希望从环境中进行设置,则只需删除If部分。:)


注意:我想要一个项目属性,这样我也可以使用它来设置spring boot YAML文件中的值。。。本地和CI中的属性。

该属性应作为
System.env.bintrayUsername
提供。使用elvis运算符将返回错误,因为访问未知属性会引发异常,而不是简单地返回null。如果希望有条件地将值解析为项目属性vs环境变量,则必须执行类似于
hasProperty('bintrayUsername')的操作?bintrayUsername:System.env.bintrayUsername
.Hi@mark,我尝试过这个(删除美元符号),但同样的构建失败。我没有听你在评论的第二部分所说的话——我会有条件地检查(除非我误解了)。看看你上面的例子,我想你可能只是缺少了引语。请注意,
hasProperty()
接受一个
String
参数。如果您添加注释作为答案,我将接受+1如果您还可以建议一种避免此错误的方法,或者建议如何以逻辑方式亲自调试此错误,这样我将来将不可避免地忘记
hasProperty()
需要字符串。
project.ext {
    if (! project.hasProperty('some_prop')) { 
        some_prop = System.getenv('some_prop') 
    }
}