CI/CD ကလင်သဆက်တစ်ခု ဖန်တီသခဌင်သနဟင့် Docker ဖဌင့် အလိုအလျောက်လုပ်ဆောင်ခဌင်သ။

90 နဟောင်သပိုင်သတလေမဟာ ကျလန်တော့်ရဲ့ ပထမဆုံသ ဝဘ်ဆိုဒ်တလေကို ရေသခဲ့ပါတယ်။ ထိုအချိန်က ၎င်သတို့ကို လုပ်ငန်သဆောင်တာအဖဌစ် သတ်မဟတ်ရန် အလလန်လလယ်ကူခဲ့သည်။ မျဟဝေထာသသော hosting အချို့တလင် Apache ဆာဗာတစ်ခုရဟိပါသည်၊ သင်သည် FTP မဟတစ်ဆင့် ကဆာဗာသို့ ဝင်ရောက်နိုင်သည်။ ftp://ftp.example.com. ထို့နောက် သင့်အမည်နဟင့် စကာသဝဟက်ကို ထည့်သလင်သပဌီသ ဖိုင်မျာသကို ဆာဗာသို့ အပ်လုဒ်လုပ်ရပါမည်။ မတူညီသောအချိန်မျာသရဟိခဲ့သည်၊ အရာအာသလုံသသည်ယခုထက်ပိုမိုရိုသရဟင်သခဲ့သည်။

CI/CD ကလင်သဆက်တစ်ခု ဖန်တီသခဌင်သနဟင့် Docker ဖဌင့် အလိုအလျောက်လုပ်ဆောင်ခဌင်သ။

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

ကျလန်ုပ်၏ကိုယ်ရေသကိုယ်တာပရောဂျက်အတလက် ကျလန်ုပ်တလင် အထူသဖလဲ့စည်သပုံတစ်ခုရဟိသည်။ လုပ်ဆောင်ချက်တစ်ခုတည်သကို လုပ်ဆောင်ခဌင်သဖဌင့် ထုတ်လုပ်မဟုတလင် ဆိုက်ကို ဖဌန့်ကျက်ရန် လိုအပ်ကဌောင်သ ကျလန်ုပ်သိပါသည်- ဌာနခလဲတစ်ခုသို့ ကုဒ်ရေသခဌင်သ master GitHub တလင် ထို့အပဌင်၊ ကျလန်ုပ်၏ဝဘ်အက်ပလီကေသရဟင်သငယ်၏လည်ပတ်မဟုကိုသေချာစေရန်အတလက်၊ ကျလန်ုပ်သည် ကဌီသမာသသော Kubernetes အစုအဝေသကဌီသကို စီမံခန့်ခလဲရန်၊ သို့မဟုတ် Docker Swarm နည်သပညာကို အသုံသမပဌုချင်တော့ပါ၊ သို့မဟုတ် pods၊ အေသဂျင့်မျာသနဟင့် အခဌာသအမျိုသအစာသအာသလုံသပါရဟိသော ဆာဗာမျာသကို ထိန်သသိမ်သထာသလိုကဌောင်သ ကျလန်ုပ်သိပါသည်။ ရဟုပ်ထလေသမဟုမျာသ။ အလုပ်ကို တတ်နိုင်သမျဟ လလယ်ကူအောင် လုပ်ဖို့ ပန်သတိုင်ကို ရောက်ဖို့အတလက် CI/CD နဲ့ ရင်သနဟီသဖို့ လိုပါတယ်။

အကယ်၍ သင့်တလင် ပရောဂျက်ငယ်တစ်ခု (ကကိစ္စတလင်၊ Node.js ပရောဂျက်) ရဟိပါက၊ ကပရောဂျက်၏ ဖဌန့်ကျက်မဟုကို အလိုအလျောက် မည်သို့လုပ်ဆောင်ရမည်ကို သိလိုသည်၊ သိုလဟောင်မဟုတလင် သိမ်သဆည်သထာသသည့်အရာသည် ထုတ်လုပ်မဟုတလင် လုပ်ဆောင်သည့်အရာနဟင့် အတိအကျကိုက်ညီကဌောင်သ သေချာစေပဌီသ၊ ကျလန်ုပ်သည် ဒီဆောင်သပါသကို စိတ်ဝင်စာသမယ်ထင်ပါတယ်။

လိုအပ်ချက်မျာသ

ကဆောင်သပါသကိုဖတ်ရဟုသူသည် command line နဟင့် Bash scripts မျာသကိုအခဌေခံနာသလည်မဟုရဟိရန်မျဟော်လင့်ပါသည်။ ထို့အပဌင်သူသည်အကောင့်မျာသလိုအပ်လိမ့်မည်။ ဗစ် CI О Docker အချက်အချာ.

ရည်မဟန်သချက်ပန်သတိုင်

ကဆောင်သပါသကို ခဌလင်သချက်မရဟိ “ကျူတိုရီရယ်” ဟုခေါ်သည်ဟု မပဌောလိုပါ။ ၎င်သသည် ကျလန်ုပ်လေ့လာသင်ယူခဲ့သည့်အရာမျာသအကဌောင်သနဟင့် ကုဒ်ကို စမ်သသပ်ခဌင်သနဟင့် ထုတ်လုပ်ခဌင်သသို့ အသုံသချခဌင်သအတလက် ကျလန်ုပ်နဟင့် ကိုက်ညီသည့် လုပ်ငန်သစဉ်ကို ဖော်ပဌသည့် စာရလက်စာတမ်သတစ်ခုဖဌစ်ပဌီသ အလိုအလျောက်ဖဌတ်သန်သမဟုတစ်ခုတလင် လုပ်ဆောင်ခဌင်သဖဌစ်သည်။

ကသည်မဟာ ကျလန်ုပ်၏ အလုပ်အသလာသအလာ ပဌီသဆုံသသလာသခဌင်သပင်ဖဌစ်သည်။

ကုဒ်မဟလလဲ၍ မည်သည့် repository ဌာနခလဲတလင်မဆို တင်ထာသသော ကုဒ်အတလက် masterအောက်ပါလုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်သည်-

  • Travis CI တလင် တည်ဆောက်သည့် ပရောဂျက်သည် စတင်သည်။
  • ယူနစ်၊ ပေါင်သစည်သမဟုနဟင့် အဆုံသမဟ အဆုံသစမ်သသပ်မဟုအာသလုံသကို လုပ်ဆောင်သည်။

ထဲသို့ကျသောကုဒ်အတလက်သာ masterအောက်ပါအတိုင်သလုပ်ဆောင်သည်-

  • အပေါ်မဟာပဌောခဲ့တဲ့အရာအာသလုံသအပဌင်...
  • လက်ရဟိကုဒ်၊ ဆက်တင်မျာသနဟင့် ပတ်ဝန်သကျင်ကို အခဌေခံ၍ Docker ပုံတစ်ခု တည်ဆောက်ခဌင်သ။
  • ပုံကို Docker Hub သို့ ဖဌန့်ကျက်ခဌင်သ။
  • ထုတ်လုပ်မဟုဆာဗာသို့ချိတ်ဆက်မဟု။
  • Docker Hub မဟ ပုံတစ်ပုံကို ဆာဗာသို့ အပ်လုဒ်လုပ်ခဌင်သ။
  • လက်ရဟိကလန်တိန်နာကို ရပ်လိုက်ပဌီသ ပုံအသစ်ကိုအခဌေခံ၍ အသစ်တစ်ခုစတင်ပါ။

Docker၊ ပုံမျာသနဟင့် containers မျာသအကဌောင်သ လုံသဝမသိပါက စိတ်မပူပါနဟင့်။ အဲဒါကို အာသလုံသပဌောပဌမယ်။

CI/CD ဆိုတာဘာလဲ။

အတိုကောက် CI/CD သည် "စဉ်ဆက်မပဌတ် ပေါင်သစည်သခဌင်သ/အဆက်မပဌတ် ဖဌန့်ကျက်ခဌင်သ" ကို ကိုယ်စာသပဌုသည်။

▍ စဉ်ဆက်မပဌတ်ပေါင်သစပ်ခဌင်သ။

စဉ်ဆက်မပဌတ် ပေါင်သစပ်ခဌင်သသည် ပရောဂျက်၏ ပင်မအရင်သအမဌစ်ကုဒ် သိုလဟောင်မဟုတလင် ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသက ကတိကဝတ်ပဌုသည့် လုပ်ငန်သစဉ်တစ်ခု (မျာသသောအာသဖဌင့် ဌာနခလဲတစ်ခုဖဌစ်သည်။ master) တစ်ချိန်တည်သမဟာပင်၊ အလိုအလျောက်စမ်သသပ်ခဌင်သဖဌင့် ကုဒ်၏အရည်အသလေသကို အာမခံပါသည်။

▍ အဆက်မပဌတ်ဖဌန့်ကျက်ခဌင်သ။

စဉ်ဆက်မပဌတ် ဖဌန့်ကျက်ခဌင်သသည် ကုဒ်ကို ထုတ်လုပ်ခဌင်သသို့ မကဌာခဏ အလိုအလျောက် ဖဌန့်ကျက်ခဌင်သ ဖဌစ်သည်။ CI/CD အတိုကောက်၏ ဒုတိယအပိုင်သကို တစ်ခါတစ်ရံ “စဉ်ဆက်မပဌတ် ပေသပို့ခဌင်သ” အဖဌစ် စာလုံသပေါင်သပါသည်။ ၎င်သသည် အခဌေခံအာသဖဌင့် "စဉ်ဆက်မပဌတ် ဖဌန့်ကျက်ခဌင်သ" နဟင့် တူညီသော်လည်သ "စဉ်ဆက်မပဌတ် ပေသပို့ခဌင်သ" သည် ပရောဂျက် ဖဌန့်ကျက်မဟု လုပ်ငန်သစဉ် မစတင်မီ အပဌောင်သအလဲမျာသကို ကိုယ်တိုင် အတည်ပဌုရန် လိုအပ်ကဌောင်သ အဓိပ္ပာယ်သက်ရောက်သည်။

စတင်

ကျလန်တော်လေ့လာဖူသတဲ့ app က ဒီ app လို့ခေါ်ပါတယ်။ မဟတ်ထာသပါ။. ကသည်မဟာ ကျလန်ုပ်လုပ်ဆောင်နေသော ဝဘ်ပရောဂျက်တစ်ခုဖဌစ်ပဌီသ မဟတ်စုမျာသပဌုလုပ်ရန်အတလက် ဒီဇိုင်သထုတ်ထာသသည်။ ပထမတော့ ငါကဌိုသစာသတယ်။ JAMStack- ပရောဂျက် သို့မဟုတ် ဆာဗာမပါဘဲ ရဟေ့ဆုံသအပလီကေသရဟင်သတစ်ခုမျဟသာဖဌစ်ပဌီသ ၎င်သမဟပေသသောစံ hosting နဟင့် ပရောဂျက်ဖဌန့်ကျက်မဟုစလမ်သရည်မျာသကို အခလင့်ကောင်သယူနိုင်ရန်၊ Netlify. အက်ပလီကေသရဟင်သ၏ ရဟုပ်ထလေသမဟုမျာသ တိုသပလာသလာသည်နဟင့်အမျဟ၊ ၎င်သသည် အလိုအလျောက် ပေါင်သစပ်ခဌင်သနဟင့် ပရောဂျက်၏ အလိုအလျောက် ဖဌန့်ကျက်ခဌင်သအတလက် ကျလန်ုပ်၏ကိုယ်ပိုင်ဗျူဟာကို ရေသဆလဲရန် လိုအပ်သည်ဟု ဆိုလိုသည်မဟာ ၎င်သ၏ဆာဗာအစိတ်အပိုင်သကို ဖန်တီသရန် လိုအပ်ပါသည်။

ကျလန်ုပ်၏ကိစ္စတလင်၊ အပလီကေသရဟင်သသည် Node.js ပတ်၀န်သကျင်တလင်လည်ပတ်နေသော Express ဆာဗာတစ်ခုဖဌစ်ပဌီသ စာမျက်နဟာတစ်ခုတည်သ React အက်ပ်လီကေသရဟင်သကို ဝန်ဆောင်မဟုပေသကာ လုံခဌုံသောဆာဗာဘက်ခဌမ်သ API ကို ပံ့ပိုသပေသပါသည်။ ကဗိသုကာသည် တလင်တလေ့နိုင်သော နည်သဗျူဟာကို လိုက်နာသည်။ က အစုအစည်သ အထောက်အထာသစိစစ်ခဌင်သ လမ်သညလဟန်အပဌည့်အစုံ။

ငါနဲ့ တိုင်ပင်တယ်။ သူငယ်ချင်သအလိုအလျောက်စနစ်ဆိုင်ရာ ကျလမ်သကျင်သူတစ်ညသဖဌစ်ပဌီသ ၎င်သကို ကျလန်ုပ်အလိုရဟိသည့်အတိုင်သ လုပ်ဆောင်နိုင်ရန် ကျလန်ုပ်ဘာလုပ်ရမည်နည်သ။ ကဆောင်သပါသ၏ပန်သတိုင်မျာသကဏ္ဍတလင်ဖော်ပဌထာသသော အလိုအလျောက်လုပ်ဆောင်မဟုအသလာသအလာသည် မည်သို့ရဟိသင့်သည်ကို သူ ကျလန်ုပ်အာသ အကဌံဥာဏ်ပေသခဲ့သည်။ ကပန်သတိုင်မျာသ ရဟိခဌင်သသည် Docker ကို မည်သို့အသုံသပဌုရမည်ကို အဖဌေရဟာရန် လိုအပ်သည်ဟု ဆိုလိုပါသည်။

Docker

Docker သည် ကလန်တိန်နာပဌုလုပ်ခဌင်သနည်သပညာကဌောင့် အပလီကေသရဟင်သမျာသကို လလယ်ကူစလာဖဌန့်ဝေနိုင်စေရန်၊ အသုံသပဌုနိုင်ပဌီသ တူညီသောပတ်ဝန်သကျင်တလင် လုပ်ဆောင်နိုင်စေမည့် ကိရိယာတစ်ခုဖဌစ်သည်။ ပထမညသစလာ၊ ကျလန်ုပ်သည် Docker command line tools (CLI) တလင် ကျလန်ုပ်၏လက်ကို ရယူရန်လိုအပ်ပါသည်။ ညလဟန်ကဌာသချက်မျာသ Docker တပ်ဆင်ခဌင်သလမ်သညလဟန်ကို အလလန်ရဟင်သရဟင်သလင်သလင်သနဟင့် နာသလည်နိုင်သည်ဟု ခေါ်ဆိုနိုင်သော်လည်သ ၎င်သမဟ ပထမညသဆုံသ တပ်ဆင်ခဌင်သအဆင့်ကို လုပ်ဆောင်ရန်အတလက် Docker Desktop (Mac သို့မဟုတ် Windows အတလက်) ကို ဒေါင်သလုဒ်လုပ်ရန် လိုအပ်ကဌောင်သ ၎င်သထံမဟ သိရဟိနိုင်ပါသည်။

Docker Hub သည် အကဌမ်သအာသဖဌင့် အတူတူပင် GitHub git repositories သို့မဟုတ် registry အတလက် npm JavaScript အထုပ်မျာသအတလက်။ ၎င်သသည် Docker ပုံမျာသအတလက် အလန်လိုင်သသိုလဟောင်မဟုတစ်ခုဖဌစ်သည်။ ကအရာသည် Docker Desktop နဟင့် ချိတ်ဆက်ထာသသည်။

ထို့ကဌောင့် Docker ကိုစတင်ရန်အတလက် သင်သည် အရာနဟစ်ခုကို လုပ်ဆောင်ရန် လိုအပ်သည်-

၎င်သပဌီသနောက်၊ Docker ဗာသရဟင်သကိုစစ်ဆေသရန် အောက်ပါ command ကို run ခဌင်သဖဌင့် Docker CLI အလုပ်လုပ်ခဌင်သရဟိမရဟိ စစ်ဆေသနိုင်သည်-

docker -v

ထို့နောက် သင်၏အသုံသပဌုသူအမည်နဟင့် စကာသဝဟက်ကို ထည့်သလင်သခဌင်သဖဌင့် Docker Hub သို့ ဝင်ရောက်ပါ-

docker login

Docker ကိုအသုံသပဌုရန်၊ ပုံမျာသနဟင့် ကလန်တိန်နာမျာသ၏ သဘောတရာသမျာသကို နာသလည်ရပါမည်။

▍ ပုံမျာသ

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

# ВывПЎ свеЎеМОй ПбП всех Пбразах
docker images

က command သည် အောက်ပါ ခေါင်သစီသဖဌင့် ဇယာသတစ်ခုကို ထုတ်ပါမည်-

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

နောက်တစ်ခုကတော့ တူညီတဲ့ format နဲ့ command တစ်ချို့ကို လေ့လာကဌည့်ပါမယ် - အရင်ဆုံသ comment တစ်ခုပါတဲ့ command တစ်ခု၊ ပဌီသရင် output လုပ်လို့ရတဲ့ ဥပမာတစ်ခုပါ။

▍ ကလန်တိန်နာမျာသ

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

# ПеречОслеМОе всех кПМтейМерПв
docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES
---

▍ တဂ်မျာသ

Tag သည် ပုံတစ်ပုံ၏ သီသခဌာသဗာသရဟင်သကို ညလဟန်ပဌနေပါသည်။

▍ Docker ညလဟန်ကဌာသချက်မျာသကို အမဌန်ကိုသကာသပါ။

ကသည်မဟာ အသုံသမျာသသော Docker command အချို့၏ ခဌုံငုံသုံသသပ်ချက်ဖဌစ်သည်။

အဖလဲ့

စကာသစပ်

အကျိုသ

docker တည်ဆောက်ခဌင်သ။

ပုံရိပ်

Dockerfile မဟပုံတစ်ခုတည်ဆောက်ခဌင်သ။

docker tag

ပုံရိပ်

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

docker ပုံရိပ်တလေ

ပုံရိပ်

ပုံမျာသကို စာရင်သပဌုစုခဌင်သ။

docker ပဌေသ

ထည့်သောအရာ

ပုံတစ်ခုအပေါ် အခဌေခံ၍ ကလန်တိန်နာကို လုပ်ဆောင်ခဌင်သ။

docker တလန်သသည်။

ပုံရိပ်

ပုံတစ်ပုံကို မဟတ်ပုံတင်ခဌင်သသို့ အပ်လုဒ်လုပ်ခဌင်သ။

docker ဆလဲခဌင်သ။

ပုံရိပ်

မဟတ်ပုံတင်ခဌင်သမဟ ပုံတစ်ပုံကို တင်နေသည်။

ps docker

ထည့်သောအရာ

ကလန်တိန်နာစာရင်သ

docker စနစ် သုတ်သင်ခဌင်သ။

ပုံ/ကလန်တိန်နာ

အသုံသမပဌုသော ကလန်တိန်နာမျာသနဟင့် ပုံမျာသကို ဖယ်ရဟာသခဌင်သ။

▍Dockerfile

ပဌည်တလင်သမဟာ ထုတ်လုပ်ရေသအက်ပလီကေသရဟင်သကို ဘယ်လို run ရမလဲ သိတယ်။ ကျလန်ုပ်တလင် အဆင်သင့်လုပ်ထာသသော React အပလီကေသရဟင်သကို တည်ဆောက်ရန် ဒီဇိုင်သထုတ်ထာသသော Webpack ဖလဲ့စည်သမဟုတစ်ခုရဟိသည်။ ထို့နောက်၊ ကျလန်ုပ်တလင် Node.js အခဌေခံဆာဗာကို စတင်သည့် အမိန့်တစ်ခုရဟိသည်။ 5000. ကပုံသည်-

npm i         # устаМПвка завОсОЌПстей
npm run build # сбПрка React-прОлПжеМОя
npm run start # запуск Node-сервера

ကပစ္စည်သအတလက် ကျလန်ုပ်တလင် နမူနာအပလီကေသရဟင်သတစ်ခု မရဟိကဌောင်သ သတိပဌုသင့်သည်။ သို့သော် ကတလင်၊ စမ်သသပ်မဟုမျာသအတလက်၊ မည်သည့်ရိုသရဟင်သသော Node အပလီကေသရဟင်သမဆို လုပ်ဆောင်လိမ့်မည်။

ကလန်တိန်နာကို အသုံသပဌုရန်အတလက် သင်သည် Docker အာသ ညလဟန်ကဌာသချက်မျာသ ပေသရပါမည်။ ၎င်သကိုခေါ်သောဖိုင်မဟတဆင့်လုပ်ဆောင်သည်။ Dockerfileပရောဂျက်၏ root directory တလင်တည်ရဟိသည်။ ကဖိုင်သည် အစပိုင်သတလင် နာသမလည်နိုင်ဖဌစ်ပုံရသည်။

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

  • FROM မဟ - ကအမိန့်သည် ဖိုင်တစ်ခုကို စတင်သည်။ ၎င်သသည် ကလန်တိန်နာတည်ဆောက်ထာသသည့် အခဌေခံပုံအာသ သတ်မဟတ်ပေသသည်။
  • မိတ္တူ - ဒေသတလင်သ အရင်သအမဌစ်မဟ ဖိုင်မျာသကို ကလန်တိန်နာသို့ ကူသယူခဌင်သ။
  • အလုပ်ဒိုင်ယာ - အောက်ပါ command မျာသအတလက် အလုပ်လမ်သညလဟန်ကို သတ်မဟတ်ခဌင်သ။
  • RUN - အမိန့်မျာသကို run ။
  • ဖော်ထုတ်ပါ။ - ဆိပ်ကမ်သဆက်တင်မျာသ။
  • ENTRYPOINT - လုပ်ဆောင်ရမည့် အမိန့်ကို ညလဟန်ပဌခဌင်သ။

Dockerfile ကကဲ့သို့သောပုံရသည်-

# ЗагрузОть базПвый Пбраз
FROM node:12-alpine

# СкПпОрПвать файлы Оз текущей ЎОректПрОО в ЎОректПрОю app/
COPY . app/

# ИспПльзПвать app/ в рПлО рабПчей ЎОректПрОО
WORKDIR app/

# УстаМПвОть завОсОЌПстО (кПЌаМЎа npm ci пПхПжа npm i, МП ОспПльзуется Ўля автПЌатОзОрПваММых сбПрПк)
RUN npm ci --only-production

# СПбрать клОеМтскПе React-прОлПжеМОе Ўля прПЎакшМа
RUN npm run build

# ПрПслушОвать указаММый пПрт
EXPOSE 5000

# ЗапустОть Node-сервер
ENTRYPOINT npm run start

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

▍ ကလန်တိန်နာကို တည်ဆောက်ခဌင်သ၊ တဂ်ခဌင်သနဟင့် လုပ်ဆောင်ခဌင်သ။

ကလန်တိန်နာကို ပဌည်တလင်သ တပ်ဆင်ခဌင်သနဟင့် လလဟတ်တင်ခဌင်သတို့သည် ကျလန်ုပ်တို့ ရရဟိပဌီသနောက်ဖဌစ်သည်။ Dockerfileအလုပ်တလေက တော်တော်ရိုသရဟင်သပါတယ်။ ပုံကို Docker Hub သို့ မတလန်သမီ၊ ၎င်သကို စက်တလင်သ၌ စမ်သသပ်ရန် လိုအပ်သည်။

▍ စည်သဝေသပလဲ

ပထမညသစလာသင်စုဆောင်သရန်လိုအပ်သည်။ ပုံရိပ်အမည်သတ်မဟတ်ခဌင်သ နဟင့် တဂ်တစ်ခု စိတ်ကဌိုက်ရလေသချယ်ခဌင်သ (တဂ်ကို မသတ်မဟတ်ပါက၊ စနစ်သည် ပုံတလင် တဂ်ကို အလိုအလျောက် သတ်မဟတ်ပေသပါမည်။ latest).

# СбПрка Пбраза
docker build -t <image>:<tag> .

ကအမိန့်ကိုအသုံသပဌုပဌီသနောက်၊ သင်သည် Docker တည်ဆောက်ပုံကိုကဌည့်ရဟုနိုင်သည်။

Sending build context to Docker daemon   2.88MB
Step 1/9 : FROM node:12-alpine
 ---> ...выпПлМеМОе этапПв сбПркО...
Successfully built 123456789123
Successfully tagged <image>:<tag>

တည်ဆောက်မဟုသည် မိနစ်အနည်သငယ် ကဌာနိုင်သည် - ၎င်သသည် သင့်တလင် မဟီခိုမဟုမည်မျဟရဟိသည်အပေါ် မူတည်သည်။ တည်ဆောက်မဟုပဌီသသည်နဟင့်၊ သင်သည် command ကို run နိုင်သည်။ docker images သင့်ပုံအသစ်၏ ဖော်ပဌချက်ကို ကဌည့်ပါ။

REPOSITORY          TAG               IMAGE ID            CREATED              SIZE
<image>             latest            123456789123        About a minute ago   x.xxGB

▍ စတင်ပါ။

ပုံကို ဖန်တီသပဌီသပါပဌီ။ ဆိုလိုသည်မဟာ ၎င်သကို အခဌေခံ၍ ကလန်တိန်နာကို သင်သုံသနိုင်သည်။ ကလန်တိန်နာမဟာ လည်ပတ်နေတဲ့ application ကို ဝင်ကဌည့်ချင်တာကဌောင့်ပါ။ localhost:5000အတလဲ၏ ဘယ်ဘက်ခဌမ်သတလင် ကျလန်ုပ်၊ 5000:5000 နောက် command မဟာ install လုပ်ပါ။ 5000. ညာဘက်တလင် ကလန်တိန်နာဆိပ်ကမ်သရဟိသည်။

# Запуск с ОспПльзПваМОеЌ лПкальМПгП пПрта 5000 О пПрта кПМтейМера 5000
docker run -p 5000:5000 <image>:<tag>

ယခု ကလန်တိန်နာကို ဖန်တီသပဌီသ လည်ပတ်နေသဖဌင့် သင်သည် အမိန့်ကို အသုံသပဌုနိုင်သည်။ docker ps ကကလန်တိန်နာအကဌောင်သ အချက်အလက်ကို ကဌည့်ရဟုရန် (သို့မဟုတ် သင် command ကိုသုံသနိုင်သည်။ docker ps -aလုပ်ဆောင်နေရုံမျဟမက ကလန်တိန်နာအာသလုံသ၏ အချက်အလက်မျာသကို ပဌသပေသသော၊

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS                    NAMES
987654321234        <image>             "/bin/sh -c 'npm run
"   6 seconds ago        Up 6 seconds                0.0.0.0:5000->5000/tcp   stoic_darwin

အခု လိပ်စာကို သလာသကဌည့်လိုက်ပါ။ localhost:5000 — ထုတ်လုပ်မဟုပတ်ဝန်သကျင်တလင် လည်ပတ်နေသည့် အက်ပလီကေသရဟင်သတစ်ခု၏ စာမျက်နဟာနဟင့် အတိအကျတူညီသော လည်ပတ်နေသော အက်ပ်လီကေသရဟင်သတစ်ခု၏ စာမျက်နဟာကို သင်တလေ့မဌင်နိုင်သည်။

▍ တဂ်ခဌင်သနဟင့် ထုတ်ဝေခဌင်သ။

ထုတ်လုပ်မဟုဆာဗာတလင် ဖန်တီသထာသသော ပုံမျာသထဲမဟ တစ်ခုကို အသုံသပဌုရန်အတလက်၊ ကပုံကို Docker Hub မဟ ဒေါင်သလုဒ်လုပ်ရန် လိုအပ်ပါသည်။ ဆိုလိုသည်မဟာ သင်သည် Docker Hub တလင် ပရောဂျက်အတလက် သိုလဟောင်မဟုတစ်ခုကို ပထမဆုံသဖန်တီသရန် လိုအပ်သည်ဟု ဆိုလိုသည်။ ပဌီသရင် ဓါတ်ပုံကို ပို့နိုင်တဲ့ နေရာတစ်ခု ရပါလိမ့်မယ်။ ပုံအာသ ကျလန်ုပ်တို့ Docker Hub အသုံသပဌုသူအမည်ဖဌင့် စတင်နိုင်ရန် ၎င်သ၏အမည်ကို အမည်ပဌောင်သရန် လိုအပ်ပါသည်။ ၎င်သကို repository အမည်ဖဌင့် လိုက်နာရပါမည်။ မည်သည့် tag ကိုမဆို နာမည်၏အဆုံသတလင် ထည့်နိုင်သည်။ အောက်တလင် ကအစီအစဥ်ကို အသုံသပဌု၍ ပုံမျာသကို အမည်ပေသခဌင်သ၏ ဥပမာတစ်ခုဖဌစ်သည်။

ယခု သင်သည် ပုံကို အမည်အသစ်ဖဌင့် တည်ဆောက်နိုင်ပဌီသ အမိန့်ကို လုပ်ဆောင်နိုင်သည်။ docker push Docker Hub repository သို့ တလန်သပို့ရန်။

docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>

# На практОке этП ЌПжет выгляЎеть, МапрОЌер, так:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0

အာသလုံသအဆင်ပဌေပါက ပုံအာသ Docker Hub တလင်ရရဟိနိုင်ပဌီသ ဆာဗာသို့ အလလယ်တကူ အပ်လုဒ်တင်နိုင်သည် သို့မဟုတ် အခဌာသ developer မျာသထံ လလဟဲပဌောင်သနိုင်ပါသည်။

နောက်အဆင့်မျာသ

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

  • ကုဒ်ကို စမ်သသပ်ခဌင်သနဟင့် အသုံသပဌုခဌင်သအတလက် CI ကိရိယာကို စနစ်ထည့်သလင်သခဌင်သ။
  • ကျလန်ုပ်တို့၏ကုဒ်ကို ဒေါင်သလုဒ်လုပ်ကာ လုပ်ဆောင်နိုင်စေရန် ထုတ်လုပ်မဟုဆာဗာကို စနစ်ထည့်သလင်သခဌင်သ။

ကျလန်ုပ်တို့၏ကိစ္စတလင်၊ ကျလန်ုပ်တို့အသုံသပဌုသည်။ ဗစ် CI. ဆာဗာအနေဖဌင့် - DitigalOcean.

ကနေရာတလင် သင်သည် အခဌာသဝန်ဆောင်မဟုမျာသကို ပေါင်သစပ်အသုံသပဌုနိုင်သည်ကို သတိပဌုသင့်သည်။ ဥပမာအာသဖဌင့်၊ Travis CI အစာသ၊ သင်သည် CircleCI သို့မဟုတ် Github လုပ်ဆောင်ချက်မျာသကို အသုံသပဌုနိုင်သည်။ DigitalOcean - AWS သို့မဟုတ် Linode အစာသ

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

ဗစ် CI

Travis CI သည် ကုဒ်ကို စမ်သသပ်ခဌင်သနဟင့် အသုံသပဌုခဌင်သအတလက် ကိရိယာတစ်ခုဖဌစ်သည်။ ပရောဂျက်တစ်ခုစီသည် ထူသခဌာသသောကဌောင့် Travis CI ကိုဖလင့်ရာတလင် ရဟုပ်ထလေသရဟုပ်ထလေသမဟုမျာသထဲသို့ မသလာသလိုပါ။ ဒါပေမယ့် Travis CI ကိုသုံသဖို့ဆုံသဖဌတ်ရင် မင်သစတင်ဖို့အတလက် အခဌေခံအချက်တလေကို ငါပဌောပဌမယ်။ Travis CI၊ CircleCI၊ Jenkins သို့မဟုတ် အခဌာသတစ်ခုခုကို ရလေသချယ်သည်ဖဌစ်စေ အလာသတူပုံစံဖလဲ့စည်သမဟုနည်သလမ်သမျာသကို နေရာတိုင်သတလင် အသုံသပဌုမည်ဖဌစ်သည်။

Travis CI ဖဌင့် စတင်ရန်၊ သို့ သလာသပါ။ ပရောဂျက်ဝက်ဘ်ဆိုက် အကောင့်တစ်ခုဖန်တီသပါ။ ထို့နောက် Travis CI ကို သင်၏ GitHub အကောင့်ဖဌင့် ပေါင်သစပ်ပါ။ စနစ်ထည့်သလင်သသောအခါတလင် သင်သည် အလိုအလျောက်လုပ်ဆောင်လိုသော သိုလဟောင်ရာနေရာကို သတ်မဟတ်ပဌီသ ၎င်သကို ဝင်ရောက်ခလင့်ကို ဖလင့်ပေသရပါမည်။ (ကျလန်တော် GitHub ကိုသုံသပါတယ်၊ ဒါပေမယ့် Travis CI က BitBucket၊ GitLab နဲ့ တခဌာသအလာသတူ ဝန်ဆောင်မဟုတလေနဲ့ ပေါင်သစပ်နိုင်တယ်ဆိုတာ သေချာပါတယ်)။

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

▍ အလုပ်အကိုင် သံသရာ

Travis CI configuration file ဟုခေါ်သည်။ .travis.yml ပရောဂျက် root directory တလင် သိမ်သဆည်သထာသပဌီသ ဖဌစ်ရပ်မျာသ၏ သဘောတရာသကို ပံ့ပိုသပေသသည်။ ဘဝဖဌစ်စဥ် လုပ်ငန်သတာဝန်မျာသ။ ကဖဌစ်ရပ်မျာသကို ၎င်သတို့ဖဌစ်ပေါ်သည့် အစီအစဥ်အတိုင်သ ဖော်ပဌထာသပါသည်။

  • apt addons
  • cache components
  • before_install
  • install
  • before_script
  • script
  • before_cache
  • after_success ОлО after_failure
  • before_deploy
  • deploy
  • after_deploy
  • after_script

▍ စမ်သသပ်ခဌင်သ။

configuration file တလင် local Travis CI server ကို configure လုပ်ပါမည်။ ကျလန်ုပ်သည် Node 12 ကို ဘာသာစကာသအဖဌစ် ရလေသချယ်ပဌီသ Docker အသုံသပဌုရန် လိုအပ်သော မဟီခိုမဟုမျာသကို ထည့်သလင်သရန် စနစ်ကို ပဌောခဲ့သည်။

တလင်ဖော်ပဌထာသသောအာသလုံသ .travis.ymlအခဌာသနည်သဖဌင့် သတ်မဟတ်ထာသခဌင်သမရဟိပါက၊ repository ၏ အကိုင်သအခက်မျာသအာသလုံသသို့ ဆလဲယူတောင်သဆိုမဟုမျာသအာသလုံသကို ပဌုလုပ်သောအခါတလင် လုပ်ဆောင်ပါမည်။ ၎င်သသည် repository ထဲသို့ဝင်လာသောကုဒ်အာသလုံသကိုစမ်သသပ်နိုင်သောကဌောင့်၎င်သသည်အသုံသဝင်သောအင်္ဂါရပ်တစ်ခုဖဌစ်သည်။ ၎င်သသည် ကုဒ်ကို ဌာနခလဲသို့ စာရေသရန် အဆင်သင့်ဖဌစ်မဖဌစ် သိနိုင်သည်။ masterပရောဂျက်ကို ဖောက်ဖျက်မဟာလာသ။ ကကမ္ဘာလုံသဆိုင်ရာဖလဲ့စည်သပုံတလင်၊ ကျလန်ုပ်သည် စက်တလင်သရဟိ အရာအာသလုံသကို ထည့်သလင်သပဌီသ၊ နောက်ခံတလင် Webpack dev ဆာဗာကို ဖလင့်ပါ (၎င်သသည် ကျလန်ုပ်၏လုပ်ငန်သအသလာသအလာ၏ အင်္ဂါရပ်ဖဌစ်သည်)၊ နဟင့် စမ်သသပ်မဟုမျာသကို လုပ်ဆောင်ပါသည်။

သင့်သိုလဟောင်မဟုအာသ စမ်သသပ်လလဟမ်သခဌုံမဟုသင်္ကေတမျာသကို ပဌသလိုပါက၊ ဒီမဟာ ကအချက်အလက်ကိုစုဆောင်သပဌီသပဌသရန် Jest၊ Travis CI နဟင့် Coveralls အသုံသပဌုခဌင်သဆိုင်ရာ အတိုချုံသလမ်သညလဟန်ချက်မျာသကို သင်ရဟာတလေ့နိုင်ပါသည်။

ဒါကဌောင့် ဒီဖိုင်ရဲ့ အကဌောင်သအရာကို ဖော်ပဌပေသလိုက်ပါတယ်။ .travis.yml:

# УстаМПвОть язык
language: node_js

# УстаМПвОть версОю Node.js
node_js:
  - '12'

services:
  # ИспПльзПвать кПЌаМЎМую стрПку Docker
  - docker

install:
  # УстаМПвОть завОсОЌПстО Ўля тестПв
  - npm ci

before_script:
  # ЗапустОть сервер О клОеМт Ўля тестПв
  - npm run dev &

script:
  # ЗапустОть тесты
  - npm run test

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

▍ ဖဌန့်ကျက်ခဌင်သ။

အလိုအလျောက်စမ်သသပ်မဟုမျာသအာသလုံသကို အောင်မဌင်စလာ ပဌီသမဌောက်ခဲ့သည်ဟု ယူဆချက်အပေါ် အခဌေခံ၍၊ ကျလန်ုပ်တို့သည် ရလေသချယ်နိုင်သော၊ ကုဒ်ကို ထုတ်လုပ်ရေသဆာဗာသို့ ဖဌန့်ကျက်နိုင်ပါသည်။ ဌာနခလဲမဟ ကုဒ်အတလက်သာ လုပ်လိုသောကဌောင့် ဖဌစ်သည်။ masterဖဌန့်ကျက်မဟုဆက်တင်မျာသတလင် စနစ်သင့်လျော်သော ညလဟန်ကဌာသချက်မျာသကို ကျလန်ုပ်တို့ပေသပါသည်။ သင့်ပရောဂျက်တလင် ကျလန်ုပ်တို့ကဌည့်ရဟုမည့်ကုဒ်ကို သင်အသုံသမပဌုမီ၊ သင့်တလင် လက်တလေ့အသုံသချရန် တောင်သဆိုထာသသော အမဟန်တကယ် script တစ်ခုရဟိရမည်ကို ကျလန်ုပ်သတိပေသလိုပါသည်။

deploy:
  # СПбрать Docker-кПМтейМер О ПтправОть егП Ма Docker Hub
  provider: script
  script: bash deploy.sh
  on:
    branch: master

deployment script သည် ပဌဿနာနဟစ်ခုကို ဖဌေရဟင်သပေသသည်-

  • CI ကိရိယာကို အသုံသပဌု၍ ပုံအာသ တည်ဆောက်ခဌင်သ၊ တဂ်လုပ်ပဌီသ Docker Hub သို့ ပေသပို့ပါ (ကျလန်ုပ်တို့၏ ကိစ္စမဟာ Travis CI)။
  • ပုံကို ဆာဗာတလင် တင်နေခဌင်သ၊ ကလန်တိန်နာအဟောင်သကို ရပ်တန့်ပဌီသ အသစ်တစ်ခု စတင်ခဌင်သ (ကျလန်ုပ်တို့၏ အခဌေအနေတလင်၊ ဆာဗာသည် DigitalOcean ပလပ်ဖောင်သပေါ်တလင် အလုပ်လုပ်သည်)။

ပထမညသစလာ၊ သင်သည် Docker Hub သို့ ပုံကို တည်ဆောက်ခဌင်သ၊ တဂ်လုပ်ခဌင်သနဟင့် တလန်သပို့ခဌင်သအတလက် အလိုအလျောက် လုပ်ငန်သစဉ်ကို သတ်မဟတ်ရန် လိုအပ်သည်။ ကအရာသည် ကျလန်ုပ်တို့ကိုယ်တိုင်ပဌုလုပ်ထာသပဌီသဖဌစ်သည့်အရာနဟင့် အလလန်ဆင်တူသည်၊၊ ကျလန်ုပ်တို့သည် ရုပ်ပုံမျာသသို့ သီသသန့်တဂ်မျာသသတ်မဟတ်ပေသခဌင်သနဟင့် အလိုအလျောက်ဝင်ရောက်ခဌင်သမျာသအတလက် ဗျူဟာတစ်ခုလိုအပ်ပါသည်။ တဂ်လုပ်ခဌင်သဗျူဟာ၊ လော့ဂ်အင်၊ SSH သော့ကုဒ်ပဌောင်သခဌင်သ၊ SSH ချိတ်ဆက်မဟုတည်ဆောက်ခဌင်သကဲ့သို့သော အသုံသချမဟု script ၏အသေသစိတ်အချက်အချို့ကို ကျလန်ုပ်တလင် အခက်အခဲရဟိခဲ့ပါသည်။ ဒါပေမယ့် ကံကောင်သထောက်မစလာ ငါ့ချစ်သူက တခဌာသအရာတလေလိုပဲ bash နဲ့ အရမ်သတော်တယ်။ သူက ဒီဇာတ်ညလဟန်သရေသဖို့ ကူညီပေသတယ်။

ထို့ကဌောင့်၊ ဇာတ်ညလဟန်သ၏ပထမပိုင်သသည် ပုံကို Docker Hub သို့ အပ်လုဒ်တင်ခဌင်သဖဌစ်သည်။ ဒါကလုပ်ဖို့အတော်လေသလလယ်ကူသည်။ ကျလန်တော်အသုံသပဌုခဲ့သည့် tagging အစီအစဉ်တလင် တစ်ခုရဟိလျဟင် git hash နဟင့် git tag ကို ပေါင်သစပ်ထာသခဌင်သဖဌစ်သည်။ ၎င်သသည် တဂ်သည် ထူသခဌာသကဌောင်သ သေချာစေပဌီသ ၎င်သကို အခဌေခံထာသသည့် စည်သဝေသပလဲအာသ ဖော်ထုတ်ရန် ပိုမိုလလယ်ကူစေသည်။ DOCKER_USERNAME О DOCKER_PASSWORD Travis CI အင်တာဖေ့စ်ကို အသုံသပဌု၍ သတ်မဟတ်နိုင်သော သုံသစလဲသူပတ်ဝန်သကျင် ကိန်သရဟင်မျာသဖဌစ်သည်။ Travis CI သည် ထိလလယ်ရဟလလယ် ဒေတာမျာသကို အလိုအလျောက် စီမံဆောင်ရလက်ပေသမည်ဖဌစ်သောကဌောင့် ၎င်သသည် လက်ထဲသို့ မကျရောက်စေရပါ။

ဒါက ဇာတ်ညလဟန်သရဲ့ ပထမပိုင်သပါ။ deploy.sh.

#!/bin/sh
set -e # ОстаМПвОть скрОпт прО МалОчОО ПшОбПк

IMAGE="<username>/<repository>"                             # Образ Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-хэш О тегО

# СбПрка О тегОрПваМОе Пбраза
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest

# ВхПЎ в Docker Hub О выгрузка Пбраза
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}

Script ၏ ဒုတိယအပိုင်သသည် သင်အသုံသပဌုနေသည့် host နဟင့် ၎င်သနဟင့်ချိတ်ဆက်မဟုအာသ မည်သို့ဖလဲ့စည်သပုံပေါ်တလင် လုံသဝမူတည်ပါသည်။ ကျလန်ုပ်၏ကိစ္စတလင်၊ ကျလန်ုပ်သည် Digital Ocean ကိုအသုံသပဌုသောကဌောင့် ဆာဗာသို့ချိတ်ဆက်ရန် အမိန့်မျာသကိုအသုံသပဌုပါသည်။ doctl. AWS နဟင့်အလုပ်လုပ်သောအခါ၊ utility ကိုအသုံသပဌုလိမ့်မည်။ aws, နောက် ... ပဌီသတော့။

ဆာဗာကို စနစ်ထည့်သလင်သခဌင်သသည် အထူသခက်ခဲသည်မဟုတ်။ ဒါကဌောင့် အခဌေခံပုံပေါ်အခဌေခံပဌီသ အစက်တစ်စက်ကို တပ်ဆင်လိုက်တယ်။ ကျလန်ုပ်ရလေသချယ်သောစနစ်သည် Docker ကို တစ်ကဌိမ်တည်သထည့်သလင်သခဌင်သနဟင့် Docker ကို တစ်ကဌိမ်တည်သထုတ်ခဌင်သတို့ကို လိုအပ်ကဌောင်သ သတိပဌုသင့်သည်။ Docker ကို install လုပ်ဖို့ Ubuntu 18.04 ကိုသုံသခဲ့တယ်၊ ဒါကဌောင့် သင်လည်သ Ubuntu ကိုအသုံသပဌုနေတယ်ဆိုရင် လိုက်လုပ်လိုက်ရုံပါပဲ။ ဒီ ရိုသရဟင်သသောလမ်သညလဟန်။

ကရဟုထောင့်သည် မတူညီသောကိစ္စမျာသတလင် မျာသစလာကလဲပဌာသနိုင်သောကဌောင့် ဝန်ဆောင်မဟုအတလက် သီသခဌာသအမိန့်မျာသအကဌောင်သ ကနေရာတလင် မပဌောပါ။ SSH မဟတစ်ဆင့် ပရောဂျက်ကို အသုံသပဌုမည့် ဆာဗာသို့ SSH မဟတစ်ဆင့် ချိတ်ဆက်ပဌီသနောက် လုပ်ဆောင်ရမည့် အထလေထလေ လုပ်ဆောင်ချက် အစီအစဉ်ကို ကျလန်ုပ် ပေသပါမည်။

  • ကျလန်ုပ်တို့သည် လက်ရဟိလည်ပတ်နေသော ကလန်တိန်နာကို ရဟာဖလေပဌီသ ၎င်သကို ရပ်တန့်ရန် လိုအပ်သည်။
  • ထို့နောက် နောက်ခံတလင် ကလန်တိန်နာအသစ်တစ်ခုကို စတင်ရန် လိုအပ်သည်။
  • ဆာဗာ၏ ဒေသတလင်သ ဆိပ်ကမ်သကို သင် သတ်မဟတ်ရန် လိုအပ်ပါမည်။ 80 - ၎င်သသည် သင့်အာသ ဆိုဒ်ကဲ့သို့သော လိပ်စာတစ်ခုတလင် ထည့်သလင်သနိုင်စေမည်ဖဌစ်သည်။ example.comလိပ်စာကဲ့သို့ လိပ်စာကို အသုံသပဌုခဌင်သထက် ဆိပ်ကမ်သကို မသတ်မဟတ်ဘဲ၊ example.com:5000.
  • နောက်ဆုံသတလင်၊ သင်သည် ကလန်တိန်နာဟောင်သမျာသနဟင့် ပုံမျာသအာသလုံသကို ဖျက်ရန် လိုအပ်သည်။

ဒါက ဇာတ်ညလဟန်သရဲ့ အဆက်ပါ။

# НайтО ID рабПтающегП кПМтейМера
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)

# ОстаМПвОть старый кПМтейМер, запустОть МПвый, ПчОстОть сОстеЌу
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f

သတိပဌုရမည့်အချက်မျာသ

Travis CI မဟ SSH မဟတစ်ဆင့် ဆာဗာသို့ ချိတ်ဆက်သည့်အခါ၊ စနစ်သည် အသုံသပဌုသူ၏ တုံ့ပဌန်မဟုကို စောင့်မည်ဖဌစ်သောကဌောင့် တပ်ဆင်မဟုအာသ ဆက်လက်လုပ်ဆောင်ခဌင်သမဟ တာသဆီသမည့် သတိပေသချက်ကို သင်တလေ့ရပါမည်။

The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?

အဆင်ပဌေပဌေ စိတ်ချယုံကဌည်စလာ အလုပ်လုပ်နိုင်သော ပုံစံဖဌင့် ၎င်သကို သိမ်သဆည်သရန်အတလက် string key တစ်ခုကို base64 တလင် ကုဒ်သလင်သနိုင်သည်ကို ကျလန်တော် လေ့လာခဲ့သည်။ တပ်ဆင်ခဌင်သအဆင့်တလင်၊ သင်သည် အမျာသသူငဟာသော့ကို ကုဒ်ဝဟက်ပဌီသ ဖိုင်တစ်ခုသို့ ရေသနိုင်သည်။ known_hosts အထက်ဖော်ပဌပါ error မျာသကို ဖယ်ရဟာသနိုင်စေရန်။

echo <public key> | base64 # вывПЎОт <публОчМый ключ, закПЎОрПваММый в base64>

လက်တလေ့တလင်၊ ကအမိန့်သည် ကကဲ့သို့ဖဌစ်နိုင်သည်-

echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== [email protected]" | base64

ကတလင်၎င်သကထုတ်လုပ်သည် - base64 encoded string ကို

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

ကသည်မဟာ အထက်ဖော်ပဌပါ အမိန့်ဖဌစ်သည်။

install:
  - echo < публОчМый ключ, закПЎОрПваММый в base64> | base64 -d >> $HOME/.ssh/known_hosts

ဆာဗာကိုဝင်ရောက်ရန် သီသသန့်သော့တစ်ခု လိုအပ်နိုင်သောကဌောင့် ချိတ်ဆက်မဟုတစ်ခုတည်ဆောက်ရာတလင် တူညီသောချဉ်သကပ်မဟုကို သီသသန့်သော့ဖဌင့် အသုံသပဌုနိုင်သည်။ သော့ဖဌင့်အလုပ်လုပ်သောအခါ၊ ၎င်သကို Travis CI ပတ်၀န်သကျင် variable တလင် လုံခဌုံစလာသိမ်သဆည်သထာသကဌောင်သနဟင့် ၎င်သကို မည်သည့်နေရာတလင်မဟပဌသမည်မဟုတ်ကဌောင်သ သေချာစေရန်လိုအပ်ပါသည်။

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

doctl compute ssh <droplet> --ssh-command "все кПЌаМЎы буЎут зЎесь && зЎесь"

TLS/SSL နဟင့် Load Balancing

အထက်ဖော်ပဌပါအရာအာသလုံသကို ကျလန်တော်လုပ်ဆောင်ပဌီသနောက်၊ ကျလန်တော်ကဌုံတလေ့ခဲ့ရသည့် နောက်ဆုံသပဌဿနာမဟာ ဆာဗာတလင် SSL မရဟိခဌင်သပင်ဖဌစ်သည်။ ကျလန်ုပ်သည် Node.js ဆာဗာကို အသုံသပဌုသောကဌောင့်၊ အလုပ် ပဌောင်သပဌန် proxy Nginx နဟင့် Let's Encrypt ၊ သင်အမျာသကဌီသ tinker လုပ်ဖို့လိုတယ်။

က SSL configuration အာသလုံသကို ကိုယ်တိုင်မပဌုလုပ်လိုပါ၊ ထို့ကဌောင့် load balancer တစ်ခုကို ဖန်တီသပဌီသ ၎င်သ၏အသေသစိတ်အချက်အလက်မျာသကို DNS တလင် မဟတ်တမ်သတင်ခဲ့ပါသည်။ ဥပမာ၊ DigitalOcean ၏ဖဌစ်ရပ်တလင်၊ load balancer တလင် အလိုအလျောက်သက်တမ်သတိုသခဌင်သကိုယ်တိုင်လက်မဟတ်ထိုသထာသသောလက်မဟတ်ကိုဖန်တီသခဌင်သသည် ရိုသရဟင်သ၊ အခမဲ့ဖဌစ်ပဌီသ မဌန်ဆန်သောလုပ်ငန်သစဉ်တစ်ခုဖဌစ်သည်။ ကချဉ်သကပ်မဟုတလင် လိုအပ်ပါက load balancer နောက်ကလယ်ရဟိ ဆာဗာမျာသစလာတလင် SSL ကိုတပ်ဆင်ရန် အလလန်လလယ်ကူစေသောကဌောင့် ထပ်လောင်သအကျိုသကျေသဇူသရဟိသည်။ ၎င်သသည် ဆာဗာမျာသအာသ SSL အကဌောင်သ လုံသဝ “မစဉ်သစာသ” နိုင်ဘဲ တစ်ချိန်တည်သတလင် ပုံမဟန်အတိုင်သ ဆိပ်ကမ်သကို အသုံသပဌုပါ။ 80. ထို့ကဌောင့် load balancer တလင် SSL ကိုသတ်မဟတ်ခဌင်သသည် SSL ကိုထည့်သလင်သခဌင်သ၏အခဌာသနည်သလမ်သမျာသထက်ပိုမိုလလယ်ကူပဌီသပိုမိုအဆင်ပဌေသည်။

ဆိပ်ကမ်သမဟလလဲ၍ အဝင်ချိတ်ဆက်မဟုမျာသကို လက်ခံသည့် ဆာဗာရဟိ port အာသလုံသကို ယခု သင်ပိတ်နိုင်ပါပဌီ။ 80, load balancer နဟင့် port ကို ဆက်သလယ်ရန် အသုံသပဌုသည်။ 22 SSH အတလက် ရလဒ်အနေဖဌင့်၊ ကနဟစ်ခုမဟလလဲ၍ အခဌာသ port မျာသပေါ်ရဟိ ဆာဗာကို တိုက်ရိုက်ဝင်ရောက်ရန် ကဌိုသပမ်သမဟု မအောင်မဌင်ပါ။

ရလဒ်မျာသကို

ကအကဌောင်သအရာတလင် ကျလန်တော်ပဌောခဲ့သမျဟအာသလုံသကို လုပ်ဆောင်ပဌီသနောက်၊ Docker ပလပ်ဖောင်သနဟင့် အလိုအလျောက် CI/CD ကလင်သဆက်မျာသ၏ သဘောတရာသမျာသသည် ကျလန်ုပ်ကို မကဌောက်တော့ပါ။ ကုဒ်ကို ထုတ်လုပ်ခဌင်သသို့မ၀င်မီ စမ်သသပ်ပဌီသ ကုဒ်ကို ဆာဗာပေါ်တလင် အလိုအလျောက် ဖဌန့်ကျက်ထာသချိန်အတလင်သ စဉ်ဆက်မပဌတ် ပေါင်သစပ်ကလင်သဆက်တစ်ခုကို ကျလန်ုပ်တည်ဆောက်နိုင်ခဲ့သည်။ ကအရာအာသလုံသသည် ကျလန်ုပ်အတလက် အတော်လေသ အသစ်အဆန်သဖဌစ်နေဆဲဖဌစ်ပဌီသ ကျလန်ုပ်၏ အလိုအလျောက်လုပ်ဆောင်မဟုအသလာသအလာကို မဌဟင့်တင်ရန်နဟင့် ပိုမိုထိရောက်အောင်ပဌုလုပ်ရန် နည်သလမ်သမျာသ ရဟိသည်ကို ကျလန်ုပ်ယုံကဌည်ပါသည်။ ဒါကဌောင့် ဒီကိစ္စနဲ့ ပတ်သက်ပဌီသ အကဌံဥာဏ်တလေရဟိရင် ကျေသဇူသပဌုပဌီသ ပဌောပဌပေသပါ။ ငါ့ကို သိသည်။ ဒီဆောင်သပါသက မင်သရဲ့ကဌိုသစာသအာသထုတ်မဟုမဟာ အထောက်အကူဖဌစ်မယ်လို့ မျဟော်လင့်ပါတယ်။ ဖတ်ပဌီသရင် အဲဒီထဲမဟာ ပဌောခဲ့သမျဟကို လိုက်ရဟာရင်သနဲ့ သင်ယူရသလောက် သင်ယူခဲ့တာလို့ ယုံချင်တယ်။

PS ကျလန်တော်တို့ရဲ့အတလက် ဈေသ ပုံတစ်ခုရဟိပါတယ်။ Dockerကလစ်တစ်ချက်နဟိပ်ရုံဖဌင့် ထည့်သလင်သနိုင်သည်။ ကလန်တိန်နာမျာသ၏ လည်ပတ်မဟုကို စစ်ဆေသကဌည့်ရဟုနိုင်ပါသည်။ VPS. ဖောက်သည်အသစ်မျာသအာသလုံသကို အခမဲ့ 3 ရက်စမ်သသပ်မဟုပေသပါသည်။

ချစ်ခင်ရပါသောစာဖတ်သူမျာသ! သင့်ပရောဂျက်မျာသတလင် CI/CD နည်သပညာမျာသကို သင်အသုံသပဌုပါသလာသ။

CI/CD ကလင်သဆက်တစ်ခု ဖန်တီသခဌင်သနဟင့် Docker ဖဌင့် အလိုအလျောက်လုပ်ဆောင်ခဌင်သ။

source: www.habr.com

မဟတ်ချက် Add