Modern ခေတ် CD pipeline များ
CD ဆိုတာ တကယ်တော့ သီးသန့် concept တခုမဟုတ်ပဲ CI pipeline ရဲ့ extension တခုပါပဲ။ CI မှာတုန်းက ပြောခဲ့သလို developer တွေက Git (ဒါမှမဟုတ် VCS system တခုခုဆီ) ကို up to date code တွေပုံမှန်မကြာခဏ push မယ်။ push တိုင်းမှာ လိုအပ်တဲ့ unit test တွေ run မယ်။ coding style နဲ့ format ကောင်းမကောင်းသိဖို့ linter တွေကို အလုပ်လုပ်စေမယ်။ security ယိုပေါက်တွေ ပါလားသိနိုင်ဖို့ quality test နဲ့ analyzer တွေကို run မယ်။ တကယ်လို့ container သုံးရင် image ဆောက်မယ်၊ registry ဆီ push မယ်။ Kubernetes လည်းသုံးရင် Helm Chart ဒါမှမဟုတ် kustomize ဖိုင်ထုတ်မယ်။ versioning လုပ်ပြီးတော့ package registry တခုခုမှာ သိမ်းမယ်ပေါ့။ ဒါပုံမှန်လုပ်မယ့် အရာတွေပဲ။
ဒါပေမယ့် အခု integration test တွေ run တော့မယ်။ အထူးသဖြင့် BDD test တွေပါလာပြီ။ regression, performance test တွေ run မယ်။ microservice တွေ အကုန်လုံးကို သူတို့ရဲ့ middleware တွေဖြစ်တဲ့ database, messaging queue, pub/sub, reverse proxy, sidecar တွေအကုန်ထည့်ပြီး env တခုခု ဥပမာ development server မှာစမ်းမယ် ဆိုပါတော့။ စောနက Helm chart တွေ Kubernetes manifest တွေ ဒါမှမဟုတ် Docker image တွေကို manual deploymemt လုပ်မှာ မဟုတ်ပါဘူး။ manual လုပ်ရတာက လူလည်း ပိုပင်ပန်းသလို အမှားပါနိုင်ချေလည်း ပိုများတယ်။
ဒီတော့ အဲဒီအစား pipeline ထဲကနေပဲ တခါတည်း deploy ချင်တဲ့ server ဆီကို ssh ပြီးတော့ဖြစ်ဖြစ် Native API တွေသုံးပြီးတော့ဖြစ်ဖြစ် deploy လုပ်ကြတယ်။ ဒီနေရာမှာ ssh တာပဲနေနေ၊ AWS ECS, Lambda ဒါမှမဟုတ် Kubernetes Server API ကိုသုံးတာနေနေ deployment က Bash script တွေပါပဲ (Bash script မဟုတ်ပဲ Programming language တခုခုသုံးပြီး plugin တွေရေးထားချင်လည်း ရသပေါ့လေ၊ ဒါက စကားချပ်)
ဒီပုံစံကို push model လို့ခေါ်တယ်။ ဒီပုံစံမှာ pipeline ကို CI ရော CD ပါတာဝန်ယူခိုင်းထားတဲ့ generic pipeline မျိုးဖြစ်ပြီး အားသာချက်က သိပ် flexible ဖြစ်တာပါ။ ဘာလို့လဲ ဆိုတော့ deployment logic ကိုအစအဆုံး ကိုယ့်ဟာကိုယ်ရေးရမှာဖြစ်လို့ ဘယ်လိုပုံစံ deploy မယ်။ ဘယ်လိုအခြေအနေမှာ deploy မလုပ်ဘူး စသဖြင့် 100% control ရှိတယ်။ ဒါပေမယ့် အားနည်းချက်က state မရှိဘူး။ ဆိုလိုချင်တာက generic pipeline နဲ့ push model ဆိုတာ fire and forget ပဲ။ API တွေခေါ်လိုက်တယ်။ shell script တွေ run လိုက်တယ်။ ဒါပြီးရင် ပြီးပြီ။ server ရောက်မှ crash သွားလား။ service တွေ down သွားလား။ သူမသိဘူး။ ဒါကြောင့် ကျွန်တော်တို့က CI pipeline ကနေ CD ကိုဆွဲထုတ်ဖို့ ကြိုးစားလာခဲ့တယ်။
ခု Modern ခေတ် CD pipeline ပုံစံအသစ်မှာတော့ state ရှိရမယ်။ ဆိုလိုချင်တာက တခုခု မှားခဲ့ရင် retry လုပ်နိုင်ရမယ်။ docker image အသစ်တို့၊ kubernetes manifest အသစ်တို့ စသဖြင့် ရှိလာခဲ့လည်း အလိုအလျောက် deploy လုပ်ပေးနိုင်ရမယ်။ အဲထဲမှာ အရေးကြီးဆုံးတချက်က deployment logic တွေကို ကိုယ့်ဟာကိုယ် bash script တွေနဲ့ ရေးဖို့မလိုရဘူး။ ဒါက GitOps CD နဲ့ pull model ပါပဲ။ အခုလက်ရှိအတွေ့ရ အများဆုံး CD Pipeline ပုံစံဖြစ်ပြီး ArgoCD, Flux တို့တွေဆိုတာ GitOps Tool တွေပဲဖြစ်တယ်။