何もやってないっていうときは何かやってんだよなぁー
エラー概要(読む必要なし)
今までずっとgcloud run deploy --source
でデプロイが通っていたnode.js環境で、
ある日突然エラーが出て通らなくなった。
リポジトリ上のソースは一切変更なし。
ERROR: (gcloud.run.deploy) Revision 'イメージ名' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.
ポートが開いてないといわれているが、この手のエラーの場合大体ポートは関係ない。
ログを見に行こう
⇒何の情報もない同じような以下のログがあるだけ
Default STARTUP TCP probe failed 1 time consecutively for container "コンテナ名" on port 8080. The instance was not started.
き・・・きっとビルドのほうでエラーが出てるのさ!
⇒成功してる
OMG...
gcloud run deployの公式ドキュメントを確認する
https://cloud.google.com/run/docs/quickstarts/build-and-deploy/deploy-nodejs-service?hl=ja
うーん・・・package.jsonの書き方も大体同じだよなぁ・・・
↓公式のpackage.json例
{
"name": "helloworld",
"description": "Simple hello world sample in Node",
"version": "1.0.0",
"private": true,
"main": "index.js",
"type": "module",
"scripts": {
"start": "node index.js"
},
"engines": {
"node": ">=16.0.0"
},
"author": "Google LLC",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
--snip--
ネット情報や色々彷徨うこと1時間・・・
StackOverflowに同エラー報告あるものの別原因か未解決
--snip--
ビルダーのドキュメントも見る
https://cloud.google.com/docs/buildpacks/builders?hl=ja
ん・・・まさか?
いや、でも公式のpackage.jsonと公式のビルダーでそんなはずは?
ビルドのログを見直す
!!!
解決策
package.jsonのnodeのバージョン指定部分をビルダー対応バージョンに変更
"engines": {
"node": "20.x"
},
敗因と言い訳(読む必要なし)
- 「なにもやってない」はなんかやっている。
(リポジトリのソースは変わらなくてもnpm installでnodeバージョン上がっている) - 特にちゃんとしたPJじゃなかったのでdockerfileサボって
--source
オプションでやっていたこと
(でもそれって僕が悪いんですかね!) - 公式のpakage.jsonが">="でバージョン指定してるから・・・
- ビルダーのほうで自分の対応バージョンくらい見てなんかしてくれてもいいじゃん・・・せめてエラーログとかをさ・・・