CodeBuildのビルドログの日本語化


CodeBuildのログがこんな感じで日本語化されないことに悩んでいた。

xxxx.common.exception.ExceptionConfigResolverTest > ConfigMap????????:resolve????????????????????????? PASSED

xxxx.common.exception.ExceptionConfigResolverTest > ???null??????:exception?null???????????????????? PASSED

xxxx.common.exception.ExceptionConfigResolverTest > ???????????????:??????????????? PASSED

xxxx.common.exception.ExceptionConfigResolverTest > ???????????????(??????????????):??????????????? PASSED

xxxx.common.exception.ExceptionConfigResolverTest > ????????????????:????????????????? PASSED

UnitTestのAssertは流石に日本語で書いてあるのも多く文字化け解消したいんだけど…。

結論

こんな感じにすればよい。(AWS CLIは今回関係ない)

buildspec.yml
phases:
  install:
    runtime-versions:
      java: corretto11
    commands:
      - yum update -y
      - chmod +x ./gradlew
      - touch gradle.properties

      - |
        cat <<EOL > gradle.properties
        org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m
        EOL
      - pip install --upgrade pip
      - pip install --upgrade awscli
      - yum -y install ibus-kkc vlgothic-* glibc-locale-source glibc-langpack-en
  pre_build:
    commands:
      - localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
      - export LANG="ja_JP.UTF-8"
      - export LANGUAGE="ja_JP:ja"
      - export LC_ALL="ja_JP.UTF-8"

途中色々

当初このままローカライズしようと思ったら、AmazonLinux利用していたのでそのままでは使えない。
どっちかというとCentOS経由なので↓を参考にする。

ここに書いてあるように、 ibus-kkcvlgothic-*のFont周りのみをインストールすることとし、localdefを利用すると、

[Container] 2020/07/29 10:12:06 Entering phase PRE_BUILD
[Container] 2020/07/29 10:12:06 Running command localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
character map file `UTF-8' not found: No such file or directory
default character map file `ANSI_X3.4-1968' not found: No such file or directory

[Container] 2020/07/29 10:12:06 Command did not exit successfully localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 exit status 4

こんな感じのエラーが出る。
これを対処するにはglibc-locale-sourceglibc-langpack-enのインストールも必要なようだった。(少なくともruntimeがCorreto11を利用している場合は。)

やったね!

xxxx.common.exception.ExceptionConfigResolverTest > ConfigMapがない場合の挙動:resolve時にマップがないログを出力しデフォルト値を返却する PASSED

xxxx.common.exception.ExceptionConfigResolverTest > 引数がnullの場合の挙動:exceptionがnullであるログを出力しデフォルト値を返却する PASSED

xxxx.common.exception.ExceptionConfigResolverTest > マップ定義がありヒットする場合:対応したログレベルが返却される PASSED

xxxx.common.exception.ExceptionConfigResolverTest > マップ定義がありヒットする場合(継承関係の順番を間違えたとき):対応したログレベルが返却される PASSED

xxxx.common.exception.ExceptionConfigResolverTest > マップ定義がありヒットしない場合:デフォルトのログレベルが返却される PASSED