web-dev-qa-db-ja.com

jarタスクの代わりにgradle bootJarを使用すると、Jenkinsでビルドが失敗します

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を定義したように。

ここで何が問題になっていますか?ありがとう。

3
Simo

プロジェクトの名前を明示的に定義しない限り、Gradleはプロジェクト名としてディレクトリ名を使用します。 Jenkinsでは、プロジェクトディレクトリは「ワークスペース」と呼ばれます。 artifactoryPublishは、おそらくプロジェクト名を使用して、公開するJARファイルの名前を決定しています。その場合、それは良い習慣ではありません。

とにかく、本当にプロジェクトの名前を設定する必要があります。その場合、baseNameタスクにJarを明示的に設定する必要はありません。プロジェクトのルート、つまりbuild.gradleファイルの横にsettings.gradleファイルを追加し、その内容を次のように設定するだけです。

rootProject.name = "my-project"

artifactoryPublishタスクが何をしているかに本当に依存しますが、うまくいけば問題は修正されるはずです。

1
Peter Ledbrook