第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Google App Engine上持續(xù)集成/部署/交付是否太冒險了?

在Google App Engine上持續(xù)集成/部署/交付是否太冒險了?

12345678_0001 2020-02-01 16:14:03
我們最近在Google App Engine上設(shè)置了Node.js Web應(yīng)用程序的持續(xù)集成/部署/交付。CI服務(wù)器(GitLabCI)根據(jù)分支(開發(fā)/母版)運行依賴項安裝,構(gòu)建,測試和部署到集成/產(chǎn)品。在今天,我們所面對的唯一錯誤是在依賴步驟中,因此我們對此并不在意。但是昨天(16/10/16),發(fā)生了大規(guī)模的DNS中斷,并且在部署步驟的中間,管道失敗了,從而導(dǎo)致了產(chǎn)品故障。只需重新運行管道就可以完成工作,但是問題可以隨時重現(xiàn)。我的問題是:在持續(xù)部署過程中,我們?nèi)绾翁幚泶祟惥W(wǎng)絡(luò)問題?在Google App Engine上進行持續(xù)部署真的是一個好主意嗎?如果是,那么App Engine部署方法是什么?我找不到任何相關(guān)的文檔...目前,我們只有兩個版本“ dev”和“ prod”在提交后進行了更新,但是在隨機時間,我可以觀察到奇怪的行為。任何回應(yīng)/建議/反饋都非常歡迎!關(guān)于我正在談?wù)摰木W(wǎng)絡(luò)問題的stacktrace示例:DEBUG: Error sending result: 'MetadataServerException(HTTPError(),)'. Reason: 'PicklingError("Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed",)'Traceback (most recent call last):  File "/google-cloud-sdk/lib/googlecloudsdk/calliope/cli.py", line 733, in Execute    resources = args.calliope_command.Run(cli=self, args=args)  File "/google-cloud-sdk/lib/googlecloudsdk/calliope/backend.py", line 1630, in Run    resources = command_instance.Run(args)  File "/google-cloud-sdk/lib/surface/app/deploy.py", line 53, in Run    return deploy_util.RunDeploy(self, args)  File "/google-cloud-sdk/lib/googlecloudsdk/command_lib/app/deploy_util.py", line 387, in RunDeploy    all_services)  File "/google-cloud-sdk/lib/googlecloudsdk/command_lib/app/deploy_util.py", line 247, in Deploy    manifest = _UploadFiles(service, code_bucket_ref)  File "/google-cloud-sdk/lib/googlecloudsdk/command_lib/app/deploy_util.py", line 115, in _UploadFiles    service, code_bucket_ref)  File "/google-cloud-sdk/lib/googlecloudsdk/api_lib/app/deploy_app_command_util.py", line 277, in CopyFilesToCodeBucketNoGsUtil    _UploadFiles(files_to_upload, bucket_ref)  File "/google-cloud-sdk/lib/googlecloudsdk/api_lib/app/deploy_app_command_util.py", line 219, in _UploadFiles    results = pool.map(_UploadFile, tasks)  File "/usr/lib/python2.7/multiprocessing/pool.py", line 251, in map    return self.map_async(func, iterable, chunksize).get()  File "/usr/lib/python2.7/multiprocessing/pool.py", line 558, in get    raise self._value
查看完整描述

1 回答

?
慕尼黑8549860

TA貢獻1818條經(jīng)驗 獲得超11個贊

好壞?主觀的-因此對SO來說是題外話。假設(shè)問題是如何使連續(xù)部署可靠:)


好吧,問題在于您正在使用應(yīng)用程序版本作為CI環(huán)境,這意味著您無法避免由于特定版本不良而造成的損壞。您只能希望通過重新部署版本(中斷結(jié)束時)來盡快恢復(fù)-這可以自動進行。


您不應(yīng)讓生產(chǎn)站點直接在CI production管道覆蓋的版本上運行,否則會因部署不當而冒著站點中斷的風(fēng)險。相反,你可以使用一個新的/唯一版本的CI的每個執(zhí)行production管線并且只有完成之后成功你最終使用流量如下所述切換網(wǎng)站流量到它的版本(也可以在CI管線內(nèi)使用,如果使用不同的應(yīng)用程序,而不是CI 版本的應(yīng)用程序版本)


從部署程序開始:


默認情況下,deploy命令每次使用時都會自動生成一個新的版本ID,并將所有流量路由到該新版本。


要覆蓋此行為,可以使用version標志指定版本ID:


gcloud app deploy --version myID

您也可以使用--no-promote標志指定不立即將所有流量發(fā)送到新版本:


gcloud app deploy --no-promote

因此,請確保不要部署一個版本,并且不要在同一步驟中將該版本設(shè)置為默認的流量目標(如果從客戶端驅(qū)動,則可能不是原子的)。特別是對于生產(chǎn)應(yīng)用程序。代替:


部署新版本(gcloud app deploy --no-promote --version ...)

啟動新版本(gcloud app versions ...)并檢查其是否有效

如果工作正常,則將實際流量切換到(gcloud app services set-traffic ...)

這樣,唯一關(guān)鍵的操作是流量切換,(有希望)這是成功的原子操作,或者它已完全退回到GAE端(如果不是,則是GAE錯誤)。如果此步驟失敗,則該應(yīng)用仍應(yīng)繼續(xù)使用舊版本。


當然,這假設(shè)網(wǎng)絡(luò)問題僅在您和GAE之間,如果它們也影響GAE的內(nèi)部運營,那么所有的賭注都沒有了(但是我相信應(yīng)該及時解決)。


查看完整回答
反對 回復(fù) 2020-02-01
  • 1 回答
  • 0 關(guān)注
  • 748 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號