通过 bamboo 将 gradle 项目部署到 nexus

Deploy gradle project to nexus via bamboo

我有一个 java 项目 gradle,我使用 Bamboo 作为我的 CI/CD。 我的构建计划生成 jar,而我的部署计划(假设)将 jar 部署到 nexus。我的构建工作完美,并创建了工件(jar、build.gradle 文件、gradle.properties 文件和 gradle.settings 文件)。

当我想 运行 我的部署计划时,我 运行 在 bamboo 中的 uploadArchives 命令。此命令还使 jar 命令成为 运行,这会破坏我的 jar(使其成为 261 字节)。我找到的解决方案只是告诉gradle跳过jar命令(使用-x jar),但我觉得有更好的解决方案。

gralde 中是否有特殊的命令使其工作?或者有没有办法告诉 gradle 到 运行 一个没有前面命令的特定命令?也许像 maven 命令一样上传 3rd 方库?我到处都找遍了,没找到。

太棒了!

这就是 Gradle 的工作方式,它取决于您如何配置构建。但一般来说,您可以创建一个只发布一个文件的任务(它不依赖于任何东西)。您需要使用 maven-publish 插件。例如。让我们考虑以下配置

apply plugin: 'maven-publish'

group= "gradle-test"
version = "1.0-SNAPSHOT"
task produce {
  ext {
    outputFile = file("$buildDir/file.txt")
  }
  outputs.file  outputFile
  doLast {
    outputFile  << "Hello World!"
  }
}

task zipGreeting(type: Zip) {
    from produce.outputs
}

publishing {
    publications {
        newGreeting(MavenPublication) {
            artifact zipGreeting
        }
        oldGreeting(MavenPublication) {
            artifact {
              produce.outputFile
            }
        }
    }
}

随着下面的配置任务publishNewGreetingPublicationToMavenLocal依赖于zipGreetingproduce(因为它依赖于produce的输出)所以最后Gradle 如果它们的输出不是最新的,将调用它们(我想这发生在你的 jar 任务中 -> Gradle 最新检查取决于本地 .gradle 缓存目录)

但是 publishOldGreetingPublicationToMavenLocal 不明确依赖于任何其他任务,因此如果您调用 gradle publishOldGreetingPublicationToMavenLocal。 Gradle 将尝试找到提到的文件并将其上传到 Maven Local。显然,如果文件不存在,它将失败。