我们有 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 文件是用 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 文件中的逻辑,只需在每组机器上设置您想要的值即可。