လွယ်လွယ်ပြောရရင် GitOps ဆိုတာ Server ပေါ်မှာ ဘာရှိသင့်လဲဆိုတာကို Git Repository ထဲမှာ စာနဲ့ရေးထားပြီး၊ Server က အဲဒီ Git ကို အမြဲလိုက်ကြည့်ပြီး အလိုလို ညှိပေးတဲ့နည်းပါ။ Deploy လုပ်ဖို့ဆိုရင် Server ကို တိုက်ရိုက်မထိဘဲ Git မှာ စာပြင်ရုံပဲ။
ကျွန်တော် ဒါကို နားလည်သွားတာက တစ်ခါ Server ပေါ်မှာ တစ်ယောက်က လက်နဲ့ ပြင်လိုက်ပြီး၊ Git ထဲက စာနဲ့ မတူတော့တဲ့အချိန်မှာပါ။ ဘာဖြစ်သွားလဲဆိုတော့ ဘယ်သူက ဘာပြင်ခဲ့လဲ မသိတော့ဘူး၊ နောက် Deploy လုပ်တော့ အဲဒီပြင်ထားတာက ပျောက်သွားတယ်၊ ပြီးတော့ ပြဿနာရှာရတာ တစ်နေကုန်ဖြစ်သွားတယ်။ GitOps က အဲဒီလို ဇာတ်လမ်းမျိုး မဖြစ်အောင် လုပ်ပေးတယ်။
စားသောက်ဆိုင်နဲ့ ဥပမာပေးရရင်
GitOps ကို စားသောက်ဆိုင်က Menu နဲ့ ဥပမာပေးလို့ရတယ်။ Menu ထဲမှာ ဘာဟင်းတွေ ရှိတယ်၊ ဈေးဘယ်လောက်လဲဆိုတာ ရေးထားတယ်။ စားပွဲထိုးက Menu အတိုင်း ဟင်းကို ချပေးတယ်။ တစ်ယောက်ယောက်က Menu ထဲမပါတဲ့ ဟင်းကို စားပွဲပေါ် တင်ထားရင်၊ စားပွဲထိုးက “Menu ထဲမှာ ဒါမပါဘူး” ဆိုပြီး ပြန်သိမ်းသွားမယ်။
GitOps မှာလည်း ဒီလိုပဲ။ Git Repository က Menu ဖြစ်တယ်။ အဲဒီထဲမှာ App Version ဘယ်ဟာ၊ Server ဘယ်နှလုံး၊ Setting ဘာတွေဆိုတာ ရေးထားတယ်။ Server ပေါ်မှာ ရှိတဲ့ အခြေအနေက Git နဲ့ မတူတာတွေ့ရင်၊ GitOps Tool က အလိုလို ပြန်ညှိပေးတယ်။ လက်နဲ့ ပြင်ထားတာတွေက ပျောက်သွားပြီး Git ထဲက အတိုင်း ပြန်ဖြစ်သွားတယ်။
GitOps က ဘယ်လိုအလုပ်လုပ်လဲ?
အဆင့်လေးဆင့်နဲ့ ပြောလို့ရတယ်။
စာနဲ့ရေး — App နဲ့ Server ရဲ့ အခြေအနေအကုန်လုံးကို YAML ဖိုင်တွေနဲ့ Git ထဲမှာ ရေးထားတယ်။ ဘယ်သူက ဘာပြင်ခဲ့လဲ Git History မှာ အကုန်ကျန်တယ်။
Pull Request နဲ့ အတည်ပြု — တစ်ခုခု ပြောင်းချင်ရင် Git မှာ Pull Request တင်တယ်။ တခြားသူက စစ်တယ်၊ အတည်ပြုတယ်၊ ပြီးမှ Merge လုပ်တယ်။ Server ကို တိုက်ရိုက်ထိစရာ မလိုဘူး။
Tool က စောင့်ကြည့် — Argo CD ဒါမှမဟုတ် Flux လို Tool တွေက Git ကို အချိန်တိုင်း စောင့်ကြည့်နေတယ်။ Git မှာ အသစ်တစ်ခုရှိလာရင် Server ပေါ်ကို ချက်ချင်း Deploy လုပ်တယ်။
အလိုလို ညှိ — Server ပေါ်မှာ တစ်ယောက်ယောက်က လက်နဲ့ ပြင်ထားရင် Tool က Git နဲ့ မတူတာကို တွေ့ပြီး အလိုလို ပြန်ညှိပေးတယ်။
ဥပမာ ကိုယ်က App Version 1.2 ကနေ 1.3 ကို တင်ချင်တယ်ဆိုရင် လုပ်ရမှာက Git ထဲက ဖိုင်တစ်ကြောင်းကို 1.2 ကနေ 1.3 လို့ ပြင်ပြီး Push လုပ်ရုံပဲ။ ကျန်တာကို Tool က လုပ်ပေးသွားမယ်။
ဘာတွေကောင်းသွားလဲ?
ဘယ်သူက ဘာပြင်ခဲ့လဲ အမြဲသိရတယ် — Git History က Deploy History ဖြစ်သွားတယ်။ ပြဿနာတက်ရင် ဘယ်ပြောင်းလဲမှုကြောင့်လဲဆိုတာ ပြန်ကြည့်လို့ရတယ်။
ပြန်လှန်ဖို့ လွယ်တယ် — Version အသစ်မှာ ပြဿနာတက်ရင် Git မှာ ပြန်ပြင်ပြီး Push လုပ်ရုံပဲ။ Server ကို လက်နဲ့ ပြန်ဆွဲစရာ မလိုဘူး။
Server ကို ဘယ်သူမှ တိုက်ရိုက်မထိရဘူး — Developer တိုင်း Server Password ကို သိစရာ မလိုဘူး။ Git ကို သုံးတတ်ရင် လုံလောက်တယ်။
Server ပျက်လည်း ပြန်တည်ဆောက်ရလွယ်တယ် — Server အသစ်တစ်လုံး ယူလာပြီး Git ထဲက စာကို ဖတ်ခိုင်းလိုက်ရုံပဲ။ အရင်အတိုင်း ပြန်ဖြစ်သွားတယ်။
CI/CD နဲ့ ဘာကွာလဲ?
CI/CD က Code ကို Test လုပ်ပြီး Deploy လုပ်တဲ့ Pipeline ပါ။ GitOps က CI/CD ရဲ့ အဆက်လို့ပြောလို့ရတယ်။ CI က Code ကို Build လုပ်ပြီး Image အသစ်ကို ထုတ်ပေးတယ်။ ပြီးတော့ GitOps က အဲဒီ Image အသစ်ကို Git ထဲက ဖိုင်မှာ ရေးပြီး Server ပေါ်ကို ရောက်အောင် လုပ်ပေးတယ်။
ခြားနားချက်အကြီးဆုံးက CI/CD က Push လုပ်တယ် — Pipeline က Server ကို တွန်းပို့တယ်။ GitOps က Pull လုပ်တယ် — Server ပေါ်က Tool က Git ကို ဆွဲယူတယ်။ Server က အပြင်က ဝင်လာတာကို လက်မခံဘဲ၊ သူကိုယ်တိုင် Git ကို သွားယူတဲ့အတွက် လုံခြုံရေးအရလည်း ပိုကောင်းတယ်။
ကျွန်တော်ဆို Project သေးသေးလေးကနေ စပြီး GitOps ပုံစံကို သုံးတယ်။ ဘာလို့လဲဆိုတော့ Server ပေါ်မှာ ဘာရှိလဲဆိုတာ Git ကို ဖွင့်ကြည့်ရုံနဲ့ သိရတယ်။ ဘယ်သူက ဘာပြင်ခဲ့လဲဆိုတာလည်း Git History မှာ အကုန်ကျန်တယ်။ Deploy ဆိုတာ ကြောက်စရာ အလုပ်မဟုတ်ဘဲ၊ Git မှာ စာပြင်ရုံပဲဆိုတဲ့ စိတ်သက်သာမှုက တကယ်တန်တယ်။ 🙂
—