Gradle.buildファイルでSpring Boot Gradleプラグインの使用を開始した後、jenkinsでビルドが失敗します。
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.2.RELEASE")
ビルド、テスト、webappなどのローカルでの動作は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
タスクで何が起こっているのかわからない。その仕事はジェンキンスから来ていると思います。
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プラグインは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ファイルが作成されました。ジェンキンスが何を探したのかわからないworkspace-0.2.1-SNAPSHOT.jar
。それはmy-project
bootJarタスク内でbaseNameを定義したように。
ここで何が問題になっていますか?ありがとう。
プロジェクトの名前を明示的に定義しない限り、Gradleはプロジェクト名としてディレクトリ名を使用します。 Jenkinsでは、プロジェクトディレクトリは「ワークスペース」と呼ばれます。 artifactoryPublish
は、おそらくプロジェクト名を使用して、公開するJARファイルの名前を決定しています。その場合、それは良い習慣ではありません。
とにかく、本当にプロジェクトの名前を設定する必要があります。その場合、baseName
タスクにJar
を明示的に設定する必要はありません。プロジェクトのルート、つまりbuild.gradleファイルの横にsettings.gradleファイルを追加し、その内容を次のように設定するだけです。
rootProject.name = "my-project"
artifactoryPublish
タスクが何をしているかに本当に依存しますが、うまくいけば問題は修正されるはずです。