条件 Gradle 存储库

问题描述 投票:0回答:1

我们有 2 条不同的 ci/cd 管道。 Jenkins 安装在我们公司和客户的服务器上。同样,我们有自己的 Nexus,并在客户的服务器上安装了单独的 Nexus。在我们客户的 Jenkins 代理上运行的作业必须连接到客户的 Nexus,当它们在我们公司的服务器上运行时,它们必须连接到我们的 Nexus。

我想做的实际上是使用可以传递给 gradlew 的参数来激活不同的repository.gradle 文件。这样的事情可能吗?

我们的

repository.gradle
文件:

repositories {
    mavenCentral()
    maven {
        url = 'https://nexus.mycompany.com/nexus/content/repositories/snapshots/'
        mavenContent {
            snapshotsOnly()
        }
    }
    maven {
        url = 'https://nexus.mycompany.com/nexus/content/repositories/releases'
        mavenContent {
            releasesOnly()
        }
    }

}

我想在客户服务器上激活什么文件

customer-repository.gradle

repositories {
    mavenCentral()
    maven {
        url = 'https://nexus.customer.com/nexus/content/repositories/snapshots/'
        mavenContent {
            snapshotsOnly()
        }
    }
    maven {
        url = 'https://nexus.customer.com/nexus/content/repositories/releases'
        mavenContent {
            releasesOnly()
        }
    }

}
gradle nexus
1个回答
0
投票

Gradle 文件是用 Groovy 编写的代码,因此您拥有很大的灵活性。

严格按照书面说明,您可以执行类似的操作,并要求将

-Pcustomer=true
添加到 Gradle 命令中。

if ("${properties["customer"]}" == "true")
    apply from: "repolist1.gradle"
else
    apply from: "repolist2.gradle"

但是,常见的其他方法是在 Nexus URL 本身上进行字符串插值:

url = 'https://nexus.${properties["customer"] == "true" ? "customer", "company"}.com/nexus/content/repositories/snapshots/'

或者,也许,将值放入您的

~/.gradle/settings.gradle
文件中并简单地从那里读取它,根本不需要 Gradle 文件中的逻辑,只需在每组机器上设置您想要的值即可。

© www.soinside.com 2019 - 2024. All rights reserved.