在我的 gradle.build 文件中开始使用 spring boot gradle 插件后,在 jenkins 上构建失败。
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.2.RELEASE")
本地一切正常,包括构建、测试和 Web 应用程序在 Jetty 上运行良好。唯一的问题是在任务 artifactoryPublish
中 Jenkins 的构建失败。它说:
File '/var/lib/jenkins/jobs/release-my-project/workspace/build/libs/workspace-0.2.1-SNAPSHOT.jar' does not exists, and need to be published!
不确定 gradle artifactoryPublish
任务发生了什么。我认为任务来自 Jenkins。
在使用spring boot gradle插件之前,我在gradle.build中的jar任务如下:
jar {
baseName = 'my-project'
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
configurations.runtime.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class':'com.example.Application'
}
// Exclude manifest signature files
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/LICENSE'
}
由于spring boot gradle plugin禁用了jar任务,取而代之的是bootJar任务,所以我配置bootjar任务如下:
bootJar {
baseName = 'my-project'
mainClassName = 'com.example.Application'
// Exclude manifest signature files
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/LICENSE'
}
我从 jenkins 日志中注意到的一件事是它说文件 workspace-0.2.1-SNAPSHOT.jar
不存在。好像它正在寻找错误的文件。以前,它查找正确的文件 my-project-0.2.1-SNAPSHOT.jar
。当我在本地构建时,创建了这个 jar 文件。不确定是什么让 jenkins 寻找 workspace-0.2.1-SNAPSHOT.jar
。它应该是 my-project
,因为我在 bootJar 任务中定义了 baseName。
知道这里出了什么问题吗?谢谢。
最佳答案
除非您明确定义项目名称,否则 Gradle 将使用目录名称作为项目名称。在 Jenkins 上,项目目录称为“工作区”。 artifactoryPublish
大概是使用项目名称来确定要发布的 JAR 文件的名称。如果是这样的话,那不是好的做法。
无论如何,您确实应该设置项目的名称。然后,您不必在 Jar
任务上显式设置 baseName
。只需在项目的根目录中添加一个 settings.gradle 文件,即在 build.gradle 文件旁边,并将其内容设置为:
rootProject.name = "my-project"
这应该有望解决问题,尽管它实际上取决于 artifactoryPublish
任务正在做什么。
关于java - 使用 gradle bootJar 而不是 jar 任务并且在 Jenkins 中构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50636093/