我已經有幾個 Cloud Run 服務上線了幾個月。但是,我昨天嘗試對服務進行一些更新,突然我從一開始就使用的腳本不再起作用。
gcloud 構建提交
我一直在使用以下命令通過遠程 docker 容器構建我的 node/npm 專案:
gcloud builds submit --tag gcr.io/PROJECT_ID/generator
我的 dockerfile 和 .dockerignore 與我運行此腳本的 package.json 位于同一目錄中。但是,昨天我突然開始收到一個錯誤,顯示使用 --tag 引數時需要 dockerfile 并且無法構建映像。
暫定解決方案
經過一番研究,我嘗試將我的構建 cnfig 移動到 gcloudbuild-staging.json 中,如下所示:
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/PROJECT_ID/generator",
"."
]
}
]
}
我已經將我的構建腳本更改為:
gcloud builds submit --config=./gcloudbuild-staging.json
完成此操作后,容器將構建 - 或者據我所知。控制臺輸出如下所示:
------------------------------------------------- REMOTE BUILD OUTPUT --------------------------------------------------
starting build "8ca1af4c-d337-4349-959f-0000577e4528"
FETCHSOURCE
Fetching storage object: gs://PROJECT_ID/source/1650660913.623365-8a689bcf007749b7befa6e21ab9086dd.tgz#1650660991205773
Copying gs://PROJECT_ID/source/1650660913.623365-8a689bcf007749b7befa6e21ab9086dd.tgz#1650660991205773...
/ [0 files][ 0.0 B/ 22.2 MiB]
/ [1 files][ 22.2 MiB/ 22.2 MiB]
-
Operation completed over 1 objects/22.2 MiB.
BUILD
Already have image (with digest): gcr.io/cloud-builders/docker
Sending build context to Docker daemon 785.4kB
Step 1/6 : FROM node:14-slim
14-slim: Pulling from library/node
8bd3f5a20b90: Pulling fs layer
3a665e454db5: Pulling fs layer
11fcaa1377c4: Pulling fs layer
bf0a7233d366: Pulling fs layer
0d4d73621610: Pulling fs layer
bf0a7233d366: Waiting
0d4d73621610: Waiting
3a665e454db5: Verifying Checksum
3a665e454db5: Download complete
bf0a7233d366: Verifying Checksum
bf0a7233d366: Download complete
8bd3f5a20b90: Verifying Checksum
8bd3f5a20b90: Download complete
0d4d73621610: Verifying Checksum
0d4d73621610: Download complete
11fcaa1377c4: Verifying Checksum
11fcaa1377c4: Download complete
8bd3f5a20b90: Pull complete
3a665e454db5: Pull complete
11fcaa1377c4: Pull complete
bf0a7233d366: Pull complete
0d4d73621610: Pull complete
Digest: sha256:9ea3dfdff723469a060d1fa80577a090e14ed28157334d649518ef7ef8ba5b9b
Status: Downloaded newer image for node:14-slim
---> 913d072dc4d9
Step 2/6 : WORKDIR /usr/src/app
---> Running in 96bc104b9501
Removing intermediate container 96bc104b9501
---> 3b1b05ea0470
Step 3/6 : COPY package*.json ./
---> a6eca4a75ddd
Step 4/6 : RUN npm ci --only=production
---> Running in 7e870db13a9b
> [email protected] postinstall /usr/src/app/node_modules/protobufjs
> node scripts/postinstall
added 237 packages in 7.889s
Removing intermediate container 7e870db13a9b
---> 6a86cc961a09
Step 5/6 : COPY . ./
---> 9e1f0f7a69a9
Step 6/6 : CMD [ "node", "index.js" ]
---> Running in d1b4d054a974
Removing intermediate container d1b4d054a974
---> 672075ef5897
Successfully built 672075ef5897
Successfully tagged gcr.io/PROJECT_ID/generator:latest
PUSH
DONE
------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
8ca1af4c-d337-4349-959f-0000577e4528 2022-04-22T20:56:31 00:00 31S gs://PROJECT_ID/source/1650660913.623365-8a689bcf007749b7befa6e21ab9086dd.tgz - SUCCESS
在線日志中沒有錯誤。
gcloud 運行部署
這是我用來部署容器的代碼:
gcloud run deploy generator --image gcr.io/PROJECT_ID/generator --region=us-central1 --set-env-vars ENVIRONMENT=DEV
控制臺輸出是:
Deploying container to Cloud Run service [generator] in project [PROJECT_ID] region [us-central1]
? Deploying... Done.
? Creating Revision...
? Routing traffic...
Done.
Service [generator] revision [generator-00082-kax] has been deployed and is serving 100 percent of traffic.
Service URL: https://generator-SERVICE_ID-uc.a.run.app
運行控制臺中也沒有錯誤。它顯示部署,好像一切都很好。
問題
什么都沒有改變。在本地,使用訪問它的前端應用程式運行此服務會產生成功的結果。但是,我在 Firebase 上托管的應用程式的暫存版本仍然像舊版本的代碼處于活動狀態一樣。
我試過的
- 我已經確定我在同一個 git 分支上進行測驗和部署
- 我已經完成了多次構建和部署,以防萬一出現某種僥幸。
- 我嘗試使用 gcloud 命令將服務的流量更新到最新版本
- 我已確保我的客戶端應用程式使用正確的服務 URL。它似乎沒有改變,但我還是復制/粘貼了它以防萬一
我最后一次成功部署是在 2022 年 3 月 19 日。從他們開始,我唯一做的就是更新我所有的 WSL linux 應用程式——其中包括 gcloud。我不知道我之前使用的是哪個版本,但我現在使用的是 38.0.0 的 Google Cloud CLI。
我已經嘗試搜索我的問題,但沒有任何相關內容出現。我完全不知道為什么所有這些都停止作業并且我沒有收到任何錯誤。我可以提供任何建議或更多資訊嗎?
uj5u.com熱心網友回復:
gcloud builds submit--tag只要Dockerfile您從中運行命令的檔案夾中有一個,或者您明確指定了一個源檔案夾,就應該(!?)繼續使用。
我不反對您收到錯誤,但查看您使用的命令和導致的錯誤會很有幫助。您不需要切換到構建組態檔。雖然這不是問題。
用作latest標簽值具有挑戰性。該術語表明將使用最新版本的容器映像,但這通常 不會發生。當像 Cloud Run 這樣的服務正在運行一個帶標簽的影像latest并且開發人員要求該服務運行時——開發人員知道(!)是一個不同的影像——但也有標簽,這尤其具有挑戰性latest。
就大多數服務而言,相同的標簽意味著相同的影像,因此可能 (!) Cloud Run 沒有找到不同的影像,或者您沒有為它提供不同的影像。我不清楚正在發生哪種替代方案,但我相信您的使用latest會導致您的一些問題。
所以....對于初學者,請考慮使用一個系統,在該系統中,每次創建新容器時,都使用唯一識別符號對其進行標記。一種常見的方法是使用提交哈希(因為每次提交都會更改)。或者,您可以使用容器的摘要(而不是標簽)來參考映像版本。這需要表單的影像參考{IMG}@sha256:{HASH}。
最后,gcloud run現在(一直?)支持從源(檔案夾)部署到運行服務(它為您執行 Cloud Build 程序并將結果部署到 Cloud Run。使用此流程可能值得使用此流程來減少您的步驟,從而減少可能性的錯誤。
請參閱:從源代碼部署
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/463005.html
標籤:码头工人 npm 云 windows-subsystem-for-linux 谷歌云运行
