はじめに
自分が設定したCodeBuildのプロジェクトでエラーが起き、原因究明に時間をかけたあげくただの設定値ミスだったことが結構あったので記事にしました。
起きたこと
CodeBuildのプロジェクト内でコマンドがコケました。
echo ${DOCKER_PASSWORD} | docker login -u ${DOCKER_USERNAME} --password-stdin
エラーメッセージとして「Cannnot perform an interactive login from a non TTY device」が出力されていたため、「dockerのログインがうまくできていないのかな」と思いこのエラーメッセージを中心に調べましたが特に解決策がなく、途方に暮れていました。
ロール、環境変数等は既に動いている他のプロジェクトと同様に設定したつもりであり、ビルドの詳細を確認しても特に他のプロジェクトと設定が異なっている風には見えませんでした。
1時間ぐらい格闘した後、「環境変数を設定し直してみよう」という話になり、テキストボックスに予め入力されていた既存の設定値に対してマウスをドラッグし範囲選択したところ、、、、
「DOCKER_USERNAME 」と文字列の後ろにスペースが混ざってしまっていました。。。
スペースを消すとすぐに動いてくれました。
なぜ起きたのか
他のプロジェクトと同じ値を設定するので「同じ値だしタイポ怖いからコピペでええやろ」と考え入力値をコピペしていました。
その際に混じってしまったと思われます。
なぜ気づけなかったのか
画面に表示されている値の確認はしていて、「DOCKER_PASSWORD」などの値にタイポはないか?という視点でチェックはしていました。
ですが後ろにスペースがあるかどうかはぱっと見ではわからず、また値を範囲選択しても後ろのスペースまでは表示されていなかったので気づけませんでした。
対策
- 他に影響がないことを確認してとりあえず動かしてみる
CodeBuildであれば適当な場所(ECRとか)にイメージをプッシュするのが大体の目的だと思うのでとりあえず動作確認をしましょう。
一番確実な確認方法だと思います。
- 入力値のダブルチェック
本番で運用しているサービスに係わるところであれば、他の人に確認してもらいましょう。
(ただし、上記のような場合だと気づけないかもしれません。。)
- 既に他に設定したものがあり、JSONなどで設定値を出力できるのであれば自分の設定値とdiffを取ってみる
他と同様の値(System Managerに設定した値とか)を使うのであれば有効だと思います。
終わりに
しょうもないようなミスほど、問題解決に時間がかかりますよね。。
エラーメッセージだけではどうも解決しなさそうな場合は参考にしていただけると状況が好転するかもしれません。