ကျွန်တော် ဒီနေ့ share ပေးချင်တာကတော့ github runner တွေအတွက် solution ချပုံလေးပါ။ လူတစ်ဦးနှင့်တစ်ဦး စဉ်းစားနည်းမတူညီနိုင်တာမလို့ ကျွန်တော့် solution က အသုံးမဝင်ဖူးဆို ကျော်သွားလို့ရပါတယ်ခင်ဗျာ။ ပထမဆုံး ကျွန်တော် ကြုံတွေ့ခဲ့ရတဲ့ အဖြစ်ပျက်ကိုပြောပြပါမယ်။ မပြောခင်မှာ github action ဆိုတာအနည်းငယ် ပြန်ရှင်းချင်ပါတယ်။ ကျွန်တော်တို့တွေရဲ့ application deployment တွေကို အချိန်ကုန်သက်သာပြီး work done ဖြစ်စေဖို့ CICD pipeline တွေကိုသုံးကြရပါတယ်။
အဲ့ pipeline တွေထဲမှာပဲ ကိုယ်သုံးတဲ့ platform အလိုက် workflow တွေကို ရေးသားကြရပါတယ်။ အလွယ်ဆုံးပြောရရင်တော့ workflow တွေဟာ script တစ်ခုလိုပါပဲ။ script ကို run ဖို့အတွက် machine တစ်ခုလိုပါတယ်။ အဲ့လိုပါပဲ github action workflow တွေကို run ဖို့လည်း runner လို့ခေါ်တဲ့ ကောင်လေးတွေ လိုအပ်ပါတယ်။
github မှာ personal account or organization ဆိုပြီးရှိပါတယ်။ personal ကတော့ လူတစ်ယောက်ချင်းစီအတွက် သီးသန့်သုံးရတာပါ။ အဖွဲ့စည်းနဲ့ သုံးဖို့ဆိုရင် github organization နဲ့ သုံးမှ အဆင်ပြေနိုင်ပါမယ်။ plan မှာ free, team , enterprise ဆိုပြီး ရှိတဲ့ အနက် ကျွန်တော်က free ကိုသုံးနေတာပါ။ free မှာ CICD minutes 2000 ပါပြီး storage 500 MB ရပါတယ်။
ကျွန်တော့်ရဲ့ပြသနာ
ပြသနာက ကျွန်တော်ရဲ့ billing email ထဲကို ဟိုနေ့က mail ရောက်လာပါတယ်။ စစ်ကြည့်လိုက်တော့ ကျွန်တော်လည်း ပထမဆုံးလဆိုတော့ သတိမထားလိုက်ပါဖူး။ free ရတဲ့ ပမာဏထက် ပိုသုံးမိလိုက်တဲ့ amount ကိုပြထားတာပေါ့။ ကံကောင်းတာက bill ကအရမ်းမများသေးဖူး။ ၂၀$ ဝန်းကျင်လောက်ပဲဆိုတော့တော်ပါသေးတယ်။
ဒါဆို ကျွန်တော် ဒီပြသနာကိုရှင်းဖို့ အဖြေစရှာပါပြီ။ bill မဆောင်ရင် ဘာဖြစ်မှာလဲဆိုတာကအရင်စပါမယ်။ ဘေမဆောင်ဖူးဆိုရင် bill မပေးမချင်း github hosted runner ကိုကျွန်တော်ပြန်သုံးလို့ရမှာမဟုတ်ပါဖူး။ သုံးလို့မရဖူးဆိုတော့ self hosted ကိုကျွန်တော်သုံးရပါတော့မယ်။
self-hosted runner ဆိုတာ
runner တွေမှာ self-hosted ရယ် github hosted ရယ်ရှိကြပြီး self-hosted ဆိုတော့ ကျွန်တော်တို့ ကိုယ်တိုင် လုပ်ပေးရမယ့် runner မျိုးပေါ့။ အလွယ်ပြောရရင် virtual machine တွေပေါ်မှာဖြစ်စေ kubernetes cluster တွေပေါ်မှာဖြစ်စေ လိုအပ်တဲ့ configuration တွေချပြီး action တွေကို run ပေးရမှာပါ။ setup လုပ်နည်းတွေက နေရာတကာမှာ ရှိနေတာမလို့ ဒါတွေကိုမပြောတော့ပါဖူး။ ကျွန်တော့်ရဲ့ အတွေ့ကြုံလေးကို ပြောပြပေးခြင်းသာဖြစ်ပါတယ်။
self-hosted ရဲ့ပြသနာ
github runner တစ်ခုဟာ တစ်ချိန်တည်းမှာ ပြိုင်တူ job 2ခု ကို runလို့မရပါဖူး။ ပြောချင်တာက action file တစ်ခုထဲမှာ job ၂ခု ၃ခု ရှိနေပြီဆိုရင်တောင် self hosted runner တစ်ခုပဲရှိလျှင် တစ်ခုပြီးတဲ့အထိစောင့်ပြီးမှ ကျန်တဲ့ job တွေ ဆက်လုပ်နိုင်မှာပါ။ ဒီနေရာမှာ auto scale ကိစ္စထည့်ပြောရပါလိမ့်မယ်။ ကျွန်တော်ကတော့ kubernetes ပေါ်မှာgithub runner auto scale လုပ်ဖို့ ချက်ချင်းလုပ်ပေးခဲ့ပါတယ်။ self hosted တွေဟာထင်သလောက် မရိုးရှင်းပါဖူး error ရှင်းရတာတွေ package ထည့်ပေးရတာတွေ နဲ့ တော်တော်တိုင်ပတ်ပါတယ်။
ဆက်ပြီးဆွေးနွေးပါမယ်။ ဥပမာ runner က k8s ပေါ်မှာဆို pod တွေ အနေနဲ့ autoscale လုပ်ပြီး run ပေးမှာပါ။ pod တွေမှာ docker daemon run လို့မရပါဖူး အဲ့တော့ workflow မှာ docker build or push လိုအပ်လာပြီဆို DinD လိုမျိုး ဒါမှမဟုတ် တစ်ခြား buildkit or Kaniko တို့လိုဟာတွေနဲ့ ပြောင်းလုပ်ပေးရပါတယ်။ပြသနာကတော့ ဒီလောက်ပါပဲ ကိုယ်တိုင် စမ်းကြည့်တဲ့အခါ သိလာပါလိမ့်မယ်
final solution ဘယ်လိုချခဲ့လဲ
self-hosted ကြီးပဲသုံးမယ်ဆို error မထင်မှတ်ထားပဲထဖြစ်ရင် ရှင်းဖို့အချိန်တစ်ခုယူရပါတယ်။ production မှာဆို တိုင်ပတ်ပြီ။ ဒါကြောင့် github ကပေးတဲ့ free minutes ကိုလည်း အကျိုးရှိရှိသုံးမယ် pipeline ကိုလည်း limit ကျော်ရင် ဆက်အလုပ်လုပ်စေချင်တယ် bill လည်းမဖြတ်စေချင်ဖူးဆို အောက်ကအတိုင်းကျွန်တော်စဉ်းစားလိုက်ပါတယ်
- code changes နည်းတဲ့ production အတွက် pipeline တွေကို github hosted runners နဲ့ run မယ်
- billing alert မှာ budget amount limit ကို zero ထားမယ် ဒါဆို free minutes ကျော်ရင် github hosted runner ကိုသုံးထားတဲ့ pipeline တွေ ရပ်သွားမယ် production အတွက်ပဲဆို free minutes ကအေးဆေးလုံလောက်ပါတယ်
- Dev, UAT environment လို ကောင်တွေကိုတော့ self hosted နဲ့ github hosted မျှသုံးမယ်။ လက်ရှိမှာ ကိုင်နေရတဲ့ project တွေကို self hosted ထားပြီး တစ်ခါတစ်လေမှ လိုအပ်တဲ့ project တွေရဲ့ dev , uat environment တွေကို github hosted သုံးပေးလိုက်ပါမယ်
ဒီ solution ဟာ ကျွန်တော့်ရဲ့ လက်ရှိ organization အတွက် ထိန်းထားနိုင်သေးတဲ့အတွက်ကြောင့် အဆင်ပြေပါတယ်။ project တွေအရမ်းများလာလို့ မပြေတော့ဖူး ဆိုရင်တော့ plan တိုးသင့်ရင်တိုးရမှာပါ။ အဆုံးထိ ဖတ်ပေးကြလို့ ကျေးဇူးတင်ပါတယ်။ အဆင်ပြေကြပါစေခင်ဗျာ
Discussion
Join the conversation
How do you feel about this article?
Comments
Sign in to join the conversation
Sign in to be the first to comment!
Share Your Article
Share with your professional network
Recent Articles

AWS - Application Load Balancer
Elastic Load Balancing (ELB) ELB ဆိုတာကတော့ request တွေကို တစ်နေရာတည်းမှ လက်ခံကာ Amazon EC2 instances၊ containers, etc.....

Terraform Day 3: Benefits of Terraform State
Terraform ကိုလေ့လာ တဲ့အခါ ကျွန််တော်တို့ရဲ့ Project Folder ထဲမှာ terraform.tfstate ဆိုတဲ့ ဖိုင်လေးကို တွေ့ဖူးကြပါလိမ့်မယ...

Terraform Day 2: Essential IaC Principles You Must Know
မနေ့ကတော့ Terraform အကြောင်း အကြမ်းဖျင်း Concept ကို ပြောပြခဲ့ပြီးပြီဆိုတော့ ဒီနေ့မှာတော့ Terraform ကို Professional ကျက...

TCP/IP Protocol
အားလုံးပဲမင်္ဂလာပါ။ ဒီနေ့ ကျွန်တော်တို့ TCP/IP Protocol အကြောင်း ဆွေးနွေးသွားပါမယ်။ ပထမဆုံးအနေနဲ့ TCP/IP ရဲ့ History လေး...

Terraform Day 1: Introduction to IAC and Terraform
ကျွန်တော်တို့ cloud အကြောင်း စပြောကြပြီဆိုရင် အရင်ဆုံး ခေါင်းထဲရောက်လာတာ Console ထဲဝင်၊ UI ကနေ ခလုတ်လေးတွေ လိုက်နှိပ်ပြီ...

