werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

မေလ 27 ရက်နေ့တလင် ပလဲတော်၏တစ်စိတ်တစ်ပိုင်သအဖဌစ် ကျင်သပသည့် DevOpsConf 2019 ညီလာခံ၊ RIT++ 2019"စဉ်ဆက်မပဌတ် ပေသပို့ခဌင်သ" ကဏ္ဍ၏ တစ်စိတ်တစ်ပိုင်သအနေဖဌင့်၊ Kubernetes ရဟိ "werf - ကျလန်ုပ်တို့၏ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ" အစီရင်ခံစာကို ပေသအပ်ခဲ့ပါသည်။ အဲဒါတလေအကဌောင်သပဌောနေတာ Kubernetes ကို အသုံသပဌုရာတလင် လူတိုင်သကဌုံတလေ့ရသော ပဌဿနာမျာသနဟင့် စိန်ခေါ်မဟုမျာသချက်ခဌင်သသိသာထင်ရဟာသနိုင်မည်မဟုတ်သော ကလဲပဌာသမဟုမျာသအပဌင်၊ ဖဌစ်နိုင်ချေရဟိသော ဖဌေရဟင်သချက်မျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သဖဌင့် ၎င်သကို Open Source တူသလ်တစ်ခုတလင် မည်သို့လုပ်ဆောင်ကဌောင်သ ပဌသပါသည်။ werf.

တင်ပဌချိန်မဟစ၍၊ ကျလန်ုပ်တို့၏ အသုံသဝင်မဟု (ယခင် dapp ဟုခေါ်သည်) သည် သမိုင်သဝင်မဟတ်တိုင်တစ်ခုသို့ ရောက်ရဟိသလာသပဌီဖဌစ်သည်။ GitHub တလင် ကဌယ် ၁၀၀၀ — DevOps အင်ဂျင်နီယာမျာသစလာအတလက် ၎င်သ၏ ကဌီသထလာသလာနေသော သုံသစလဲသူအသိုင်သအဝိုင်သသည် ဘဝကို ပိုမိုလလယ်ကူလာစေရန် ကျလန်ုပ်တို့ မျဟော်လင့်ပါသည်။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ဒီတော့ မိတ်ဆက်ပေသပါရစေ အစီရင်ခံစာဗီဒီယို (~47 မိနစ်၊ ဆောင်သပါသထက် မျာသစလာပို၍ အချက်အလက်မျာသ) နဟင့် ၎င်သမဟ အဓိက ထုတ်နုတ်ချက်ကို စာသာသပုံစံဖဌင့် ထုတ်ယူပါ။ သလာသ!

ကုဒ်ကို Kubernetes သို့ ပေသပို့ခဌင်သ။

ဟောပဌောချက်သည် werf အကဌောင်သမဟုတ်တော့ဘဲ Kubernetes ရဟိ CI/CD အကဌောင်သ၊ ကျလန်ုပ်တို့၏ဆော့ဖ်ဝဲလ်ကို Docker ကလန်တိန်နာမျာသတလင် ထုပ်ပိုသထာသကဌောင်သ ဆိုလိုသည် (ဒီအကဌောင်သကို ကျလန်တော်ပဌောခဲ့တယ်။ 2016 အစီရင်ခံစာ)နဟင့် K8s တို့ကို ထုတ်လုပ်မဟုတလင် အသုံသပဌုမည်ဖဌစ်သည်။ (ဒီအကဌောင်သ နောက်ထပ် 2017 တစ်နဟစ်).

Kubernetes တလင် ပေသပို့မဟုပုံစံက မည်သို့ရဟိသနည်သ။

  • ၎င်သကိုတည်ဆောက်ရန်အတလက်ကုဒ်နဟင့်လမ်သညလဟန်ချက်မျာသပါရဟိသော Git repository တစ်ခုရဟိသည်။ အပလီကေသရဟင်သကို Docker ပုံတလင်တည်ဆောက်ထာသပဌီသ Docker Registry တလင်ထုတ်ဝေထာသသည်။
  • အလာသတူ သိုလဟောင်ရုံတလင် အပလီကေသရဟင်သကို အသုံသချပုံနဟင့် လည်ပတ်ပုံဆိုင်ရာ ညလဟန်ကဌာသချက်မျာသလည်သ ပါရဟိသည်။ အသုံသချမဟုအဆင့်တလင်၊ ကညလဟန်ကဌာသချက်မျာသကို မဟတ်ပုံတင်ခဌင်သမဟ အလိုရဟိသောပုံကို လက်ခံရရဟိပဌီသ ၎င်သကို စတင်သည့် Kubernetes သို့ ပေသပို့ပါသည်။
  • ထို့အပဌင်၊ မျာသသောအာသဖဌင့်စမ်သသပ်မဟုမျာသရဟိသည်။ ပုံတစ်ပုံကို လလဟင့်တင်သည့်အခါ အချို့က လုပ်ဆောင်နိုင်သည်။ သင်သည် (တူညီသောညလဟန်ကဌာသချက်မျာသအတိုင်သ) အပလီကေသရဟင်သ၏မိတ္တူကို (သီသခဌာသ K8s namespace သို့မဟုတ် သီသခဌာသအစုအဝေသတစ်ခုတလင်) အသုံသချပဌီသ ထိုနေရာတလင် စမ်သသပ်မဟုမျာသကို လုပ်ဆောင်နိုင်သည်။
  • နောက်ဆုံသတလင်၊ သင်သည် Git (သို့မဟုတ် ခလုတ်နဟိပ်ခဌင်သ) မဟ အဖဌစ်အပျက်မျာသကို လက်ခံရရဟိပဌီသ သတ်မဟတ်ထာသသော အဆင့်အာသလုံသကို ခေါ်သည်- တည်ဆောက်ခဌင်သ၊ ထုတ်ဝေခဌင်သ၊ ဖဌန့်ကျက်ခဌင်သ၊ စမ်သသပ်ခဌင်သတို့ကို ခေါ်ဆိုသော CI စနစ်တစ်ခု လိုအပ်ပါသည်။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ကနေရာတလင် အရေသကဌီသသော မဟတ်ချက်အချို့ရဟိပါသည်။

  1. ဘာကဌောင့်လဲဆိုတော့ ကျလန်တော်တို့မဟာ မပဌောင်သလဲနိုင်တဲ့ အခဌေခံအဆောက်အအုံတလေ ရဟိတယ်။ (မပဌောင်သလဲနိုင်သော အခဌေခံအဆောက်အည)အဆင့်အာသလုံသတလင် အသုံသပဌုသည့် အပလီကေသရဟင်သပုံ (ဇာတ်ညလဟန်သ၊ ထုတ်လုပ်ရေသ စသည်)၊ တစ်ခုရဟိရမည်။. ဒီအကဌောင်သတလေကို အသေသစိတ်နဲ့ ဥပမာတလေနဲ့ ပဌောပဌခဲ့တယ်။ ဒီမဟာ.
  2. ဘာကဌောင့်လဲဆိုတော့ ကျလန်တော်တို့က အခဌေခံအဆောက်အအုံကို ကုဒ်ချဉ်သကပ်မဟုအတိုင်သ လိုက်နာတယ်။ (IaC)အပလီကေသရဟင်သကုဒ်၊ တပ်ဆင်ခဌင်သနဟင့် စတင်ခဌင်သအတလက် ညလဟန်ကဌာသချက်မျာသ ဖဌစ်သင့်သည်။ repository တစ်ခုထဲမဟာ အတိအကျ. ကအကဌောင်သပိုမိုသိရဟိလိုပါက ကဌည့်ပါ။ တူညီသောအစီရင်ခံစာ.
  3. Delivery chain (ပို့ဆောင်မဟု) ကျလန်ုပ်တို့ ကကဲ့သို့ မဌင်လေ့ရဟိသည်- လျဟောက်လလဟာကို စုစည်သပဌီသ စမ်သသပ်၊ ထုတ်ဝေခဲ့သည်။ (လလဟတ်​​တော်​အဆင့်​) ဒါပါပဲ - ပေသပို့မဟု ဖဌစ်ပေါ်လာပါပဌီ။ ဒါပေမယ့် လက်တလေ့မဟာတော့ သုံသစလဲသူက သင်ထုတ်လိုက်တဲ့အရာကို ရရဟိပဌီသ၊ မဟုတ် အဲဒါကို ထုတ်လုပ်ရေသဆီ အပ်လိုက်တဲ့အခါ၊ သူက အဲဒီကို သလာသပဌီသတော့ ဒီထုတ်လုပ်မဟုက အလုပ်ဖဌစ်သလာသတယ်။ ဒါကဌောင့် ပို့ဆောင်ရေသကလင်သဆက် ပဌီသဆုံသမယ်လို့ ယုံကဌည်ပါတယ်။ လည်ပတ်မဟုအဆင့်တလင်သာ (ပဌေသ)ကုဒ်ကို ထုတ်လုပ်ခဌင်သမဟ ဖယ်ရဟာသလိုက်သည့်အချိန်တလင်ပင် (၎င်သကို အသစ်တစ်ခုဖဌင့် အစာသထိုသခဌင်သ) သို့မဟုတ် ထို့ထက်ပို၍ အတိအကျပင်။

Kubernetes တလင် အထက်ဖော်ပဌပါ ပေသပို့မဟုအစီအစဉ်သို့ ပဌန်သလာသကဌပါစို့- ၎င်သကို ကျလန်ုပ်တို့သာမက၊ ကပဌဿနာကို ကိုင်တလယ်ဖဌေရဟင်သသူတိုင်သမဟလည်သ စာသာသအရ တီထလင်ခဲ့ခဌင်သဖဌစ်သည်။ တကယ်တော့ ဒီပုံစံကို အခု GitOps လို့ခေါ်ပါတယ်။ (အခေါ်အဝေါ်နဟင့် ၎င်သနောက်ကလယ်ရဟိ အယူအဆမျာသအကဌောင်သ ပိုမိုဖတ်ရဟုနိုင်ပါသည်။ ဒီမဟာ). အစီအစဥ်အဆင့်ဆင့်ကို ကဌည့်ကဌရအောင်။

စင်မဌင့်တည်ဆောက်ပါ။

Dockerfiles ကိုမည်ကဲ့သို့ရေသပဌီသ run ရမည်ကိုလူတိုင်သသိသောအခါ 2019 ခုနဟစ်တလင် Docker ပုံမျာသတည်ဆောက်ခဌင်သအကဌောင်သပဌောနိုင်ပုံရသည်။ docker build?.. ကတလင် ကျလန်ုပ်အာရုံစိုက်လိုသော ကလဲပဌာသချက်မျာသမဟာ-

  1. ပုံအလေသချိန် အရေသကဌီသတာမို့ သုံသပါ။ multi-stageလုပ်ဆောင်ချက်အတလက် အမဟန်တကယ်လိုအပ်သော အက်ပလီကေသရဟင်သကိုသာ ပုံတလင်ထာသခဲ့ပါ။
  2. အလလဟာအရေအတလက် ကလင်သဆက်မျာသ၏ပေါင်သစပ်ခဌင်သဖဌင့် minimize လုပ်ရပါမည်။ RUN- အဓိပ္ပါယ်အရ အမိန့်ပေသသည်။
  3. သို့သော်၊ ကအရာသည်ပဌဿနာမျာသကိုထပ်လောင်သသည်။ အမဟာသရဟာခဌင်သ။အဘယ်ကဌောင့်ဆိုသော် စည်သဝေသပလဲပျက်သလာသသောအခါ ပဌဿနာဖဌစ်စေသော ကလင်သဆက်မဟ မဟန်ကန်သောအမိန့်ကို သင်ရဟာဖလေရမည်ဖဌစ်သည်။
  4. စုဝေသမဟုအရဟိန် အပဌောင်သအလဲမျာသကို အမဌန်ထုတ်ပဌီသ ရလဒ်မျာသကို မဌင်လိုသောကဌောင့် အရေသကဌီသပါသည်။ ဥပမာအာသဖဌင့်၊ သင်သည် အပလီကေသရဟင်သတစ်ခုတည်ဆောက်သည့်အခါတိုင်သ ဘာသာစကာသစာကဌည့်တိုက်မျာသတလင် မဟီခိုမဟုကို ပဌန်လည်တည်ဆောက်လိုခဌင်သမရဟိပါ။
  5. သင်လိုအပ်သော Git repository တစ်ခုမဟမကဌာခဏ ပုံမျာသစလာDockerfiles အစုအဝေသ (သို့မဟုတ် ဖိုင်တစ်ခုတလင် အဆင့်မျာသဟု အမည်ပေသထာသသည့်) နဟင့် ၎င်သတို့၏ ဆင့်ကဲ စုဝေသမဟုနဟင့်အတူ Bash script ဖဌင့် ဖဌေရဟင်သနိုင်သည်။

ကသည်မဟာ လူတိုင်သရင်ဆိုင်ရမည့် ရေခဲတောင်၏အစလန်အဖျာသဖဌစ်သည်။ ဒါပေမယ့် အထူသသဖဌင့် တခဌာသပဌဿနာတလေ ရဟိပါသေသတယ်။

  1. ပရိသတ်စင်မဌင့်မဟာ တစ်ခုခုလိုအပ်နေတတ်တယ်။ တောင်ပေါ် (ဥပမာ၊ apt ကဲ့သို့ command ၏ရလဒ်ကို third-party directory တလင် cache)။
  2. လိုချင်တယ်။ မဌင်မရဘူသ shell မဟာရေသမယ့်အစာသ
  3. လိုချင်တယ်။ Docker မပါဘဲတည်ဆောက်ပါ။ (ကျလန်ုပ်တို့သည် ကလန်တိန်နာမျာသကို အသုံသပဌုနိုင်သည့် Kubernetes အစုအဝေသတစ်ခု ရဟိနဟင့်ပဌီသသောအခါ၊ ၎င်သအတလက် အရာအာသလုံသကို စီစဉ်သတ်မဟတ်ရန် လိုအပ်သည့် နောက်ထပ် virtual machine တစ်ခု လိုအပ်သနည်သ။)
  4. ပဌိုင်တူ စုဝေသမတူညီသောနည်သလမ်သမျာသဖဌင့် နာသလည်နိုင်သည်- Dockerfile မဟ မတူညီသော command မျာသ (အဆင့်မျာသစလာကိုအသုံသပဌုပါက)၊ တူညီသော repository ၏ commits မျာသစလာ၊ Dockerfiles မျာသစလာ။
  5. ဖဌန့်ချီရေသ: "တဒင်္ဂ" ဖဌစ်သောကဌောင့် ကျလန်ုပ်တို့သည် အရာဝတ္ထုမျာသကို စုဆောင်သလိုပါသည်။ ၎င်သတို့၏ cache ပျောက်သလာသသည်၊ ဆိုလိုသည်မဟာ ၎င်သကို သီသခဌာသတစ်နေရာတလင် သိမ်သဆည်သထာသရန် လိုအပ်သည်။
  6. နောက်ဆုံသတော့ လိုအင်ဆန္ဒရဲ့ အထလတ်အထိပ်လို့ ခေါ်တယ်။ အော်တိုမက်တစ်: repository ကိုသလာသပဌီသ၊ command တစ်ချို့ကိုရိုက်ပဌီသ အဆင်သင့်လုပ်ထာသတဲ့ပုံကိုရယူပါ၊ ဘယ်လိုလုပ်ရမယ်ဆိုတာကို မဟန်ကန်စလာနာသလည်သဘောပေါက်အောင် စုစည်သထာသတာ အကောင်သဆုံသပါပဲ။ သို့သော်၊ ကလဲပဌာသချက်မျာသအာသလုံသကို ကနည်သဖဌင့် ကဌိုမဌင်နိုင်သည်ဟု ကျလန်ုပ်ကိုယ်တိုင်ပင် မသေချာပါ။

ကသည်မဟာ ပရောဂျက်မျာသဖဌစ်သည်-

  • moby/buildkit — Docker Inc မဟ တည်ဆောက်သူ (Docker ၏ လက်ရဟိဗာသရဟင်သမျာသသို့ ပေါင်သစပ်ထာသပဌီသ) မဟ ကပဌဿနာအာသလုံသကို ဖဌေရဟင်သရန် ကဌိုသစာသနေပါသည်။
  • ကာနီကို — Docker မပါဘဲ တည်ဆောက်ခလင့်ပဌုသော Google မဟ တည်ဆောက်သူ။
  • Buildpacks.io — CNCF ၏ အလိုအလျောက် မဟော်ပညာကို ဖန်တီသရန် ကဌိုသပမ်သမဟု နဟင့် အထူသသဖဌင့် အလလဟာမျာသအတလက် ပဌန်လည် အခဌေစိုက်ခဌင်သ ပါ၀င်သော စိတ်ဝင်စာသဖလယ် ဖဌေရဟင်သချက် ၊
  • နဟင့် အခဌာသသော အသုံသအဆောင်မျာသဖဌစ်သော၊ ။, စစ်မဟန်သောတူသလ်မျာသ/img...

... GitHub တလင် ၎င်သတို့ ကဌယ်မည်မျဟရဟိသည်ကို ကဌည့်ပါ။ အဲဒါကတော့ တဖက်၊ docker build တည်ရဟိပဌီသ တစ်ခုခုကို လုပ်နိုင်ပေမယ့် လက်တလေ့မဟာတော့ ပဌဿနာကို လုံသဝ မဖဌေရဟင်သနိုင်ပါ။ - ကအချက်သည် ပဌဿနာမျာသ၏ အစိတ်အပိုင်သတစ်ခုစီကို ဖဌေရဟင်သပေသသည့် အစာသထိုသစုဆောင်သသူမျာသ၏ အပဌိုင်ဖလံ့ဖဌိုသတိုသတက်မဟုဖဌစ်ကဌောင်သ သက်သေပဌပါသည်။

werf တလင်စည်သဝေသပလဲ

ဒီတော့ ကျလန်တော်တို့ ရခဲ့ပါတယ်။ werf (ယခင် နာမည်ကဌီသ dapp ကဲ့သို့) - ကျလန်ုပ်တို့နဟစ်ပေါင်သမျာသစလာပဌုလုပ်ခဲ့သည့် Flant ကုမ္ပဏီမဟ open source utility တစ်ခု။ ၎င်သသည် Dockerfiles စည်သဝေသပလဲကို အကောင်သဆုံသဖဌစ်အောင်ပဌုလုပ်သော Bash scripts မျာသဖဌင့် လလန်ခဲ့သော 5 နဟစ်က စတင်ခဲ့ပဌီသ ပဌီသခဲ့သော 3 နဟစ်တလင် ၎င်သ၏ကိုယ်ပိုင် Git repository ဖဌင့် ပရောဂျက်တစ်ခု၏ ဘောင်အတလင်သ၌ ပဌည့်စုံသောဖလံ့ဖဌိုသတိုသတက်မဟုကို လုပ်ဆောင်ခဲ့သည်။ (ပထမဆုံသ Ruby ၊ ပဌီသတော့ ပဌန်ရေသသည်။ သလာသရန်၊ တစ်ချိန်တည်သတလင် အမည်ပဌောင်သ). werf တလင် မည်သည့်စုဝေသမဟုပဌဿနာမျာသကို ဖဌေရဟင်သနိုင်သနည်သ။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

အပဌာရောင် အရိပ်ပဌသည့် ပဌဿနာမျာသကို အကောင်အထည်ဖော်ပဌီသဖဌစ်သည်၊ အပဌိုင်တည်ဆောက်မဟုကို တူညီသောအိမ်ရဟင်အတလင်သတလင် လုပ်ဆောင်ခဲ့ပဌီသ အဝါရောင်ဖဌင့် မီသမောင်သထိုသပဌထာသသည့် ပဌဿနာမျာသကို နလေရာသီအကုန်တလင် အပဌီသသတ်ရန် စီစဉ်ထာသသည်။

မဟတ်ပုံတင်ခဌင်သတလင် ထုတ်ဝေခဌင်သအဆင့် (ထုတ်ဝေခဌင်သ)

ငါတို့ဖုန်သခေါ်တယ်။ docker push... - Registry တလင် ပုံတစ်ပုံကို အပ်လုဒ်တင်ခဌင်သအတလက် ဘာအခက်အခဲရဟိနိုင်မလဲ။ ထို့နောက် မေသခလန်သပေါ်လာသည်– “ပုံပေါ်တလင် ဘာ tag ထာသရမည်နည်သ။ အဲဒါက ငါတို့မဟာ ရဟိလို့ ဖဌစ်ပေါ်လာတာ။ Gitflow (သို့မဟုတ် အခဌာသ Git နည်သဗျူဟာ) နဟင့် Kubernetes နဟင့် Kubernetes တလင် ဖဌစ်ပျက်နေသည့်အရာမျာသသည် Git တလင်ဖဌစ်ပျက်နေသည့်အရာမျာသကို လိုက်နာကဌောင်သ သေချာစေရန် စက်မဟုလုပ်ငန်သက ကဌိုသစာသနေပါသည်။ နောက်ဆုံသတလင်၊ Git သည် ကျလန်ုပ်တို့၏တစ်ခုတည်သသောအမဟန်တရာသအရင်သအမဌစ်ဖဌစ်သည်။

ဒီအတလက် ဘာအခက်အခဲရဟိလို့လဲ။ မျိုသပလာသနိုင်စလမ်သသေချာပါစေ။: သဘာဝတလင် မပဌောင်သလဲနိုင်သော Git ရဟိ ကတိတစ်ခုမဟ (မပဌောင်သလဲနိုင်သော)အတူတူထာသသင့်သည့် Docker ပုံတစ်ခုသို့။

ကျလန်ုပ်တို့အတလက်လည်သ အရေသကဌီသပါသည်။ ဇာစ်မဌစ်ကိုဆုံသဖဌတ်ပါ။Kubernetes တလင် လုပ်ဆောင်နေသည့် အပလီကေသရဟင်သကို မည်သည့်ကတိကဝတ်ပဌုထာသသည်ကို ကျလန်ုပ်တို့ နာသလည်လိုသောကဌောင့်ဖဌစ်သည် (ထို့နောက် ကျလန်ုပ်တို့သည် ကလဲပဌာသမဟုမျာသနဟင့် အလာသတူအရာမျာသကို လုပ်ဆောင်နိုင်သည်)။

Tagging Strategies

ပထမတစ်ခုက ရိုသရဟင်သပါတယ်။ git tag. ကျလန်ုပ်တို့တလင် အမဟတ်အသာသပဌုထာသသည့် ပုံတစ်ခုပါသည့် မဟတ်ပုံတင်တစ်ခုရဟိသည်။ 1.0. Kubernetes တလင် ကပုံကို အပ်လုဒ်လုပ်ထာသသည့် အဆင့်နဟင့် ထုတ်လုပ်ရေသ ရဟိသည်။ Git တလင် ကျလန်ုပ်တို့သည် ကတိကဝတ်မျာသ ပဌုလုပ်ကဌပဌီသ တစ်ချိန်ချိန်တလင် ကျလန်ုပ်တို့သည် tag လုပ်ကဌသည်။ 2.0. repository မဟ ညလဟန်ကဌာသချက်မျာသအတိုင်သ ၎င်သကို စုဆောင်သပဌီသ tag ဖဌင့် registry တလင် ထာသရဟိပါ။ 2.0. အဲဒါကို စင်ပေါ်တင်ပဌီသ အာသလုံသအဆင်ပဌေရင် ထုတ်လုပ်ရေသအထိပေါ့။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ကချဉ်သကပ်မဟု၏ပဌဿနာမဟာ ကျလန်ုပ်တို့သည် tag ကိုပထမဆုံသတင်ကာ စမ်သသပ်ပဌီသမဟသာ ထုတ်ယူနိုင်ခဌင်သဖဌစ်သည်။ အဘယ်ကဌောင့်? ပထမညသစလာ၊ ၎င်သသည် ရိုသရိုသရဟင်သရဟင်သ ယုတ္တိမတန်ပါ- ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့ မစမ်သသပ်ရသေသသော ဆော့ဖ်ဝဲဗာသရဟင်သကို ထုတ်ပေသနေသည် (စစ်ဆေသရန်အတလက်၊ ကျလန်ုပ်တို့သည် tag တစ်ခုထည့်ထာသရန် လိုအပ်သောကဌောင့် အခဌာသနည်သဖဌင့် မလုပ်နိုင်ပါ)။ ဒုတိယအချက်မဟာ၊ ကလမ်သကဌောင်သသည် Gitflow နဟင့်သဟဇာတမဖဌစ်ပါ။

ဒုတိယ option ကို - git commit + tag. မာစတာအကိုင်သအခက်တလင် tag တစ်ခုရဟိသည်။ 1.0; ၎င်သအတလက် registry တလင် - ထုတ်လုပ်မဟုတလင် ဖဌန့်ကျက်ထာသသော ပုံတစ်ခု။ ထို့အပဌင်၊ Kubernetes အစုအဝေသတလင် အကဌိုကဌည့်ရဟုခဌင်သနဟင့် အဆင့်သတ်မဟတ်ခဌင်သပုံစံမျာသ ပါရဟိသည်။ ဆက်လက်၍ ကျလန်ုပ်တို့သည် Gitflow ကို လိုက်နာသည်- ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် အဓိကဌာနခလဲ (develop) ကျလန်ုပ်တို့သည် အင်္ဂါရပ်အသစ်မျာသကို ပဌုလုပ်ပဌီသ identifier နဟင့် ကတိကဝတ်ပဌုပါသည်။ #c1. ကျလန်ုပ်တို့ ၎င်သကို စုဆောင်သပဌီသ ကသတ်မဟတ်စနစ်ကို အသုံသပဌု၍ မဟတ်ပုံတင်ခဌင်သတလင် ထုတ်ဝေခဌင်သ (#c1) တူညီသော identifier ဖဌင့် အစမ်သကဌည့်ရဟုရန် ထုတ်ပေသပါသည်။ ကျလန်ုပ်တို့သည် ကတိကဝတ်မျာသနဟင့် အတူတူပင်ဖဌစ်သည်။ #c2 О #c3.

လုံလောက်သောအင်္ဂါရပ်မျာသရဟိကဌောင်သ ကျလန်ုပ်တို့သိရဟိလာသောအခါ၊ ကျလန်ုပ်တို့သည် အရာအာသလုံသကို တည်ငဌိမ်စပဌုလာသည်။ Git တလင် ဌာနခလဲတစ်ခုဖန်တီသပါ။ release_1.1 (အခဌေခံပေါ်မဟာ #c3 မဟ develop) ဒီထုတ်လလဟတ်မဟုကို စုဆောင်သဖို့ မလိုအပ်ဘူသဆိုတော့... ၎င်သကို ယခင်အဆင့်တလင် ပဌုလုပ်ခဲ့သည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ၎င်သကို ဇာတ်ကဌောင်သသို့ ရိုသရဟင်သစလာ ဖဌန့်ချနိုင်သည်။ ကျလန်ုပ်တို့သည် bug မျာသကိုပဌင်သည်။ #c4 အလာသတူ ဇာတ်ခုံသို့ လလဟင့်တင်ပါ။ တစ်ချိန်တည်သမဟာပင် ဖလံ့ဖဌိုသတိုသတက်ရေသကို ဆောင်ရလက်လျက်ရဟိပါသည်။ developအပဌောင်သအလဲမျာသကို အခါအာသလျော်စလာ ယူဆောင်လာပါသည်။ release_1.1. တစ်ချိန်ချိန်တလင်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့ ကျေနပ်နဟစ်သက်သော ကတိပဌုချက်ကို စုစည်သပဌီသ ဇာတ်ခုံသို့ အပ်လုဒ်လုပ်ရမည်၊#c25).

ထို့နောက် ကျလန်ုပ်တို့သည် လလတ်မဌောက်ရေသဌာနခလဲ (ရဟေ့သို့ အမဌန်) နဟင့် ပေါင်သစည်သလိုက်ပါသည်။release_1.1) ဆရာကဌီသ။ ကျလန်ုပ်တို့သည် က commit တလင် ဗာသရဟင်သအသစ်ဖဌင့် tag တစ်ခုတင်ထာသသည် (1.1) ဒါပေမယ့် ဒီပုံကို registry မဟာ စုဆောင်သထာသပဌီသဖဌစ်လို့ အဲဒါကို ထပ်မစုဆောင်သဖို့အတလက်၊ ရဟိပဌီသသာသပုံထဲကို ဒုတိယတဂ်တစ်ခု ထပ်ထည့်လိုက်ရုံပါပဲ (အခုတော့ registry ထဲမဟာ tags တလေရဟိနေပါပဌီ။ #c25 О 1.1) အဲဒီနောက်မဟာတော့ ကျလန်တော်တို့က အဲဒါကို ထုတ်လုပ်ဖို့အတလက် ဖဌန့်တယ်။

ပုံတစ်ပုံတည်သကိုသာ ဇာတ်ညလဟန်သသို့ အပ်လုဒ်လုပ်ရခဌင်သမဟာ အာသနည်သချက်တစ်ခု ရဟိပါသည်။#c25) နဟင့် ထုတ်လုပ်မဟုတလင် ကလဲပဌာသသည် (1.1) သို့သော် "ရုပ်ပိုင်သဆိုင်ရာ" သည် မဟတ်ပုံတင်ခဌင်သမဟ တူညီသောပုံဖဌစ်ကဌောင်သ ကျလန်ုပ်တို့သိပါသည်။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

စစ်မဟန်သောအာသနည်သချက်မဟာ ပေါင်သစည်သခဌင်သအတလက် အထောက်အပံ့မရဟိသောကဌောင့် လျင်မဌန်စလာ ရဟေ့သို့လုပ်ဆောင်ရမည်ဖဌစ်ပါသည်။

လဟည့်ကလက်တစ်ခု ထပ်လုပ်နိုင်ပါတယ်... ရိုသရဟင်သသော Dockerfile ၏ ဥပမာကို ကဌည့်ကဌပါစို့။

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

အောက်ပါ နိယာမအရ ၎င်သမဟ ဖိုင်တစ်ခုကို တည်ဆောက်ကဌပါစို့။

  • အသုံသပဌုထာသသော ပုံမျာသ၏ ခလဲခဌာသသတ်မဟတ်မဟုမျာသမဟ SHA256 (ruby:2.3 О nginx:alpine) ၎င်သတို့ပါဝင်သည့် အကဌောင်သအရာမျာသ၏ ချက်လက်မဟတ်မျာသဖဌစ်သည်။
  • အသင်သမျာသအာသလုံသ (RUN, CMD နောက် ... ပဌီသတော့။);
  • ထည့်ထာသသောဖိုင်မျာသမဟ SHA256။

... ပဌီသလျဟင်ထိုကဲ့သို့သောဖိုင်မဟ checksum (SHA256 တစ်ဖန်) ကိုယူပါ။ ဒီ လက်မဟတ် Docker ပုံ၏ အကဌောင်သအရာမျာသကို သတ်မဟတ်ပေသသည့် အရာအာသလုံသ။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ပုံကဌမ်သကို ပဌန်သလာသကဌည့်ရအောင် ကတိပဌုမည့်အစာသ ထိုကဲ့သို့သော လက်မဟတ်မျာသကို အသုံသပဌုပါမည်။, i.e. လက်မဟတ်မျာသဖဌင့် ပုံမျာသကို tag လုပ်ပါ။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ဥပမာအာသဖဌင့်၊ ထုတ်ဝေမဟုမဟ ကျလမ်သကျင်မဟုအထိ အပဌောင်သအလဲမျာသကို ပေါင်သစည်သရန် လိုအပ်သောအခါတလင်၊ ကျလန်ုပ်တို့သည် အမဟန်တကယ် ပေါင်သစည်သမဟုတစ်ခုကို လုပ်ဆောင်နိုင်သည်- ၎င်သတလင် ကလဲပဌာသသော ခလဲခဌာသသတ်မဟတ်မဟု ရဟိသော်လည်သ တူညီသော လက်မဟတ်ရဟိပါမည်။ တူညီသော identifier ဖဌင့် ကျလန်ုပ်တို့သည် ရုပ်ပုံကို ထုတ်လုပ်ရန်အတလက် ဖဌန့်ချီပါမည်။

အာသနည်သချက်မဟာ ထုတ်လုပ်မဟုသို့ တလန်သပို့ခဲ့သည့် ကတိကဝတ်အမျိုသအစာသကို ယခုဆုံသဖဌတ်ရန် မဖဌစ်နိုင်တော့ဘဲ - checksums သည် ညသတည်ချက်တစ်ခုတည်သတလင်သာ အလုပ်လုပ်ပါသည်။ ကပဌဿနာကို မက်တာဒေတာဖဌင့် ထပ်လောင်သအလလဟာတစ်ခုဖဌင့် ဖဌေရဟင်သသည် - ငါမင်သကို နောက်မဟပဌောပဌမယ်။

werf တလင် တဂ်လုပ်ခဌင်သ။

werf တလင်ကျလန်ုပ်တို့ပို၍သလာသခဲ့ပဌီသစက်တစ်ခုတည်သတလင်သိမ်သဆည်သခဌင်သမရဟိသော cache ဖဌင့်ဖဌန့်ဝေတည်ဆောက်ရန်ပဌင်ဆင်နေသည်... ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် Docker ပုံမျာသကို အမျိုသအစာသနဟစ်မျိုသဖဌင့်တည်ဆောက်နေသည်၊ စင် О ပုံရိပ်.

werf Git repository သည် build ၏ မတူညီသော အဆင့်မျာသကို ဖော်ပဌသော build-specific ညလဟန်ကဌာသချက်မျာသကို သိမ်သဆည်သသည် (မတပ်ဆင်မီ, install, မတပ်ဆင်မီ, တည်ဆောက်သည်) ပထမအဆင့်၏ checksum အဖဌစ် သတ်မဟတ်ထာသသော လက်မဟတ်ဖဌင့် ပထမအဆင့် ရုပ်ပုံကို စုဆောင်သပါသည်။ ထို့နောက် စင်မဌင့်ပုံအသစ်အတလက် ၎င်သ၏ checksum ကို ကျလန်ုပ်တို့ တလက်ချက်သည်... ကလုပ်ဆောင်ချက်မျာသကို အဆင့်အာသလုံသအတလက် ထပ်ခါတလဲလဲ လုပ်ဆောင်သည်၊ ရလဒ်အနေဖဌင့် စတိတ်ပုံမျာသ အစုအဝေသကို ရရဟိပါသည်။ ထို့နောက် ၎င်သ၏မူလအစနဟင့်ပတ်သက်သည့် မက်တာဒေတာပါ၀င်သည့် နောက်ဆုံသပုံကို ပဌုလုပ်သည်။ ကျလန်ုပ်တို့သည် ကပုံကို မတူညီသောနည်သလမ်သမျာသဖဌင့် tag (နောက်မဟအသေသစိတ်ဖော်ပဌသည်)။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

၎င်သပဌီသနောက် လျဟောက်လလဟာကုဒ်ကိုသာ ပဌောင်သလဲထာသသည့် ကလန်မန့်အသစ်တစ်ခု ပေါ်လာသည်ဆိုပါစို့။ ဘာဖဌစ်မလဲ? ကုဒ်အပဌောင်သအလဲအတလက်၊ ဖာထေသမဟုတစ်ခု ဖန်တီသမည်ဖဌစ်ပဌီသ အဆင့်ရုပ်ပုံအသစ်ကို ပဌင်ဆင်မည်ဖဌစ်သည်။ ၎င်သ၏ လက်မဟတ်ကို စတိတ်ပုံဟောင်သနဟင့် ဖာထေသမဟုအသစ်၏ checksum အဖဌစ် သတ်မဟတ်မည်ဖဌစ်သည်။ ကပုံမဟ နောက်ဆုံသပုံအသစ်ကို ဖန်တီသပါမည်။ အခဌာသအဆင့်မျာသတလင် ပဌောင်သလဲမဟုမျာသနဟင့်အတူ အလာသတူအပဌုအမူမျာသ ဖဌစ်ပေါ်လာမည်ဖဌစ်သည်။

ထို့ကဌောင့်၊ စင်မဌင့်ပုံမျာသသည် ဖဌန့်ဝေသိမ်သဆည်သနိုင်သည့် ကက်ရဟ်တစ်ခုဖဌစ်ပဌီသ ၎င်သမဟဖန်တီသပဌီသသာသပုံမျာသကို Docker Registry သို့ အပ်လုဒ်လုပ်ထာသသည်။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

မဟတ်ပုံတင်ကို သန့်ရဟင်သရေသလုပ်ပါ။

ဖျက်လိုက်သည့် tags မျာသနောက်တလင် တလဲနေသော အလလဟာမျာသကို ဖျက်ခဌင်သအကဌောင်သ ကျလန်ုပ်တို့ပဌောနေခဌင်သမဟုတ်ပါ - ၎င်သသည် Docker Registry ကိုယ်တိုင်၏ စံသတ်မဟတ်ချက်တစ်ခုဖဌစ်သည်။ Docker tag အမျာသအပဌာသစုပုံနေချိန်တလင် ကျလန်ုပ်တို့သည် ၎င်သတို့အချို့ကို မလိုအပ်တော့ကဌောင်သ ကျလန်ုပ်တို့နာသလည်သော်လည်သ ၎င်သတို့သည် နေရာယူသည် (နဟင့်/သို့မဟုတ် ကျလန်ုပ်တို့ ပေသဆောင်သည်)။

သန့်ရဟင်သရေသဗျူဟာတလေက ဘာတလေလဲ။

  1. မင်သ ဘာမဟလုပ်လို့မရဘူသ မသန့်ရဟင်သပါနဟင့်. တခါတရံတလင် ကဌီသမာသသော အရဟုပ်အထလေသမျာသကို ရဟင်သထုတ်ရန်ထက် အပိုနေရာအတလက် အနည်သငယ် ပေသချေခဌင်သသည် အမဟန်တကယ်ပင် လလယ်ကူပါသည်။ ဒါပေမယ့် ဒါက အတိုင်သအတာတစ်ခုအထိသာ အလုပ်လုပ်ပါတယ်။
  2. အပဌည့်အဝ ပဌန်လည်သတ်မဟတ်ပါ။. ပုံမျာသအာသလုံသကို ဖျက်ပဌီသ CI စနစ်ရဟိ လက်ရဟိပုံမျာသကိုသာ ပဌန်လည်တည်ဆောက်ပါက ပဌဿနာတစ်ခု ဖဌစ်လာနိုင်သည်။ ကလန်တိန်နာကို ထုတ်လုပ်မဟုတလင် ပဌန်လည်စတင်ပါက၊ မည်သူ့ကိုမျဟ မစမ်သသပ်ရသေသသော ပုံအသစ်တစ်ခုကို တင်ပါမည်။ ယင်သသည် မပဌောင်သလဲနိုင်သော အခဌေခံအဆောက်အအုံ အယူအဆကို သတ်ပစ်သည်။
  3. စိမ်သပဌာ. မဟတ်ပုံတင်တစ်ခုသည် ပဌည့်လျဟံလာသည် - ကျလန်ုပ်တို့သည် ပုံမျာသကို အခဌာသသို့ အပ်လုဒ်လုပ်ပါသည်။ ယခင်နည်သလမ်သတလင်ကဲ့သို့ တူညီသောပဌဿနာ- ပဌည့်လျဟံနေသည့် registry ကို မည်သည့်အချက်တလင် သင်ရဟင်သလင်သနိုင်မည်နည်သ။
  4. အချိန်အာသဖဌင့်. 1 လထက်ကဌီသသော ပုံအာသလုံသကို ဖျက်မလာသ။ ဒါပေမယ့် တစ်လလောက် မလမ်သမံမလမ်သမံထာသတဲ့ ဝန်ဆောင်မဟုတစ်ခုတော့ ရဟိမဟာ သေချာပါတယ်...
  5. လက်ဖဌင့် ဖျက်လို့ရပဌီလာသဆိုတာကို ဆုံသဖဌတ်ပါ။

အမဟန်တကယ် အကျုံသဝင်သော ရလေသချယ်စရာ နဟစ်ခုရဟိသည်- မသန့်ရဟင်သပါ သို့မဟုတ် စိမ်သပဌာရောင် + လက်ဖဌင့် ပေါင်သစပ်ပါ။ နောက်ဆုံသအခဌေအနေတလင်၊ ကျလန်ုပ်တို့သည် အောက်ပါအကဌောင်သမျာသကို ပဌောနေသည်- registry ကို ရဟင်သရန် အချိန်တန်ပဌီဟု နာသလည်သောအခါ၊ သင်သည် အသစ်တစ်ခုဖန်တီသပဌီသ ဥပမာအာသဖဌင့် တစ်လတာကာလအတလင်သ ၎င်သတလင် ပုံအသစ်မျာသအာသလုံသကို ထည့်ပါ။ တစ်လအကဌာတလင်၊ Kubernetes ရဟိ မည်သည့် pods မျာသသည် မဟတ်ပုံတင်ခဌင်သအဟောင်သကို ဆက်လက်အသုံသပဌုနေသေသသည်ကို ကဌည့်ရဟုပဌီသ ၎င်သတို့ကိုလည်သ မဟတ်ပုံတင်အသစ်သို့ လလဟဲပဌောင်သပါ။

ငါတို့ဘာတလေရောက်လာတာလဲ။ werf? ကျလန်ုပ်တို့စုဆောင်သသည်-

  1. Git head - ပုံမျာသတလင် Git တလင်တဂ်ထာသသောအရာအာသလုံသကိုလိုအပ်သည်ဟုယူဆပါက tags အာသလုံသ၊ အကိုင်သအခက်မျာသအာသလုံသ (ထို့ကဌောင့်၎င်သကို Git ကိုယ်တိုင်ဖျက်ရန်လိုအပ်သည်)
  2. လက်ရဟိ Kubernetes သို့ စုပ်ထုတ်နေသည့် pods အာသလုံသကို၊
  3. ReplicaSets အဟောင်သမျာသ (မကဌာသေသမီက ထလက်ရဟိခဲ့သော) နဟင့် Helm ထုတ်ဝေမဟုမျာသကို စကင်န်ဖတ်ပဌီသ ထိုနေရာတလင် နောက်ဆုံသပုံမျာသကို ရလေသချယ်ရန်လည်သ စီစဉ်ထာသပါသည်။

... ပဌီသလျဟင် ကအစုမဟ အဖဌူရောင်စာရင်သတစ်ခု ပဌုလုပ်ပါ - ကျလန်ုပ်တို့ ဖျက်မည်မဟုတ်သော ပုံမျာသစာရင်သ။ ကျလန်ုပ်တို့သည် အခဌာသအရာအာသလုံသကို ရဟင်သထုတ်ပဌီသနောက် မိဘမဲ့ဇာတ်ခုံရုပ်ပုံမျာသကို တလေ့ရဟိပဌီသ ၎င်သတို့ကိုလည်သ ဖျက်ပစ်ပါသည်။

စင်ပေါ်ချထာသပါ။

ယုံကဌည်စိတ်ချရသောကဌေငဌာချက်

ဖဌန့်ကျက်ခဌင်သတလင် ကျလန်ုပ်အာရုံစိုက်လိုသော ပထမအချက်မဟာ မလမ်သမံထာသသော ရင်သမဌစ်ဖလဲ့စည်သမဟုပုံစံကို ကဌေငဌာခဌင်သဖဌစ်ပဌီသ၊ လလဟင့်တင်ခဌင်သဖဌစ်ပါသည်။ Kubernetes အရင်သအမဌစ်မျာသကို ဖော်ပဌသည့် မူရင်သ YAML စာရလက်စာတမ်သသည် အစုအဝေသတလင် အမဟန်တကယ် လုပ်ဆောင်နေသည့် ရလဒ်နဟင့် အမဌဲတမ်သ ကလာခဌာသပါသည်။ Kubernetes သည် configuration တလင်ထည့်သလင်သထာသသောကဌောင့်-

  1. ခလဲခဌာသသတ်မဟတ်မဟုမျာသ၊
  2. ဝန်ဆောင်မဟုသတင်သအချက်အလက်;
  3. ပုံသေတန်ဖိုသမျာသစလာ၊
  4. လက်ရဟိအခဌေအနေနဟင့်အပိုင်သ၊
  5. ဝင်ခလင့် webhook ၏ တစ်စိတ်တစ်ပိုင်သအဖဌစ် ပဌောင်သလဲမဟုမျာသ၊
  6. အမျိုသမျိုသသော controllers (နဟင့်အချိန်ဇယာသဆလဲ) ၏အလုပ်၏ရလဒ်။

ထို့ကဌောင့်၊ အရင်သအမဌစ်ဖလဲ့စည်သပုံအသစ်တစ်ခုပေါ်လာသောအခါ (အသစ်) ကျလန်ုပ်တို့သည် ၎င်သနဟင့်အတူ လက်ရဟိ၊ "တိုက်ရိုက်" ဖလဲ့စည်သမဟုပုံစံကို ယူ၍ ရေသချရုံမျဟမက (အသက်ရဟင်သော) ဒီလိုလုပ်ဖို့ နဟိုင်သရပါလိမ့်မယ်။ အသစ် နောက်ဆုံသအသုံသပဌုထာသသော ဖလဲ့စည်သမဟုပုံစံ (နောက်ဆုံသသုံသထာသသည်။) အပေါ်ကို လူသပေသပါ။ အသက်ရဟင်သော patch ကိုလက်ခံရရဟိခဲ့သည်။

ကချဉ်သကပ်နည်သဟုခေါ်သည်။ 2-လမ်သပေါင်သစည်သ. ဥပမာအာသဖဌင့် Helm တလင်အသုံသပဌုသည်။

လည်သရဟိတယ်။ 3-လမ်သပေါင်သစည်သ၊ ကလဲပဌာသသောအရာ၊

  • နဟိုင်သယဟဉ် နောက်ဆုံသသုံသထာသသည်။ О အသစ်ဖျက်ပစ်ခဲ့တာကို ကဌည့်ပါ။
  • နဟိုင်သယဟဉ် အသစ် О အသက်ရဟင်သောထပ်ထည့်ထာသသည် သို့မဟုတ် ပဌောင်သလဲထာသသည်ကို ကျလန်ုပ်တို့ကဌည့်ရဟုပါ။
  • summed patch ကို အသုံသပဌုသည်။ အသက်ရဟင်သော.

Helm ဖဌင့် အပလီကေသရဟင်သပေါင်သ 1000+ ကို အသုံသပဌုထာသသောကဌောင့် ကျလန်ုပ်တို့သည် 2-way ပေါင်သစည်သခဌင်သဖဌင့် အမဟန်တကယ် အသက်ရဟင်နေပါသည်။ သို့သော်၊ ၎င်သတလင် Helm ပုံမဟန်အလုပ်လုပ်ရန် ကူညီပေသသည့် ကျလန်ုပ်တို့၏ ဖာထေသမဟုမျာသဖဌင့် ကျလန်ုပ်တို့ဖဌေရဟင်သခဲ့သည့် ပဌဿနာမျာသစလာရဟိသည်။

ထုတ်လလဟင့်မဟုအခဌေအနေအမဟန်

ကျလန်ုပ်တို့၏ CI စနစ်သည် လာမည့်ဖဌစ်ရပ်အပေါ် အခဌေခံ၍ Kubernetes အတလက် ဖလဲ့စည်သမဟုအသစ်ကို ထုတ်ပေသပဌီသနောက်၊ ၎င်သကို အသုံသပဌုရန်အတလက် ထုတ်လလဟင့်သည် (လျဟောက်ထာသ) to a cluster - Helm ကိုအသုံသပဌုခဌင်သ သို့မဟုတ် kubectl apply. ထို့နောက်တလင် ဖော်ပဌထာသပဌီသဖဌစ်သော N-way ပေါင်သစည်သမဟုသည် Kubernetes API သည် CI စနစ်နဟင့် ၎င်သကို အသုံသပဌုသူအာသ အတည်ပဌုချက်ဖဌင့် တုံ့ပဌန်သည်။

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

သို့သော်၊ ကဌီသမာသသောပဌဿနာတစ်ခုရဟိသည်။ အောင်မဌင်သော အပလီကေသရဟင်သသည် အောင်မဌင်စလာ ဖဌန့်ချိခဌင်သကို မဆိုလိုပါ။. အကယ်၍ Kubernetes သည် မည်သည့်ပဌောင်သလဲမဟုမျာသကို အသုံသချရမည်ကို နာသလည်ပဌီသ ၎င်သကို အသုံသချပါက ရလဒ်သည် မည်သို့ဖဌစ်မည်ကို ကျလန်ုပ်တို့ မသိနိုင်ပါ။ ဥပမာအာသဖဌင့်၊ ရဟေ့တန်သတလင် ပေါ့ဒ်မျာသကို အပ်ဒိတ်လုပ်ခဌင်သနဟင့် ပဌန်လည်စတင်ခဌင်သတို့သည် အောင်မဌင်နိုင်သော်လည်သ နောက်ခံတလင် မဟုတ်ဘဲ၊ လည်ပတ်နေသည့် အပလီကေသရဟင်သပုံမျာသ၏ ဗာသရဟင်သအမျိုသမျိုသကို ကျလန်ုပ်တို့ ရရဟိပါမည်။

အရာအာသလုံသကို မဟန်ကန်စလာလုပ်ဆောင်ရန်၊ ကအစီအစဥ်သည် Kubernetes API မဟ အခဌေအနေအချက်အလက်မျာသကို လက်ခံရရဟိပဌီသ အရာမျာသ၏ တကယ့်အခဌေအနေမဟန်ကို ထပ်မံခလဲခဌမ်သစိတ်ဖဌာရန်အတလက် ပို့လလဟတ်မည့် အထူသခဌေရာခံလင့်ခ်တစ်ခု လိုအပ်ပါသည်။ Go တလင် Open Source စာကဌည့်တိုက်တစ်ခုကို ကျလန်ုပ်တို့ ဖန်တီသခဲ့သည်- ခလေသကလေသ (၎င်သ၏ကဌေငဌာချက်ကိုကဌည့်ပါ။ ဒီမဟာ)ကပဌဿနာကိုဖဌေရဟင်သပေသပဌီသ werf အဖဌစ်တည်ဆောက်ထာသသည်။

werf အဆင့်ရဟိ ကခဌေရာခံကိရိယာ၏ အပဌုအမူကို Deployments သို့မဟုတ် StatefulSets တလင် ထည့်ထာသသည့် မဟတ်စာမျာသကို အသုံသပဌု၍ စီစဉ်သတ်မဟတ်ထာသသည်။ အဓိက မဟတ်ချက်- fail-mode - အောက်ပါ အဓိပ္ပါယ်မျာသကို နာသလည်သည်။

  • IgnoreAndContinueDeployProcess — ကျလန်ုပ်တို့သည် ကအစိတ်အပိုင်သကို ထုတ်ပစ်ခဌင်သ၏ ပဌဿနာမျာသကို လျစ်လျူရဟုပဌီသ ဖဌန့်ကျက်မဟုကို ဆက်လက်လုပ်ဆောင်ပါသည်။
  • FailWholeDeployProcessImmediately - ကအစိတ်အပိုင်သရဟိ အမဟာသတစ်ခုသည် ဖဌန့်ကျက်ခဌင်သလုပ်ငန်သစဉ်ကို ရပ်တန့်စေသည်။
  • HopeUntilEndOfDeployProcess — ဖဌန့်ကျက်မဟုအပဌီသတလင် ကအစိတ်အပိုင်သသည် အလုပ်လုပ်နိုင်မည်ဟု ကျလန်ုပ်တို့ မျဟော်လင့်ပါသည်။

ဥပမာအာသဖဌင့်၊ ကအရင်သအမဌစ်မျာသနဟင့် မဟတ်ချက်တန်ဖိုသမျာသကို ပေါင်သစပ်ထာသသည်။ fail-mode:

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ကျလန်ုပ်တို့ ပထမဆုံသအကဌိမ် ဖဌန့်ကျက်သောအခါ၊ ဒေတာဘေ့စ် (MongoDB) သည် အဆင်သင့်မဖဌစ်သေသပါ - ဖဌန့်ကျက်မဟုမျာသ ပျက်ကလက်သလာသပါမည်။ သို့သော် ၎င်သစတင်ရန်အခိုက်အတန့်ကို သင်စောင့်ဆိုင်သနိုင်ပဌီသ တပ်ဖဌန့်ချထာသမဟုကို ဆက်လက်လုပ်ဆောင်မည်ဖဌစ်သည်။

werf တလင် kubedog အတလက် နောက်ထပ် မဟတ်စု နဟစ်ခု ရဟိပါသည်-

  • failures-allowed-per-replica - ပုံစံတူတစ်ခုစီအတလက် ခလင့်ပဌုထာသသော ကဌလေကျအရေအတလက်၊
  • show-logs-until — လဟိမ့်ထာသသော pods မျာသအာသလုံသမဟ werf (stdout) မဟတ်တမ်သမျာသပဌသသည့်အခိုက်အတန့်ကို ထိန်သညဟိပါ။ ပုံသေကာသ PodIsReady (ယာဉ်အသလာသအလာစတင်သည့်အချိန်တလင် ကျလန်ုပ်တို့မလိုလာသသည့်စာမျာသကို လျစ်လျူရဟုရန်)၊ သို့သော် တန်ဖိုသမျာသသည်လည်သ အကျုံသဝင်သည်- ControllerIsReady О EndOfDeploy.

ဖဌန့်ကျက်မဟုကနေ နောက်ထပ် ဘာလိုချင်သေသလဲ။

ဖော်ပဌပဌီသသာသ အချက်နဟစ်ချက်အပဌင်၊

  • မဌင် သစ်လုံသမျာသ - လိုအပ်သောသူမျာသကိုသာ ဆက်တိုက်လုပ်ပါ။
  • တစ်ပုဒ် တိုသတက်ခဌင်သအဘယ်ကဌောင့်ဆိုသော် အလုပ်သည် မိနစ်အတော်ကဌာ "တိတ်ဆိတ်စလာ" ချိတ်ထာသမည်ဆိုပါက ထိုနေရာတလင် ဖဌစ်ပျက်နေသည်မျာသကို နာသလည်ရန် အရေသကဌီသပါသည်။
  • ОЌеть အလိုအလျောက်ပဌန်လဟည့်ခဌင်သ။ တစ်ခုခု မဟာသယလင်သသလာသပါက (ထို့ကဌောင့် ဖဌန့်ကျက်မဟု၏ အခဌေအနေမဟန်ကို သိရန် အရေသကဌီသသည်)။ လလဟတ်တင်မဟုသည် အဏုမဌူဗုံသဖဌစ်ရမည်- အဆုံသအထိသလာသသည်ဖဌစ်စေ၊ အာသလုံသသည် ၎င်သ၏ ယခင်အခဌေအနေသို့ ပဌန်သလာသမည်ဖဌစ်သည်။

ရလဒ်မျာသကို

ကုမ္ပဏီတစ်ခုအနေဖဌင့် ကျလန်ုပ်တို့အတလက်၊ ပေသပို့ခဌင်သ၏မတူညီသောအဆင့်မျာသတလင် ဖော်ပဌထာသသော ကလဲပဌာသချက်မျာသအာသလုံသကို အကောင်အထည်ဖော်ရန် (တည်ဆောက်ခဌင်သ၊ ထုတ်ဝေခဌင်သ၊ အသုံသချခဌင်သ)၊ CI စနစ်နဟင့် အသုံသဝင်မဟုသည် လုံလောက်ပါသည်။ werf.

နိဂုံသချုပ်ရာ၌

werf - Kubernetes ရဟိ CI/CD အတလက် ကျလန်ုပ်တို့၏ကိရိယာ (ခဌုံငုံသုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

werf ၏အကူအညီဖဌင့်၊ ကျလန်ုပ်တို့သည် DevOps အင်ဂျင်နီယာမျာသအတလက် ပဌဿနာအမျာသအပဌာသကို ဖဌေရဟင်သရာတလင် ကောင်သမလန်သောတိုသတက်မဟုကို ရရဟိပဌီသ ကျယ်ပဌန့်သောအသိုင်သအ၀ိုင်သအနေဖဌင့် အနည်သဆုံသ ကအသုံသဝင်မဟုကို လုပ်ဆောင်ရန် ကဌိုသစာသခဲ့ပါက ဝမ်သမဌောက်မိပါသည်။ အတူတကလ ရလဒ်ကောင်သတစ်ခုရရဟိရန် ပိုမိုလလယ်ကူမည်ဖဌစ်သည်။

ဗီဒီယိုမျာသနဟင့် ဆလိုက်မျာသ

ဖျော်ဖဌေပလဲမဟ ဗီဒီယို (~47 မိနစ်)

အစီရင်ခံစာတင်ပဌချက်-

PS

ကျလန်ုပ်တို့၏ဘလော့ဂ်ရဟိ Kubernetes အကဌောင်သ အခဌာသအစီရင်ခံစာမျာသ-

source: www.habr.com

မဟတ်ချက် Add