当前位置: 首页 > 知识库问答 >
问题:

如何通过Gradle任务与Jenkins一起将WAR文件发布到maven(Nexus)存储库

濮彬
2023-03-14

我正在努力通过Gradle任务使用Jenkinsfile将war文件部署到Nexus存储库。

战争正在成功地创建。我对部署JAR也没有问题(因为到处都有如何做到这一点的例子)。

所以我在我的构建中有这个发布部分。等级

publishing {
    repositories {
        maven {
            URI releasesUrl = new URI("${UploadURL}/repository/releases")
            URI snapshotsUrl = new URI("${UploadURL}/repository/snapshots")

            afterEvaluate {
                url version.endsWith("SNAPSHOT") ? snapshotsUrl : releasesUrl
            }
            credentials {
                username "${user}"
                password "${password}"
            }
        }
    }
    publications {
        mavenWeb(MavenPublication) {
            from components.web
            artifact war.archivePath
        }
    }
}

带插头:

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'

存储库的URL也在构建脚本中正确指定(使用jar测试发布工作正常)

和Jenkinsfile:

stage ('Publish war') {
    steps {
        sh "sh gradlew publish"
    }
}

目前,我从jenkins build中得到以下错误:

任务:发布MavenWebPublicationToMavenRepository失败

失败:构建失败,但有一个异常

出错的地方:任务“: PublishMavenWebPublicationToMavenRepository”执行失败。未能将发布“mavenWeb”发布到存储库“maven”无效的发布“mavenWeb”:具有相同扩展名和分类器的多个工件(“war”、“null”)。

我很确定这个问题在Gradle任务的“出版物”部分。为了发布JAR,我一直这样使用它:

[...]
publications {
    mavenJava(MavenPublication) {
        from components.java
        artifact sourceJar
    }
}
[...]


task sourceJar(type: Jar) {
    classifier 'sources'
    from sourceSets.main.java
}

我不知道如何为此任务配置来自、工件和分类器的。我甚至不知道是否应该配置所有这些参数。。。谁能帮我一下吗?


共有1个答案

阙博容
2023-03-14

原来,问题的根源是这个部分:

afterEvaluate {
    url version.endsWith("SNAPSHOT") ? snapshotsUrl : releasesUrl
} 

功能适用于Gradle 5。然而,我使用的是Gradle4.8版本。这将导致null而不是propper url值。。。不幸的是,由于异常消息没有指出问题所在,所以花了一段时间。

 类似资料:
  • 我是Gradle、nexus和Maven的新手,并尝试使用Gradle'publish'任务将Maven工件从Jenkins发布到一个新的nexus存储库。Jenkins作业在发布时失败,出现以下错误。我已经在作业中为Nexus提供了用户名和密码。 在第一次发布之前,我们需要在nexus maven存储库中创建文件夹结构吗?并添加maven-metadata.xml?如何生成*.pom.sha和*

  • 我正在尝试在 Jenkins 中配置以下工作流模式: 构建战争文件 我似乎错过了一些东西。应用程序的组件(jar 文件等)似乎在目标版本/快照目录中很好地部署到 Artifactory 中。然而,最终的WAR神器似乎并没有存储在Artifactory中,尽管Jenkins清楚地指出该神器是成功构建的。 我使用的是标准目标:全新安装。我也尝试过(没有改变):全新安装重新打包 我安装了Jenkins的

  • 我想将jar发布到Nexus快照存储库。 如果你知道如何实现,我很想知道。 我将从詹金斯的工作中发布jar。 我想发布到快照存储库,但我无法调查/实现各种事情。 根据我的研究,似乎已经有了下面的Jenkins插件 null 卷曲时的错误信息如下所示。 谢谢你。

  • 我试图将构建Jenkins/Maven的结果发布到Nexus存储库。 我使用clean install maven目标进行构建。 我已经为jenkins安装并配置了Nexus Repository Manager Publisher插件,因此它可以在构建后的步骤中发布到我的Nexus Repo。 问题是: 我不明白,没有办法从jenkins builds用这个插件发布快照到nexus??

  • 这个构建将作为一个自由式项目从Jenkins运行,所以我只需要在build-invoke Gradle script-tasks->中指定 从Jenkins配置Nexus凭据并将其传递给Gradle taks的正确方法是什么(我不想在带有源代码的Git repo中使用它们)?

  • 我已经配置Gradle使用新的Maven Publisher插件发布项目工件,不幸的是,这个插件在生成的中存在依赖关系问题-依赖关系的范围而不是。 我的配置是这样的: 发布很简单,只需一个命令: 如何以旧的(工作)方式实现这一点?项目发布时是否可以自动进行项目标记?