Disciplined Agile(DA)的發布至正式環境(Release Into Production)決策點,讓團隊依當次變更安排交易收尾、資料備份與遷移、元件部署及功能開放。
上線前需要確認執行順序、負責人與失敗處置,並透過演練掌握資料轉換和復原所需時間。復原時還需處理備份後新增的資料,確認舊版本能否正常使用。
部署紀錄、支援環境與發布通知讓接手人員能查詢變更內容,並依實際開放的功能回應使用者。
團隊可以先挑選一項尚未驗證的上線活動進行演練,再將確認過的重複操作納入部署腳本。
發布至正式環境(Release Into Production)的決策範圍
在部署解決方案目標中確認上線活動
Disciplined Agile(DA)的部署解決方案(Deploy the Solution)流程目標(Process Goal)涵蓋部署自動化、發布策略、上線活動與發布結果驗證。
「發布至正式環境(Release Into Production)」這個決策點聚焦於當次上線需要執行的活動,從完成既有交易、處理資料與部署元件,到開放功能、更新支援環境及通知相關人員,都在討論範圍內。
以訂單系統改版為例,新版本新增了訂單狀態,也調整了客服查詢畫面。上線時,團隊需要確認正在處理的訂單如何收尾、既有資料如何轉換,以及客服何時能在支援環境中練習新版操作。
如果資料轉換失敗,還要確認資料能還原到哪個時間點,以及由誰執行復原。
這些工作涉及開發、維運與客服支援。安排上線活動時,團隊可以把每項工作的執行人、前置條件與完成紀錄一起寫清楚。
例如客服訓練需要新版支援環境,就需要先更新支援環境,再進行操作演練。
團隊需要依照當次變更與系統限制,選擇上線活動並安排先後順序。
若只調整畫面文字,確認無須遷移資料即可。若涉及訂單欄位轉換,就要預留轉換時間,並準備失敗時的資料處置方式。
區分活動安排、自動部署與發布策略
自動部署(Automatic Deployment)處理部署操作如何自動執行。例如團隊可以透過部署腳本(Deployment Script)更新程式、套用設定並啟動服務,確保相同操作能重複執行。
發布策略(Release Strategy)安排新版本如何提供給使用者,例如先開放給少數使用者,觀察運作情況後再擴大範圍。
發布至正式環境需要確認這次上線的各項活動。沿用訂單系統的例子,腳本能自動更新程式,團隊還要決定資料轉換何時執行、轉換完成後由誰確認結果,以及客服準備完成後何時開放新畫面。
這些安排也會決定腳本需要加入哪些步驟,以及哪些地方需要等待人員確認。
三者會在同一次發布中配合運作。例如團隊選擇先讓內部客服使用新版查詢畫面,就需要部署新版元件、完成必要的資料變更,再透過功能切換(Feature Toggle)開放指定帳號。部署與資料變更可以由腳本執行,帳號開放時間要配合客服演練安排。
上線活動的執行順序需要配合系統依賴。例如新功能需要讀取新增的資料欄位,就要先建立欄位,再啟用功能。復原方式也需要在上線前確認,包括發生哪些異常時要停止發布,以及由誰執行還原。
如果資料變更無法逆轉,團隊就需要先確認失敗後如何修復資料,再安排這次上線。
上線前的交易收尾與資料保護
完成既有交易,避免更新中斷處理
完成既有交易(Close out existing transactions)指的是在更新系統或元件前,讓受影響範圍內正在處理的交易完成,避免更新中斷交易。
在訂單系統中,一筆交易可能包含確認付款結果、更新訂單狀態與扣除庫存。團隊需要知道這些操作進行到哪一步,才能判斷何時可以更新負責處理的元件。
例如付款服務已收到扣款成功的回應,訂單狀態卻尚未寫入。如果此時重新啟動服務,系統可能留下已付款卻仍顯示待付款的訂單。
能否自動補正,取決於系統原先設計的重試與核對機制。安排部署時,需要先確認這類處理中的交易會如何完成。
對需要暫停處理才能更新的元件,團隊可以先停止讓新交易進入該元件,再等待既有交易結束。
停止接收新交易的範圍應配合系統架構,例如暫停某個訂單處理服務的新任務。執行部署的人員也需要能查看尚未完成的交易,確認未完成交易的數量歸零,或已符合事先約定的更新條件。
長時間交易的等待時間,需要納入部署時段的安排。如果一項處理需要數十分鐘,團隊就要提早停止接收新任務,並約定等待逾時後的處置。
遇到遲遲未完成的交易,可以由負責人查明狀態後決定延後更新,或依既有機制中止並重新處理,確保交易狀態已確認,再重新啟動服務。
備份既有資料,估算資料量與寫入的限制
備份既有資料(Back up existing data)是在部署可能導致資料遺失或損壞時,保留可供復原的資料。
例如訂單改版需要轉換狀態欄位,轉換程式若把部分狀態寫錯,就需要有資料可供核對或還原。
備份範圍要依這次變更可能影響的資料決定,並確認相關資料能對應到一致的時間點。
若資料回歸測試(Data Regression Testing)尚未充分確認變更後既有資料仍能被正確讀取與處理時,備份尤其需要納入上線安排。
一次發布的變更範圍越大,需要檢查的資料處理路徑也越多。若採用冷切換(Cold Switchover),先停止舊系統再切換至新系統,部署失敗後的資料復原時間也會影響服務何時恢復。
資料量與即時寫入會限制備份方式。大量歷史訂單的備份可能超出預定的維護時段,備份期間仍在接收新訂單的系統,就需要採用能處理持續寫入資料的備份機制。
團隊應先量測備份所需時間,並確認備份期間需不需要暫停部分寫入,避免到了上線當晚才發現無法在時限內完成。
備份的時間點,決定了還原時需要另行處理哪些新增資料。假設備份可還原到晚上十點的狀態,系統到十點十分仍持續接單,直接還原會遺失這十分鐘內新增或更新的訂單。
上線前需要記錄備份所對應的時間點,確認備份檔案可讀取,並安排這段期間訂單的核對與補回方式。
資料遷移、元件部署與使用者開放
遷移來源資料,確認耗時與不可逆變更
遷移來源資料(Migrate source data)涵蓋前次發布以來,為配合新版功能而需要執行的資料變更,包含調整資料結構與轉換既有內容。
例如訂單系統原先用一個欄位記錄訂單狀態,新版改成分別記錄付款與出貨狀態,就需要把既有訂單轉換成新格式,讓新版程式能正確讀取。
轉換前要先確認舊資料能否用來判斷新欄位的值。原本的「已完成」狀態若同時代表付款與出貨完成,便可依規則拆成兩個狀態。
遇到定義不清或資料缺漏的訂單,則要先約定保留原值、標記待確認或由人員補正的處理方式,避免轉換程式自行填入無法確認的狀態。
資料遷移的時間也會影響上線安排。測試環境只有幾百筆訂單,轉換時間可能很短。正式環境若有數百萬筆歷史資料,就需要另外量測。
團隊可以在接近正式環境資料量的演練環境中執行轉換,記錄耗時、失敗位置與重新執行的結果,並確認處理過程是否會阻擋其他訂單寫入。
不可逆的資料變更,需要在執行前確認復原限制。例如把多個舊狀態合併成一個新狀態,並刪除原始欄位,便無法單靠轉換後的資料還原原值。
團隊可以評估先保留舊欄位,等新版運作與資料核對完成後再安排移除,並確認保留期間新舊欄位的寫入規則。
部署解決方案元件,處理版本間的依賴
部署解決方案元件(Deploy solution components)是將這次變更的程式或功能部署到目標環境。
一次發布可以更新整套系統,也可以只更新其中的元件,例如訂單處理服務或客服查詢畫面。選擇部署範圍時,需要確認這些元件依賴哪些資料與其他服務。
如果新版訂單服務會讀取新增的付款狀態欄位,就要先建立欄位,並依功能需要完成資料轉換。
若客服畫面也改成顯示新的狀態,還需要確認畫面取得的資料格式與服務提供的格式一致。
部署順序會受到這些依賴限制,應在上線前寫入部署說明文件(Deployment Instructions)。
分批更新時,正式環境中可能同時存在新舊版本。例如訂單服務已更新,客服畫面仍使用舊版,兩者就需要在這段期間保持資料相容。
團隊應先確認舊畫面能否讀取更新後的資料,以及舊版服務能否處理新版產生的訂單。若無法相容,就要協調更新時間,或暫停受影響的操作。
部署說明文件可以明確記錄各元件的目標版本、所需設定與前置步驟,執行時再留下實際結果。
假設資料轉換尚未完成,負責人就能依文件停止依賴該資料的元件更新,查明原因後再決定是否繼續。
開放解決方案,確認使用對象與啟用時點
開放解決方案(Make solution available)是讓預定使用者能使用已完成部署的功能。
以新版訂單查詢頁面為例,程式可以先部署到正式環境,等資料處理、必要檢查與客服準備完成後,再開放使用。使用者開始操作新頁面的時間,就是這次改版實際生效的時間。
元件部署與使用者取得功能可以分別安排時間。團隊可以利用功能切換(Feature Toggle),先將新版功能維持在關閉狀態,再於指定時間開啟。
若系統支援依帳號設定,也可以先讓指定客服人員使用,確認查詢內容與操作結果後,再開放給其他預定使用者。
開放功能需要明確的條件與執行人。例如新頁面依賴轉換後的訂單狀態,就要先確認資料轉換完成,且指定帳號能查到正確內容,再由負責人啟用。
若客服需要新版操作說明,也應在開放前取得文件,以便回應使用者的詢問。
功能切換控制的是功能是否提供使用,已經使用功能執行的資料變更仍會保留。例如使用者透過新頁面修改了訂單,關閉頁面開放後,這些訂單仍會保留修改後的狀態。
安排啟用時,團隊也要確認關閉功能後如何處理已產生的資料,以及既有流程能否繼續接手。
發布失敗時的資料與版本復原
還原先前資料,辨識備份之後的資料落差
還原先前資料(Restore previous data)是將資料恢復到先前備份的狀態。
發布若造成資料損壞,或轉換結果無法支援正常操作,團隊需要判斷可還原的範圍,以及還原會覆蓋哪些後續變更。
選擇在上線前備份資料時,也要一併準備還原方式與所需時間。
以訂單狀態轉換失敗為例,資料負責人需要先辨識受影響的訂單,確認是部分欄位寫錯,或整批資料都已無法使用。
如果決定回到上線前的備份,就要處理備份之後新增的訂單、付款狀態與出貨紀錄。這些資料可以透過保留的交易紀錄或外部系統核對,並依既定規則補回。
還原資料前,需要確認備份之後已發生的業務操作如何處理。
例如訂單在備份後完成付款,將資料庫還原到付款前的狀態,金流端仍保有扣款結果。負責人就要核對付款紀錄,避免把該訂單再次送去扣款。
若訂單已交由倉庫出貨,也需要確認出貨狀態,避免重複建立出貨工作。
部分資料變更無法直接逆轉,例如轉換時刪除了原始值,且沒有其他紀錄可供重建。
還原到舊備份也可能覆蓋需要保留的新資料,因此需要先確認資料能否完整重建,再決定處置方式。
團隊可在演練時實際還原備份,核對關鍵訂單,並記錄需要人工補正的項目與負責人。
還原先前版本,檢查功能與資料能否配合
還原先前版本(Restore previous version)是在發布失敗、無法透過關閉功能或修補解決問題時,恢復先前可運作的功能與所需資料。
團隊需要事先保留舊版本及相關資料,並確認復原時需要的設定與執行方式。
例如新版訂單服務無法正確計算金額,就要先評估能否停止受影響的功能,再決定是否還原版本。
版本還原需要同時確認程式與資料的相容性。如果新版已把訂單狀態拆成付款與出貨兩個欄位,舊程式仍只讀取原本的狀態欄位,直接換回舊程式可能造成查詢失敗或讀到過期狀態。
復原安排需要說清楚舊欄位是否仍可使用,以及哪些資料必須先修復,舊版服務才能恢復處理訂單。
還原操作也有失敗風險。採用冷切換(Cold Switchover),先停止目前系統再啟動舊版本時,若遺漏還原必要舊版設定,服務就會繼續中斷。
部署前需要演練舊版本的啟動與資料存取,並量測整個復原過程所需時間,作為決定何時停止嘗試修補、開始執行還原的依據。
執行復原後,負責人需要確認舊版本已正確啟動,再檢查受影響的訂單流程。
例如先核對訂單金額與付款狀態,確認查詢、付款結果處理及出貨操作符合預期後,再依安排恢復接收交易。
復原紀錄也應留下實際恢復的版本、資料時間點與待補正訂單,交由指定人員追蹤處理。
量測復原時間與資料落差,確認是否符合目標
安排復原演練前,團隊可以和業務負責人約定復原時間目標(Recovery Time Objective,RTO)與復原點目標(Recovery Point Objective,RPO)。
復原時間目標是服務中斷後,約定的業務操作最多可以中斷多久。復原點目標(RPO)以時間表示可容忍的資料遺失範圍,例如最多接受遺失故障前五分鐘內的資料。
兩者都是事先設定的目標,演練則用來量測實際復原時間與資料落差,再判斷是否達標。
量測復原時間時,應從服務中斷開始計時,直到約定的業務操作恢復可用。這段時間包含發現異常、判斷處置、取得必要核准、還原程式與資料,以及驗證服務的過程。
假設訂單系統的復原時間目標設為三十分鐘,演練從晚上十點中斷服務,到十點二十五分通過訂單查詢與接單驗證,實際復原時間就是二十五分鐘。還原指令的執行時間可以另外記錄,協助找出耗時步驟。
量測資料落差時,要先確認故障發生時間,再找出實際可完整恢復的最新資料時間點。假設系統在晚上十點故障,還原後的資料只完整保留到九點五十二分,資料落差就是八分鐘,超過五分鐘的復原點目標。
核對時需要檢查訂單與付款紀錄是否完整,避免只看最後一筆資料的時間,就忽略中間缺少的交易。
若能透過交易紀錄補回資料,就要以實際補回並核對完成的結果,重新確認可恢復的資料時間點。
備份排程可作為規劃依據,演練仍需驗證備份及後續紀錄是否可用。若補回作業是恢復接單的必要條件,所需時間也要計入實際復原時間,才能看出資料補得更完整時,能否在約定時間內恢復服務。
復原演練應同時記錄目標值、實測值與未達標的原因。例如還原完成後,訂單核對花費太久,就需要調整核對工具或人員安排。若可恢復的資料時間點太舊,就要檢查備份頻率與交易紀錄保留方式。
修正後再用相同的計時起訖與資料核對方式演練,確認兩項結果都符合約定。
部署紀錄、支援環境與發布通知
記錄部署內容,留下可追查的執行資訊
記錄部署(Log the deployment)需要留下部署了哪些內容、何時執行,以及由誰或哪個系統觸發。
以訂單系統改版為例,紀錄可以包含訂單服務的版本、資料轉換作業與執行結果。當客服回報訂單狀態異常時,處理人員就能依發生時間查出當時的版本,確認問題是否出現在某次更新之後。
自動化部署可以在執行過程中產生這些紀錄,再透過儀表板提供查詢。若部署由系統自動觸發,紀錄應能追溯觸發部署的變更或排程。需要人工操作的步驟,也應記下執行人與結果,例如誰啟用了新版查詢頁面,以及實際開放的時間,讓部署紀錄涵蓋程式更新與人工操作。
部署紀錄需要讓接手的人查出版本、時間與操作來源。團隊可以把元件更新、資料處理與功能開放的紀錄連到同一次發布,讓值班人員沿著紀錄確認各步驟的狀態。
如果發布中途停止,或曾還原舊版本,也要保留結果,讓查詢者知道正式環境最後使用哪個版本。
部署紀錄也能提供治理檢查所需的執行證據。例如組織要求由不同人員核准與執行上線時,就需要能對照核准紀錄與部署紀錄,查明兩個動作分別由誰完成。
團隊應依組織要求確認需保留的欄位、存取權限與保存期間,並將缺少的資訊補入記錄流程。
啟用支援系統,讓支援人員能重現新版操作
啟用支援系統(Enable support system)是讓支援人員使用的系統反映正式環境的更新。
若團隊設有獨立支援環境,供客服重現問題或練習操作,就需要把相關元件與設定的更新納入發布安排。
使用者看到新版訂單狀態,客服也需要依新版畫面協助排查,才能確認問題發生在哪個步驟。
支援環境的更新時間可以配合訓練提早安排。例如新版將付款與出貨狀態分開顯示,客服需要先熟悉兩種狀態的意義,以及遇到資料不一致時的處理方式。
團隊可以在正式開放前更新支援環境,準備可重現不同訂單狀態的測試資料,讓客服實際操作查詢與問題回報流程。
正式發布若又調整了功能或設定,負責人也需要確認支援環境是否反映最後採用的版本。
例如演練時開啟的查詢功能,在正式環境暫緩開放,就要讓客服知道適用範圍,並調整操作說明。
支援交接時可以一併記錄可使用的功能、已知限制與問題轉交對象。
服務水準協議(Service-Level Agreement,SLA)若包含問題回應或支援服務的約定,也要確認上線後的人員與環境能配合。
例如新版預計在晚間開放,就需要確認當班人員能登入支援環境、取得新版操作說明,並知道遇到訂單異常時應聯絡誰。
溝通部署結果,依發布頻率安排通知
溝通部署結果(Communicate deployment)是讓受影響的人知道這次發布已完成,以及哪些功能已可使用。
對不定期更新的系統,使用者可能仍在等待新功能,或等待維護結束後恢復操作。
發布完成後的通知需要交代實際開放時間、變更內容,以及使用者是否需要調整原有操作。
例如內部訂單系統把付款與出貨狀態分開顯示,客服與倉庫人員都需要知道新欄位如何判讀。通知可以連到更新後的操作說明,並提供遇到問題時的回報管道。
如果這次只開放給部分人員,也要寫清楚適用對象,讓其他使用者了解目前開放的範圍。
高頻率發布需要考慮通知的接收負擔。每天多次發送細微更新,會增加使用者辨識重要變更的負擔。
例行更新可集中在部署紀錄、儀表板或變更說明中供查詢,涉及操作方式調整、服務中斷或指定對象的新功能,再安排個別通知。通知管道與時間也需要符合前述服務約定。
發布通知應以實際可使用的功能為準。若程式已部署,新版查詢頁面仍處於關閉狀態,就要等功能開放後,再通知使用者開始操作。
發布只完成部分範圍時,通知也應列明已開放的內容與尚未開放的項目,讓客服能依同一份資訊回應詢問。
結語:把發布至正式環境(Release Into Production)落實到下一次上線
依這次變更建立活動與責任安排
把發布至正式環境的活動落實到下一次上線,可以先讓開發、維運與支援人員一起確認這次的變更範圍。
以訂單系統改版為例,團隊可以從新增的資料欄位與客服查詢畫面出發,確認需要更新哪些元件、轉換哪些資料,以及哪些人需要提前熟悉新操作。
選出所需活動後,就要把負責人、前置條件與完成紀錄寫進這次的上線安排。
例如資料轉換由誰執行、誰負責核對訂單狀態,以及客服何時取得可操作的支援環境,都需要有明確約定。
每項上線活動都應有人負責確認結果,並讓接手的人知道何時可以繼續。
討論時也要找出尚未確定的事項。如果資料轉換耗時仍不清楚,就指定人員量測並約定回報日期。如果客服尚未完成演練,就確認訓練時間,再安排新版畫面的開放時點。
會議結束前,先把這些待辦工作指派給負責人,讓相關安排在部署前完成。
演練受限步驟,再將重複操作自動化
準備演練時,可以先選擇一項結果尚未確認、又會影響上線安排的工作。
例如團隊不知道大量訂單轉換需要多久,就用接近正式環境的資料量演練,記錄完成時間與失敗後重新執行的結果。
如果擔心舊版本無法讀取轉換後的資料,就實際執行版本復原,確認哪些欄位需要先處理。
操作步驟確認後,可以把可重複執行的部分納入部署腳本(Deployment Script),連同執行結果一起記錄。
需要人工核對的地方,需要寫清楚確認條件與負責人。例如腳本完成資料轉換後,先由指定人員核對異常訂單,符合約定條件後再繼續開放功能。
下一次上線前,團隊可以先選定一項演練,指定負責人並排定完成日期。
演練發現的等待時間、缺少的設定或無法還原的資料,都應整理回這次的上線安排,讓執行人員拿到修正後的步驟再進行部署。
- Release Strategy 發布策略:從 Disciplined Agile 看上線風險與部署選擇
- 當部署流程開始拖慢交付速度:DA 的自動部署(Automatic Deployment)決策點解析
- AWS:定義服務中斷與資料遺失的復原目標
