株式会社クルーバー ZERO TO ONE事業部でCrooooberをはじめとしたWebサイトの開発・運用をしています、加藤と申します。
今回は、サイト開発中に発生した問題と失敗を備忘録としてブログに残しておこうと思います。
問題の発生
先日、いつも通りテストサイトに開発したソースコードをデプロイしようと、ビルドを走らせていました。
🤔
(このプロジェクトでは、AWS Codebuildを使用してソースコードのビルドや自動テストを実施しており、実行成否をSlackの開発チャンネルで通知されるよう設定しております。)
パッと考えてみましたが、ローカル環境でのコンパイルは問題無く成功しているため、変更分のソースコードにおける問題は無いものかと思われます。
調査
まずCodebuildのエラーメッセージを確認し、エラー発生箇所と思われるログを見ました。
[ERROR] Failed to execute goal on project cr_www: Could not resolve dependencies for project com.***.v1:cr_www:war:0.0.1-SNAPSHOT: Failed to collect dependencies at {ライブラリ名} Failed to read artifact descriptor for {ライブラリ名} Could not transfer artifact {ライブラリ名} from/to springsource-repo (https://repo.springsource.org/release): Authorization failed for https://repo.springsource.org/release/{ライブラリ名} 403 Forbidden -> [Help 1]
ライブラリの取得に失敗しているようです。配布サービスのHTTPレスポンスコードが403となっておりました。
500系エラーなら配布サービスが障害で落ちている可能性を疑いますが、403のため制限が掛けられているようです。
Spring側でアナウンスされていないか、公式サイトを漁ってみることにしました。
(この時翌日にリリースが控えていたため、内心相当焦ってます...)
原因
どうやら以前よりライブラリを配布していた「https://repo.springsource.org」が廃止され、今後は「https://repo.spring.io」にその役割が回ったようです。
ステージング及び本番環境は、デプロイ時にライブラリをキャッシュに頼らず全取得しますが、ローカル環境では~.m2/repository/に保存されているキャッシュを用いるため、デプロイ前に気づけませんでした。
対応
pom.xmlのエンドポイントを以下のように書き換えました。
milestoneの場合
- before
<url>https://repo.springsource.org/milestone</url>
- after
<url>https://repo.spring.io/milestone</url>
振返り
今回の解決に至るまで、リリースノートや公式リポジトリ以外に、RedditやQiitaなどいった二次文献を漁ってしまっていたため、時間が掛かってしまいました。
焦っている時こそ、公式の情報を重点的に読み込むことが重要ですね。