タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【gradle - Java】Jenkinsでビルドができない

先週のことでした。

久しぶりにJavaの「コンソール・アプリケーション」をメンテナンスすることになりました。

コードを書き終え、まずはローカル開発環境でのgradleビルドを実施。

まったく問題なく成功!!

メンバーによるプル・リクエストも合格し、Jenkinsでのビルドを行ったところ、ビルドに失敗してしまいました。

いったい、なぜ???

開発環境

  • Windows10 2004
  • JDK8
  • IntelliJ IDEA 2019.2
  • Gradle 5.6.1

Jenkins環境, 本番環境

  • CentOS7.6
  • JDK8
  • Jenkins ver.2.195
    • Gradle 5.6.1

環境は、OSの違いのみ。
JDK、GradleのVersionは、もちろん同一です。

ログ確認

Jenkinsの「コンソール出力」を確認してみると、testでエラーになっていました。

どうやら、RDBへのアクセステストでの接続が全滅しているようでした。ネットワークは正常だし、RDBへのアクセスも問題無いのになぜなのでしょう??

[Pipeline] sh
+ gradle clean test checkstyleMain findbugsMain javadoc jar
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :clean UP-TO-DATE
> Task :compileJava
> Task :processResources
> Task :classes
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses

> Task :test FAILED <<<<<<<< 
:

Jenkinsのコンソール出力では詳細までわからないので、Jenkins内に書き出されたテスト結果フォルダを根こそぎ取得して、内容を確認することにしました。

「/var/lib/jenkins/workspace/Pipeline_JavaAppName_Build/build/reports/tests/test」フォルダを取得して、index.htmlをブラウザで確認してみると、ログには次のように書かれていました。

Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in sqls/MonthlyBacklog.xml
### The error occurred while processing mapper_resultMap[monthlyPayablesMap]
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource sqls/MonthlyBacklog.xml
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
    at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:72)
:

「sqls/MonthlyBacklog.xml」が存在しない!?

そんなはずはありません。実際、Windowsのローカル環境ではgradle Buildもまったく問題無いわけですし・・・

ちなみに、DBアクセスするすべてのテストがエラーになっていました。

原因

IDEAを立ち上げ、じっくり確認してみると、原因がわかりました。

このアプリでは、mybatisを使っているのですが、「mybatis-config.xml」で定義しているmapperファイルの名前と、実際に配備したxmlファイルの名前が異なっているじゃないですか!!

<!-- mybatis-config.xml -->
    <mappers>
        <mapper resource="sqls/MonthlyBacklog.xml"/>
    </mappers>
<!-- 実際のリソース -->
sql/MonthlyBackLog.xml

MonthlyBacklog.xml と MonthlyBackLog.xml !!!

たしかにWindowsでは多くの場合大文字小文字を区別しませんが、Linuxでは区別するのでした。

project-flora.net

なんとまあ、基本的なチョンボをしてしまったのでしょう・・・。

まとめ

いずれにしましても、本番環境での運用前に、LinuxのJenkinsで動作テストをしていて正解でした。

mybatisは、mybatisのconfigで正常に認識できないと、すべてのDBアクセスができないということもわかりました。

本来ならば、記事にするほどの内容でも無いのですが、自分への戒めとして書くことにしました。

何事も「原理・原則」が大事ということですね。