如何使用 Jenkins 通过 Gradle 任务将 WAR 文件发布到 Maven (Nexus) 存储库
How to publish a WAR file to maven (Nexus) repository with Jenkins via Gradle task
我正在努力通过 Gradle 任务使用 Jenkinsfile 将 war 文件部署到 Nexus 存储库。
正在成功创建 war。我在部署 JAR 方面也没有问题(因为到处都有如何部署的示例)。
所以我在 build.grade
:
中有这个发布部分
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 测试发布工作正常)
Jenkins 文件:
stage ('Publish war') {
steps {
sh "sh gradlew publish"
}
}
目前我从 jenkins 构建中收到此错误:
Task :publishMavenWebPublicationToMavenRepository FAILED
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':publishMavenWebPublicationToMavenRepository'.
Failed to publish publication 'mavenWeb' to repository 'maven'
Invalid publication 'mavenWeb': multiple artifacts with the identical extension and classifier ('war', 'null').
我很确定问题出在 Gradle 任务的 "publications"
部分。
为了发布 Jar,我一直这样使用它:
[...]
publications {
mavenJava(MavenPublication) {
from components.java
artifact sourceJar
}
}
[...]
task sourceJar(type: Jar) {
classifier 'sources'
from sourceSets.main.java
}
我不知道如何为此任务配置 from
、artifact
和 classifier
。我什至不知道是否应该配置所有这些参数...有人可以帮我吗?
原来问题出在这一段:
afterEvaluate {
url version.endsWith("SNAPSHOT") ? snapshotsUrl : releasesUrl
}
此功能适用于 Gradle 5.X 版本,但是,我使用的是 Gradle 4.8. 这导致 null 而不是 propper url值...
不幸的是,这花了一段时间,因为异常消息没有提示问题出在哪里。
我正在努力通过 Gradle 任务使用 Jenkinsfile 将 war 文件部署到 Nexus 存储库。
正在成功创建 war。我在部署 JAR 方面也没有问题(因为到处都有如何部署的示例)。
所以我在 build.grade
:
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 测试发布工作正常)
Jenkins 文件:
stage ('Publish war') {
steps {
sh "sh gradlew publish"
}
}
目前我从 jenkins 构建中收到此错误:
Task :publishMavenWebPublicationToMavenRepository FAILED
FAILURE: Build failed with an exception.
What went wrong: Execution failed for task ':publishMavenWebPublicationToMavenRepository'. Failed to publish publication 'mavenWeb' to repository 'maven' Invalid publication 'mavenWeb': multiple artifacts with the identical extension and classifier ('war', 'null').
我很确定问题出在 Gradle 任务的 "publications"
部分。
为了发布 Jar,我一直这样使用它:
[...]
publications {
mavenJava(MavenPublication) {
from components.java
artifact sourceJar
}
}
[...]
task sourceJar(type: Jar) {
classifier 'sources'
from sourceSets.main.java
}
我不知道如何为此任务配置 from
、artifact
和 classifier
。我什至不知道是否应该配置所有这些参数...有人可以帮我吗?
原来问题出在这一段:
afterEvaluate {
url version.endsWith("SNAPSHOT") ? snapshotsUrl : releasesUrl
}
此功能适用于 Gradle 5.X 版本,但是,我使用的是 Gradle 4.8. 这导致 null 而不是 propper url值... 不幸的是,这花了一段时间,因为异常消息没有提示问题出在哪里。