Travis CI环境变量与Gradle属性的关系

15

我该如何将travis-ci环境变量用作Gradle的属性?

本地,我的gradle.properties文件位于gradle路径下,其中包含:

sonatypeRepo = abcd

这是在我的build.gradle中使用的:

uploadArchives {   
    //more     
    repository(url: sonatypeRepo) {
        // more
    }
    //more
}

当然在本地是有效的。在travis中,我已经在设置下添加了变量,所以我可以查看构建日志:

Setting environment variables from repository settings
$ export sonatypeRepo=[secure]

它失败的样子就像:

FAILURE: Build failed with an exception.
* Where:
Build file '/home/travis/build/Diolor/Swipecards/library/build.gradle' line: 49
* What went wrong:
A problem occurred evaluating project ':library'.
> No such property: sonatypeRepo for class: org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer
我怎样能够将Travis的环境变量作为Gradle属性使用,但同时又进行本地构建?

Travis的环境变量是否设置为环境变量?我会尝试def repo = sonatypeRepo ?: System.getenv('sonatypeRepo')。第一部分应该在本地工作,第二部分在Travis上工作。 - Opal
@Opal Travis的bash导出它,所以它应该是可用的。我尝试了repository(url: sonatypeRepo ?: "$System.env.sonatypeRepo") {}但没有成功,将继续尝试。 - Diolor
1
问题是Travis设置的变量是否可以通过System.env读取。在Jenkins上是可以的。这可能还有其他问题。您需要在Travis上检查sonatypeRepo属性返回的确切内容。如果它存在于gradle.properties中并且为空,它可能会通过,因为它存在。 - Opal
@Opal 确实。使用上述 Elvis 变量构造函数设置参数可以使其通过。我仍然不确定 Travis 是否读取了该变量。 - Diolor
System.env 的结果打印到标准输出。 - Opal
2个回答

24
我也刚刚偶然发现了这个问题。
以下是我解决的方法:
在我的 build.gradle 文件中:
def uzer = hasProperty('blahUser') ? blahUser : System.getenv('blahUser')
def creds = hasProperty('blahPwd') ? blahPwd : System.getenv('blahPwd')

在我的 $HOME/.gradle/gradle.properties 文件中

blahUser=batman
blahPwd=eatsworms

所以我需要这个东西来为travis-ci服务——我认为它没有一个 $HOME/.gradle/gradle.properties 的概念,但你可以在 .travis.yml 中添加环境变量。

基本上,就像之前提到的一样,如果属性存在,则gradle使用它,否则会向环境请求。在我的情况下,'hasProperty()'检查是必需的,这样travis就不会生成未找到属性的异常......

希望对您有所帮助...


2
我必须在我的 build.gradle 中使用 project.hasProperties()。 - Rohan Bhatia

0
以下是一个示例,用于定义项目属性而不是本地变量,如果未定义,则从环境中获取值。
project.ext {
    if (! project.hasProperty('some_prop')) { 
        some_prop = System.getenv('some_prop') 
    }
}

我想要一个项目属性,这样我就可以在我的Spring Boot YAML文件中设置PWs,无论是在本地还是在CI中都可以使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接