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

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

မင်္ဂလာပါ! မကဌာသေသမီက၊ Docker ပုံမျာသတည်ဆောက်ခဌင်သနဟင့် Kubernetes တလင် ဖဌန့်ကျက်ခဌင်သအတလက် အလန်သစာသ အော်တိုမက်ထစ်ကိရိယာမျာသစလာကို ဖဌန့်ချိခဲ့သည်။ ကကိစ္စနဟင့် ပတ်သက်၍ ကျလန်ုပ်သည် GitLab ဖဌင့် ကစာသရန် ဆုံသဖဌတ်ခဲ့ပဌီသ ၎င်သ၏ စလမ်သဆောင်ရည်မျာသကို သေချာလေ့လာပဌီသ ပိုက်လိုင်သကို ထူထောင်ရန် ဆုံသဖဌတ်ခဲ့သည်။

ကလုပ်ငန်သကို ဝဘ်ဆိုဒ်မဟ လဟုံ့ဆော်ပေသခဲ့သည်။ kubernetes.ioမဟထုတ်ပေသသော အရင်သအမဌစ်ကုဒ်မျာသ အလိုအလျောက် ပေသပို့ပဌီသ စုပေါင်သတောင်သဆိုမဟုတစ်ခုစီအတလက်၊ စက်ရုပ်သည် သင့်ပဌောင်သလဲမဟုမျာသနဟင့်အတူ ဝဘ်ဆိုက်၏ အကဌိုကဌည့်ရဟုမဟုဗာသရဟင်သကို အလိုအလျောက်ထုတ်ပေသပဌီသ ကဌည့်ရဟုရန်အတလက် လင့်ခ်တစ်ခုကို ပံ့ပိုသပေသပါသည်။

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

ဆောင်သပါသတလင် ကကဲ့သို့သော ကိရိယာမျာသကို ဆလေသနလေသပါမည်။
ဟူဂို, qbec, ကာနီကို, git-crypt О GitLab CI တက်ကဌလသောပတ်ဝန်သကျင်မျာသဖန်တီသမဟုနဟင့်အတူ။

အကဌောင်သအရာ

  1. Hugo နဟင့်တလေ့ဆုံပါ။
  2. Dockerfile ကိုပဌင်ဆင်ခဌင်သ။
  3. ကာနီကိုအကဌောင်သ သိလာရတယ်။
  4. qbec အကဌောင်သသိလာခဌင်သ။
  5. Kubernetes-executor ဖဌင့် Gitlab-runner ကိုကဌိုသစာသနေပါသည်။
  6. qbec ဖဌင့် Helm ဇယာသမျာသကို ဖဌန့်ကျက်ခဌင်သ။
  7. git-crypt ကို မိတ်ဆက်ခဌင်သ။
  8. ကိရိယာပုံသပုံ ဖန်တီသခဌင်သ။
  9. ကျလန်ုပ်တို့၏ ပထမဆုံသ ပိုက်လိုင်သနဟင့် တဂ်မျာသဖဌင့် ပုံမျာသ စုစည်သမဟု
  10. ဖဌန့်ကျက် အလိုအလျောက်စနစ်
  11. အရေသပေသ တလန်သအာသပေသ လုပ်တဲ့ ပရိသတ်
  12. တက်ကဌလသောပတ်ဝန်သကျင်မျာသ
  13. အက်ပ်မျာသကို ပဌန်လည်သုံသသပ်ပါ။

1. Hugo ကို သိလာခဌင်သ

ကျလန်ုပ်တို့၏ပရောဂျက်၏ဥပမာတစ်ခုအနေဖဌင့်၊ Hugo တလင်တည်ဆောက်ထာသသောစာရလက်စာတမ်သထုတ်ဝေခဌင်သဆိုက်ကိုဖန်တီသရန်ကဌိုသစာသပါမည်။ Hugo သည် static content generator တစ်ခုဖဌစ်သည်။

static generator နဲ့ မရင်သနဟီသတဲ့သူတလေအတလက်၊ အဲဒါတလေအကဌောင်သ နည်သနည်သပဌောပဌမယ်။ သမာသရိုသကျ ဒေတာဘေ့စ်တစ်ခုနဟင့် အချို့သော PHP ပါသည့် သမာသရိုသကျ ဝဘ်ဆိုဒ်အင်ဂျင်မျာသနဟင့် မတူဘဲ၊ အသုံသပဌုသူတစ်ညသမဟ တောင်သဆိုသောအခါတလင် စာမျက်နဟာမျာသ ပျံဝဲကာ ထုတ်ပေသသည့် static ဂျင်နရေတာမျာသသည် အနည်သငယ်ကလဲပဌာသစလာ ဒီဇိုင်သထုတ်ထာသသည်။ ၎င်သတို့သည် သင့်အာသ Markdown markup နဟင့် theme templates တလင် ဖိုင်အစုံအလင်ဖဌင့် အရင်သအမဌစ်မျာသကို ယူခလင့်ပဌုပဌီသနောက် ၎င်သတို့ကို ပဌီသပဌည့်စုံသော ဝဘ်ဆိုက်တစ်ခုအဖဌစ် စုစည်သနိုင်သည်။

ထို့ကဌောင့်၊ သင်သည် လမ်သညလဟန်ဖလဲ့စည်သပုံနဟင့် ထုတ်လုပ်ထာသသော HTML ဖိုင်မျာသ အစုအဝေသကို လက်ခံရရဟိမည်ဖဌစ်ပဌီသ၊ သင်သည် ဈေသပေါသော hosting တစ်ခုခုသို့ ရိုသရဟင်သစလာ အပ်လုဒ်လုပ်ကာ အလုပ်လုပ်ကိုင်သော ဝဘ်ဆိုက်တစ်ခုကို ရရဟိမည်ဖဌစ်သည်။

Hugo ကို စက်တလင်သတလင် ထည့်သလင်သနိုင်ပဌီသ စမ်သသုံသကဌည့်နိုင်သည်-

ဆိုက်အသစ်တစ်ခုကို စတင်နေသည်-

hugo new site docs.example.org

တစ်ချိန်တည်သမဟာပင် git repository သည်-

cd docs.example.org
git init

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

ဆောင်ပုဒ်အတလက် ကျလန်ုပ်တို့ အသုံသပဌုပါမည်။ သင်ကဌာသကျလန်ုပ်၏အမဌင်အရ၊ စာတမ်သပဌုစုသည့်ဆိုဒ်အတလက် လုံသဝသင့်လျော်ပါသည်။

ကျလန်ုပ်တို့၏ပရောဂျက်သိုလဟောင်ခန်သတလင် ဆောင်ပုဒ်ဖိုင်မျာသကို သိမ်သဆည်သရန်မလိုအပ်ကဌောင်သကို အထူသဂရုပဌုလိုပါသည်၊ ၎င်သအစာသ ၎င်သကို ရိုသရိုသရဟင်သရဟင်သဖဌင့် ချိတ်ဆက်နိုင်သည် git submodule:

git submodule add https://github.com/matcornic/hugo-theme-learn themes/learn

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

config ကိုပဌင်ကဌရအောင် config.toml:

baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"

ကအဆင့်တလင် သင်လုပ်ဆောင်နိုင်သည်-

hugo server

လိပ်စာမဟာ http://localhost:1313/ ကျလန်ုပ်တို့၏အသစ်ဖန်တီသထာသသောဝဘ်ဆိုဒ်ကိုစစ်ဆေသပါ၊ လမ်သညလဟန်တလင်ပဌုလုပ်ထာသသောပဌောင်သလဲမဟုမျာသအာသလုံသ browser ရဟိဖလင့်ထာသသောစာမျက်နဟာကိုအလိုအလျောက် update လုပ်ပါ၊ အလလန်အဆင်ပဌေပါသည်။

မျက်နဟာဖုံသစာမျက်နဟာကို ဖန်တီသကဌည့်ရအောင် အကဌောင်သအရာ/_index.md:

# My docs site

## Welcome to the docs!

You will be very smart :-)

အသစ်ဖန်တီသထာသသော စာမျက်နဟာ၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

ဆိုက်တစ်ခုဖန်တီသရန်၊ ပဌေသလိုက်ရုံဖဌင့်-

hugo

လမ်သညလဟန်အကဌောင်သအရာမျာသ အမျာသသူငဟာ/ သင်၏ website ဖဌစ်လိမ့်မည်။
ဟုတ်တယ်၊ စကာသမစပ်၊ အဲဒါကို ချက်ချင်သထည့်လိုက်ရအောင် .gitignore:

echo /public > .gitignore

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

git add .
git commit -m "New site created"

2. Dockerfile ကိုပဌင်ဆင်ခဌင်သ။

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

.
├── deploy
│   ├── app1
│   └── app2
└── dockerfiles
    ├── image1
    └── image2

  • dockerfiles/ — Dockerfiles ပါရဟိသော လမ်သညလဟန်မျာသနဟင့် ကျလန်ုပ်တို့၏ Docker ပုံမျာသကို တည်ဆောက်ရန်အတလက် လိုအပ်သော အရာအာသလုံသ ပါဝင်ပါသည်။
  • ဖဌန့်ကျက်/ — ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သမျာသကို Kubernetes သို့ အသုံသချရန်အတလက် လမ်သညလဟန်မျာသ ပါရဟိသည်။

ထို့ကဌောင့် ကျလန်ုပ်တို့သည် လမ်သကဌောင်သတစ်လျဟောက်တလင် ကျလန်ုပ်တို့၏ ပထမဆုံသ Dockerfile ကို ဖန်တီသပါမည်။ dockerfiles/website/Dockerfile

FROM alpine:3.11 as builder
ARG HUGO_VERSION=0.62.0
RUN wget -O- https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz -C /usr/local/bin
ADD . /src
RUN hugo -s /src

FROM alpine:3.11
RUN apk add --no-cache darkhttpd
COPY --from=builder /src/public /var/www
ENTRYPOINT [ "/usr/bin/darkhttpd" ]
CMD [ "/var/www" ]

သင်တလေ့မဌင်ရသည့်အတိုင်သ Dockerfile တလင် နဟစ်ခုပါရဟိသည်။ FROM မဟကအခလင့်အရေသဟုခေါ်သည်။ multi-stage တည်ဆောက်မဟု နဟင့် နောက်ဆုံသ docker ပုံမဟ မလိုအပ်သောအရာအာသလုံသကို ဖယ်ထုတ်နိုင်စေပါသည်။
ထို့ကဌောင့် နောက်ဆုံသပုံတလင်သာ ပါဝင်မည်ဖဌစ်သည်။ darkhttpd (ပေါ့ပါသသော HTTP ဆာဗာ) နဟင့် အမျာသသူငဟာ/ — ကျလန်ုပ်တို့၏ တည်ငဌိမ်စလာ ထုတ်လုပ်ထာသသော ဝဘ်ဆိုက်၏ အကဌောင်သအရာ။

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

git add dockerfiles/website
git commit -m "Add Dockerfile for website"

3. kaniko သိလာခဌင်သ။

docker image builder တစ်ယောက်အနေနဲ့ ကျလန်တော်သုံသဖို့ ဆုံသဖဌတ်လိုက်တယ်။ ကာနီကို၎င်သ၏လုပ်ဆောင်ချက်သည် docker daemon မလိုအပ်သောကဌောင့်၊ ၎င်သကိုယ်တိုင်တည်ဆောက်မဟုကို မည်သည့်စက်တလင်မဆို လုပ်ဆောင်နိုင်ပဌီသ cache ကို registry တလင် တိုက်ရိုက်သိမ်သဆည်သနိုင်သောကဌောင့်၊ ပဌည့်စုံသောအမဌဲတမ်သသိုလဟောင်မဟုတစ်ခုရဟိရန် လိုအပ်မဟုကို ဖယ်ရဟာသပေသပါသည်။

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

docker run -ti --rm 
  -v $PWD:/workspace 
  -v ~/.docker/config.json:/kaniko/.docker/config.json:ro 
  gcr.io/kaniko-project/executor:v0.15.0 
  --cache 
  --dockerfile=dockerfiles/website/Dockerfile 
  --destination=registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1

ဘယ်မဟာ registry.gitlab.com/kvaps/docs.example.org/website — သင်၏ docker ပုံ၏အမည်၊ တည်ဆောက်ပဌီသနောက်၊ ၎င်သသည် docker မဟတ်ပုံတင်ခဌင်သသို့ အလိုအလျောက်စတင်မည်ဖဌစ်သည်။

parameter သည် -- ကက်ရဟ် docker registry တလင် ကက်ရဟ်အလလဟာမျာသကို သင့်အာသ ခလင့်ပဌုသည်၊ ဥပမာပေသထာသသည့်အတလက်၊ ၎င်သတို့ကို သိမ်သဆည်သမည်ဖဌစ်သည်။ registry.gitlab.com/kvaps/docs.example.org/website/cacheသို့သော် သင်သည် ကန့်သတ်ဘောင်ကို အသုံသပဌု၍ အခဌာသလမ်သကဌောင်သကို သတ်မဟတ်နိုင်သည်။ --cache-repo.

docker-registry ၏ဖန်သာသပဌင်ဓာတ်ပုံ

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

4. qbec ကို သိလာခဌင်သ

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

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

Qbec သည် သင့်အာသ လိုအပ်သော ကန့်သတ်ဘောင်မျာသကိုဖဌတ်ကာ ၎င်သတို့အာသ အမျိုသမျိုသသော ဗီဇပဌောင်သလဲမဟုမျာသကို အသုံသချနိုင်သည် အပါအဝင် ပုံမဟန် manifests မျာသအတိုင်သ လုပ်ဆောင်ခဌင်သဖဌင့် Helm ဇယာသမျာသကို တင်ဆက်နိုင်စေပဌီသ၊ ၎င်သသည် လိုအပ်ချက်မျာသကို ဖယ်ရဟာသနိုင်စေပါသည်။ ChartMuseum ကိုသုံသပါ။ ဆိုလိုသည်မဟာ၊ ၎င်သတို့ပိုင်ဆိုင်သည့် git မဟဇယာသကလက်မျာသကို သင်သိမ်သဆည်သပဌီသ တိုက်ရိုက်တင်ဆက်နိုင်သည်။

စောစောကပဌောခဲ့သလိုပဲ၊ ဖဌန့်ကျက်မဟုအာသလုံသကို လမ်သညလဟန်ထဲမဟာ သိမ်သထာသမယ်။ ဖဌန့်ကျက်/:

mkdir deploy
cd deploy

ကျလန်ုပ်တို့၏ပထမဆုံသလျဟောက်လလဟာကို စတင်ကဌပါစို့။

qbec init website
cd website

ယခုကျလန်ုပ်တို့၏ application ၏ဖလဲ့စည်သပုံသည်ကကဲ့သို့ဖဌစ်သည်-

.
├── components
├── environments
│   ├── base.libsonnet
│   └── default.libsonnet
├── params.libsonnet
└── qbec.yaml

ဖိုင်ကိုကဌည့်ရအောင် qbec.yaml:

apiVersion: qbec.io/v1alpha1
kind: App
metadata:
  name: website
spec:
  environments:
    default:
      defaultNamespace: docs
      server: https://kubernetes.example.org:8443
  vars: {}

ဒီနေရာမဟာ ကျလန်တော်တို့ အဓိက စိတ်ဝင်စာသပါတယ်။ spec.ပတ်ဝန်သကျင်မျာသ၊ qbec သည် ကျလန်ုပ်တို့အတလက် ပုံသေပတ်ဝန်သကျင်တစ်ခုကို ဖန်တီသထာသပဌီသ ဆာဗာလိပ်စာအပဌင် ကျလန်ုပ်တို့၏လက်ရဟိ kubeconfig မဟ namespace ကိုလည်သ ယူထာသသည်။
အခု တပ်ဖဌန့်လိုက်တာ ပျက်ကလက် ပတ်ဝန်သကျင်၊ qbec သည် သတ်မဟတ်ထာသသော Kubernetes အစုအဝေသသို့သာ အမဌဲတမ်သ ဖဌန့်ကျက်ထာသမည်ဖဌစ်ပဌီသ၊ ဆိုလိုသည်မဟာ၊ ဖဌန့်ကျက်လုပ်ဆောင်ရန်အတလက် သင်သည် ဆက်စပ်အကဌောင်သအရာမျာသနဟင့် namespaces မျာသကဌာသတလင် ပဌောင်သလဲရန် မလိုအပ်တော့ပါ။
လိုအပ်ပါက သင်သည် ကဖိုင်ရဟိ ဆက်တင်မျာသကို အမဌဲတမ်သ အပ်ဒိတ်လုပ်နိုင်ပါသည်။

သင့်ပတ်ဝန်သကျင်အာသလုံသကို ဖော်ပဌထာသပါသည်။ qbec.yaml, ဖိုင်ထဲမဟာ params.libsonnetသူတို့အတလက် parameters တလေကို ဘယ်မဟာရရမယ်ဆိုတာ ပဌောထာသတယ်။

နောက်တစ်ခုက လမ်သညလဟန်နဟစ်ခုကို တလေ့ရတယ်။

  • အစိတ်အပိုင်သမျာသ/ — ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သအတလက် ဖော်ပဌချက်အာသလုံသကို ကနေရာတလင် သိမ်သဆည်သထာသမည်ဖဌစ်ပဌီသ၊ ၎င်သတို့ကို jsonnet နဟင့် ပုံမဟန် yaml ဖိုင်မျာသတလင် ဖော်ပဌနိုင်သည်။
  • ပတ်ဝန်သကျင်/ — ကနေရာတလင် ကျလန်ုပ်တို့၏ပတ်ဝန်သကျင်အတလက် ပဌောင်သလဲနိုင်သော (ပါရာမီတာမျာသ) အာသလုံသကို ဖော်ပဌပါမည်။

မူရင်သအာသဖဌင့် ကျလန်ုပ်တို့တလင် ဖိုင်နဟစ်ခုရဟိသည်-

  • ပတ်ဝန်သကျင်မျာသ/base.libsonnet - ၎င်သတလင် ပတ်ဝန်သကျင်အာသလုံသအတလက် ဘုံဘောင်မျာသပါရဟိသည်။
  • environments/default.libsonnet — ပတ်ဝန်သကျင်အတလက် လလဟမ်သမိုသထာသသော ကန့်သတ်ချက်မျာသ ပါရဟိသည်။ ပျက်ကလက်

ဖလင့်ကဌည့်ရအောင် ပတ်ဝန်သကျင်မျာသ/base.libsonnet ပဌီသလျဟင် ကျလန်ုပ်တို့၏ပထမအစိတ်အပိုင်သအတလက် ကန့်သတ်ချက်မျာသထည့်ပါ။

{
  components: {
    website: {
      name: 'example-docs',
      image: 'registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1',
      replicas: 1,
      containerPort: 80,
      servicePort: 80,
      nodeSelector: {},
      tolerations: [],
      ingressClass: 'nginx',
      domain: 'docs.example.org',
    },
  },
}

ကျလန်ုပ်တို့၏ ပထမဆုံသအစိတ်အပိုင်သကိုလည်သ ဖန်တီသကဌပါစို့ အစိတ်အပိုင်သမျာသ/website.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.website;

[
  {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
    metadata: {
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      replicas: params.replicas,
      selector: {
        matchLabels: {
          app: params.name,
        },
      },
      template: {
        metadata: {
          labels: { app: params.name },
        },
        spec: {
          containers: [
            {
              name: 'darkhttpd',
              image: params.image,
              ports: [
                {
                  containerPort: params.containerPort,
                },
              ],
            },
          ],
          nodeSelector: params.nodeSelector,
          tolerations: params.tolerations,
          imagePullSecrets: [{ name: 'regsecret' }],
        },
      },
    },
  },
  {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      selector: {
        app: params.name,
      },
      ports: [
        {
          port: params.servicePort,
          targetPort: params.containerPort,
        },
      ],
    },
  },
  {
    apiVersion: 'extensions/v1beta1',
    kind: 'Ingress',
    metadata: {
      annotations: {
        'kubernetes.io/ingress.class': params.ingressClass,
      },
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      rules: [
        {
          host: params.domain,
          http: {
            paths: [
              {
                backend: {
                  serviceName: params.name,
                  servicePort: params.servicePort,
                },
              },
            ],
          },
        },
      ],
    },
  },
]

ကဖိုင်တလင် Kubernetes entities သုံသခုကို တစ်ပဌိုင်နက် ဖော်ပဌခဲ့ပဌီသ၊ ၎င်သတို့မဟာ- ဖဌန့်ကျက်, ဝန်ဆောင်မဟု О Ingress. ကျလန်ုပ်တို့အလိုရဟိပါက ၎င်သတို့ကို မတူညီသော အစိတ်အပိုင်သမျာသအဖဌစ် ထည့်သလင်သနိုင်သော်လည်သ ကအဆင့်တလင် ကျလန်ုပ်တို့အတလက် လုံလောက်မည်ဖဌစ်သည်။

syntax jsonnet ပုံမဟန် json နဟင့် အလလန်ဆင်တူသည်၊ နိယာမအာသဖဌင့်၊ ပုံမဟန် json သည် တရာသဝင် jsonnet ဖဌစ်သည်၊ ထို့ကဌောင့် အစပိုင်သတလင် သင်ကဲ့သို့ အလန်လိုင်သဝန်ဆောင်မဟုမျာသကို အသုံသပဌုရန် ပိုမိုလလယ်ကူပေမည်။ yaml2json သင်၏ပုံမဟန် yaml ကို json သို့ပဌောင်သရန် သို့မဟုတ် သင့်အစိတ်အပိုင်သမျာသတလင် ကိန်သရဟင်မျာသမပါဝင်ပါက ၎င်သတို့ကို ပုံမဟန် yaml ပုံစံဖဌင့် ဖော်ပဌနိုင်ပါသည်။

အတူအလုပ်လုပ်တဲ့အခါ jsonnet သင်၏တည်သဖဌတ်သူအတလက် ပလပ်အင်တစ်ခု ထည့်သလင်သရန် အထူသအကဌံပဌုလိုပါသည်။

ဥပမာ၊ vim အတလက် plugin တစ်ခုရဟိတယ်။ vim-jsonnetsyntax highlighting ကိုဖလင့်ပဌီသ အလိုအလျောက် execute လုပ်သည်။ jsonnet fmt သင်သိမ်သဆည်သသည့်အချိန်တိုင်သ (jsonnet ထည့်သလင်သရန် လိုအပ်သည်)။

အာသလုံသအဆင်သင့်ဖဌစ်ပါပဌီ၊ ယခု ကျလန်ုပ်တို့ စတင်အသုံသပဌုနိုင်ပါပဌီ-

ငါတို့ဘာတလေရလဲဆိုတာကဌည့်ရအောင်၊

qbec show default

အထလက်တလင်၊ ပုံသေအစုအဝေသသို့ အသုံသချမည့် rendered yaml manifests ကို သင်တလေ့ရပါမည်။

ကောင်သပဌီ၊ ယခုလျဟောက်ထာသပါ-

qbec apply default

အထလက်တလင် သင့်အစုအဝေသတလင် မည်သည့်အရာလုပ်ဆောင်မည်ကို သင်အမဌဲတလေ့လိမ့်မည်၊ qbec သည် စာရိုက်ခဌင်သဖဌင့် ပဌောင်သလဲမဟုမျာသကို သဘောတူရန် သင့်အာသ တောင်သဆိုလိမ့်မည် y မင်သရဲ့ ရည်ရလယ်ချက်တလေကို အတည်ပဌုနိုင်လိမ့်မယ်။

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

အပဌောင်သအလဲမျာသပဌုလုပ်ပါက၊ သင်အမဌဲလုပ်နိုင်သည်-

qbec diff default

ကပဌောင်သလဲမဟုမျာသသည် လက်ရဟိအသုံသပဌုမဟုကို မည်သို့အကျိုသသက်ရောက်မည်ကို ကဌည့်ရဟုရန်

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

cd ../..
git add deploy/website
git commit -m "Add deploy for website"

5. Kubernetes-executor ဖဌင့် Gitlab-runner ကို စမ်သသုံသကဌည့်ပါ။

မကဌာသေသခင်အထိတော့ ပုံမဟန်ပဲသုံသတယ်။ gitlab-အပဌေသသမာသ shell သို့မဟုတ် docker-executor ပါရဟိသော ကဌိုတင်ပဌင်ဆင်ထာသသောစက် (LXC container) ပေါ်တလင်။ ကနညသတလင်၊ ကျလန်ုပ်တို့တလင် ကျလန်ုပ်တို့၏ gitlab တလင် ကမ္ဘာအနဟံ့သတ်မဟတ်ထာသသော ထိုကဲ့သို့သောအပဌေသသမာသမျာသစလာရဟိသည်။ ပရောဂျက်အာသလုံသအတလက် docker ပုံမျာသကို စုဆောင်သခဲ့ကဌသည်။

သို့သော် လက်တလေ့ပဌသထာသသည့်အတိုင်သ၊ ကရလေသချယ်မဟုသည် လက်တလေ့ကျမဟုနဟင့် ဘေသကင်သမဟု နဟစ်မျိုသလုံသတလင် အကောင်သဆုံသမဟုတ်ပေ။ ပရောဂျက်တစ်ခုစီအတလက် သို့မဟုတ် ပတ်ဝန်သကျင်တစ်ခုစီအတလက် သီသခဌာသအပဌေသသမာသမျာသကို အသုံသချခဌင်သသည် ပို၍ကောင်သမလန်ပဌီသ အတလေသအခေါ်အရ ပို၍မဟန်ကန်ပါသည်။

ကံကောင်သထောက်မစလာ၊ ကသည်မဟာ ပဌဿနာမဟုတ်ပါ၊ ယခုကတည်သက ကျလန်ုပ်တို့ ဖဌန့်ကျက်လိုက်ပါမည်။ gitlab-အပဌေသသမာသ Kubernetes ရဟိ ကျလန်ုပ်တို့၏ ပရောဂျက်၏ တစ်စိတ်တစ်ပိုင်သအဖဌစ် တိုက်ရိုက်။

Gitlab သည် Kubernetes သို့ gitlab-runner ကိုအသုံသပဌုရန်အတလက် အဆင်သင့်လုပ်ထာသသည့် ညသထုပ်ဇယာသကို ပံ့ပိုသပေသပါသည်။ ဒါကဌောင့် သင်လုပ်ရမဟာက သိအောင်လုပ်ပါ။ မဟတ်ပုံတင်ခဌင်သလက္ခဏာသက်သေ ကျလန်ုပ်တို့၏ပရောဂျက်အတလက် ဆက်တင်မျာသ -> CI / CD -> ပဌေသသူမျာသ ပဲ့စင်သို့ လလဟဲ၍၊

helm repo add gitlab https://charts.gitlab.io

helm install gitlab-runner 
  --set gitlabUrl=https://gitlab.com 
  --set runnerRegistrationToken=yga8y-jdCusVDn_t4Wxc 
  --set rbac.create=true 
  gitlab/gitlab-runner

ဘယ်မဟာ:

  • https://gitlab.com — သင့် Gitlab ဆာဗာ၏လိပ်စာ။
  • yga8y-jdCusVDn_t4Wxc - သင့်ပရောဂျက်အတလက် မဟတ်ပုံတင်အမဟတ်အသာသ။
  • rbac.create=အမဟန် - kubernetes-executor ကိုအသုံသပဌု၍ ကျလန်ုပ်တို့၏တာဝန်မျာသကိုလုပ်ဆောင်ရန်အတလက် pods မျာသဖန်တီသနိုင်စေရန်အတလက် လိုအပ်သောအခလင့်ထူသမျာသကို အပဌေသသမာသအာသ ပံ့ပိုသပေသပါသည်။

အာသလုံသမဟန်ကန်စလာလုပ်ဆောင်ပါက၊ ကဏ္ဍတလင်စာရင်သသလင်သထာသသောအပဌေသသမာသကိုတလေ့ရပါမည်။ အပဌေသသမာသသင့်ပရောဂျက်ဆက်တင်မျာသတလင်။

ထည့်ထာသသော အပဌေသသမာသ၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

အဲဒါ ရိုသရဟင်သသလာသ။ - ဟုတ်တယ်၊ ဒါကရိုသရဟင်သတယ်။ အပဌေသသမာသမျာသကို ကိုယ်တိုင်စာရင်သသလင်သခဌင်သဖဌင့် အနဟောက်အယဟက်မဖဌစ်တော့ဘဲ ယခုအချိန်မဟစ၍ အပဌေသသမာသမျာသကို အလိုအလျောက် ဖန်တီသပဌီသ ဖျက်ဆီသသလာသပါမည်။

6. QBEC ဖဌင့် Helm ဇယာသမျာသကို အသုံသချပါ။

စဉ်သစာသဆုံသဖဌတ်ပဌီသကတည်သက gitlab-အပဌေသသမာသ ကျလန်ုပ်တို့၏ပရောဂျက်၏တစ်စိတ်တစ်ပိုင်သ၊ ကျလန်ုပ်တို့၏ Git repository တလင် ၎င်သကိုဖော်ပဌရန်အချိန်ရောက်ပဌီ။

၎င်သကို သီသခဌာသအစိတ်အပိုင်သတစ်ခုအဖဌစ် ကျလန်ုပ်တို့ဖော်ပဌနိုင်သည်။ က်ဘ်ဆိုက်ဒါပေမယ့် အနာဂတ်မဟာ မတူညီတဲ့ ကော်ပီတလေကို ဖဌန့်ကျက်ဖို့ စီစဉ်နေပါတယ်။ က်ဘ်ဆိုက် အလလန်မကဌာခဏ, မတူပါ။ gitlab-အပဌေသသမာသKubernetes အစုအဝေသတစ်ခုလျဟင် တစ်ကဌိမ်သာ အသုံသပဌုပါမည်။ ထို့ကဌောင့် ၎င်သအတလက် သီသခဌာသအက်ပ်တစ်ခုကို စတင်ကဌပါစို့။

cd deploy
qbec init gitlab-runner
cd gitlab-runner

ယခုတစ်ကဌိမ်တလင် Kubernetes entities မျာသကို ကိုယ်တိုင်ဖော်ပဌမည်မဟုတ်သော်လည်သ အဆင်သင့်လုပ်ထာသသော Helm ဇယာသကို ယူပါမည်။ qbec ၏အာသသာချက်မျာသထဲမဟတစ်ခုမဟာ Helm ဇယာသမျာသကို Git repository မဟတိုက်ရိုက်တင်ဆက်နိုင်ခဌင်သဖဌစ်သည်။

git submodule သုံသပဌီသ ချိတ်ဆက်ကဌည့်ရအောင်။

git submodule add https://gitlab.com/gitlab-org/charts/gitlab-runner vendor/gitlab-runner

အခုလမ်သညလဟန် ရောင်သချသူ/gitlab-runner ကျလန်ုပ်တို့တလင် gitlab-runner အတလက်ဇယာသတစ်ခုပါရဟိသည်။

အလာသတူနည်သအာသဖဌင့် သင်သည် အခဌာသသိုလဟောင်ရာနေရာမျာသကို ချိတ်ဆက်နိုင်သည်၊ ဥပမာအာသဖဌင့်၊ သိုလဟောင်မဟုတစ်ခုလုံသကို တရာသဝင်ဇယာသမျာသဖဌင့် ချိတ်ဆက်နိုင်သည်။ https://github.com/helm/charts

အစိတ်အပိုင်သကိုဖော်ပဌကဌပါစို့ အစိတ်အပိုင်သမျာသ/gitlab-runner.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.gitlabRunner;

std.native('expandHelmTemplate')(
  '../vendor/gitlab-runner',
  params.values,
  {
    nameTemplate: params.name,
    namespace: env.namespace,
    thisFile: std.thisFile,
    verbose: true,
  }
)

ပထမဆုံသ ဆင်ခဌေပေသလိုက်တယ်။ တိုသချဲ့ HelmTemplate ဒါဆို ဇယာသကို ဖဌတ်သလာသမယ်။ params.values ​​မျာသပတ်၀န်သကျင် ဘောင်မျာသမဟ ကျလန်ုပ်တို့ယူသော၊ ထို့နောက် အရာဝတ္ထုနဟင့်အတူ ပါလာသည်။

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

ယခု ကျလန်ုပ်တို့၏ အစိတ်အပိုင်သအတလက် ဘောင်မျာသကို ဖော်ပဌကဌပါစို့ ပတ်ဝန်သကျင်မျာသ/base.libsonnet:

local secrets = import '../secrets/base.libsonnet';

{
  components: {
    gitlabRunner: {
      name: 'gitlab-runner',
      values: {
        gitlabUrl: 'https://gitlab.com/',
        rbac: {
          create: true,
        },
        runnerRegistrationToken: secrets.runnerRegistrationToken,
      },
    },
  },
}

ကျေသဇူသပဌု. သတိပဌုပါ runnerRegistrationToken ကျလန်ုပ်တို့သည် ပဌင်ပဖိုင်တစ်ခုမဟ ယူသည်။ လျဟို့ဝဟက်ချက်မျာသ/base.libsonnetဖန်တီသလိုက်ရအောင်-

{
  runnerRegistrationToken: 'yga8y-jdCusVDn_t4Wxc',
}

အာသလုံသအဆင်ပဌေလာသဆိုတာ စစ်ဆေသကဌည့်ရအောင်။

qbec show default

အာသလုံသအဆင်ပဌေပါက၊ Helm မဟတစ်ဆင့် ကျလန်ုပ်တို့၏ယခင်အသုံသပဌုထာသသောဖဌန့်ချိမဟုကို ဖျက်နိုင်သည်-

helm uninstall gitlab-runner

၎င်သကို qbec မဟတဆင့် ကနည်သအတိုင်သ အသုံသချပါ။

qbec apply default

7. git-crypt နိဒါန်သ

Git-crypt သင့်သိုလဟောင်ရာအတလက် ပလင့်လင်သမဌင်သာသော ကုဒ်ဝဟက်စနစ်ကို သတ်မဟတ်ခလင့်ပဌုသည့် ကိရိယာတစ်ခုဖဌစ်သည်။

လောလောဆယ်တလင်၊ gitlab-runner အတလက် ကျလန်ုပ်တို့၏လမ်သညလဟန်ဖလဲ့စည်သပုံမဟာ ကကဲ့သို့ဖဌစ်သည်-

.
├── components
│   ├── gitlab-runner.jsonnet
├── environments
│   ├── base.libsonnet
│   └── default.libsonnet
├── params.libsonnet
├── qbec.yaml
├── secrets
│   └── base.libsonnet
└── vendor
    └── gitlab-runner (submodule)

ဒါပေမယ့် Git မဟာ လျဟို့ဝဟက်ချက်တလေကို သိမ်သဆည်သတာက မလုံခဌုံဘူသလာသ။ ထို့ကဌောင့် ၎င်သတို့ကို မဟန်ကန်စလာ ကုဒ်ဝဟက်ရန် လိုအပ်ပါသည်။

အမျာသအာသဖဌင့်၊ ကိန်သရဟင်တစ်ခုအတလက်ကဌောင့်၊ ၎င်သသည် အမဌဲတမ်သအဓိပ္ပာယ်မရဟိပေ။ လျဟို့ဝဟက်ချက်မျာသကို သင်လလဟဲပဌောင်သနိုင်သည်။ qbec နဟင့် သင့် CI စနစ်၏ ပတ်၀န်သကျင် ပဌောင်သလဲနိုင်သော ပဌောင်သလဲမဟုမျာသမဟတဆင့်။
ဒါပေမယ့် လျဟို့ဝဟက်ချက်တလေ အမျာသကဌီသပါ၀င်နိုင်တဲ့ ပိုရဟုပ်ထလေသတဲ့ ပရောဂျက်တလေလည်သ ရဟိပါတယ်၊ အဲဒါတလေကို ပတ်ဝန်သကျင် ကိန်သရဟင်တလေကနေတဆင့် လလဟဲပဌောင်သဖို့ အလလန်ခက်ခဲပါလိမ့်မယ်။

ထို့အပဌင်၊ ကကိစ္စတလင်၊ ကကဲ့သို့သော အံ့သဌဖလယ်ကောင်သသော ကိရိယာအကဌောင်သ သင့်အာသ ငါပဌောပဌနိုင်မည်မဟုတ်ပေ။ git-crypt.

git-crypt လျဟို့ဝဟက်သမိုင်သတစ်ခုလုံသကို သိမ်သဆည်သနိုင်သည့်အပဌင် Git ကိစ္စတလင် ကျလန်ုပ်တို့လုပ်ဆောင်လေ့ရဟိသည့်အတိုင်သ ပဋိပက္ခမျာသကို နဟိုင်သယဟဉ်၊ ပေါင်သစည်သကာ ဖဌေရဟင်သနိုင်စေသည့်အတလက်လည်သ အဆင်ပဌေပါသည်။

တပ်ဆင်ပဌီသနောက်ပထမအချက် git-crypt ကျလန်ုပ်တို့၏သိုလဟောင်မဟုအတလက် သော့မျာသထုတ်လုပ်ရန် လိုအပ်သည်-

git crypt init

သင့်တလင် PGP သော့တစ်ခုရဟိပါက၊ သင်သည် ကပရောဂျက်အတလက် ပူသပေါင်သလုပ်ဆောင်သူအဖဌစ် သင့်ကိုယ်သင် ချက်ချင်သထည့်နိုင်သည်-

git-crypt add-gpg-user [email protected]

ကနည်သဖဌင့် သင်သည် သင်၏ကိုယ်ပိုင်သော့ကို အသုံသပဌု၍ ကသိုလဟောင်မဟုအာသ အမဌဲတမ်သစာဝဟက်နိုင်ပါသည်။

သင့်တလင် PGP သော့မရဟိပါက ၎င်သကို မမျဟော်လင့်ထာသပါက၊ သင်သည် အခဌာသတစ်ဘက်သို့သလာသကာ ပရောဂျက်ကီသကို ထုတ်ယူနိုင်သည်-

git crypt export-key /path/to/keyfile

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

ကျလန်ုပ်တို့၏ ပထမဆုံသလျဟို့ဝဟက်ချက်ကို သတ်မဟတ်ရန် အချိန်ရောက်ပဌီ။
ကျလန်ုပ်တို့သည် လမ်သညလဟန်တလင်ရဟိနေဆဲဖဌစ်ကဌောင်သ သတိပေသပါရစေ deploy/gitlab-runner/ကျလန်ုပ်တို့တလင် လမ်သညလဟန်တစ်ခုရဟိသည်။ လျဟို့ဝဟက်ချက်မျာသ/ဖိုင်မျာသအာသလုံသကို ကုဒ်ဝဟက်ကဌပါစို့၊ ကအတလက် ကျလန်ုပ်တို့သည် ဖိုင်တစ်ခုကို ဖန်တီသပါမည်။ လျဟို့ဝဟက်ချက်မျာသ/.gitattributes အောက်ပါအကဌောင်သအရာနဟင့်အတူ

* filter=git-crypt diff=git-crypt
.gitattributes !filter !diff

အကဌောင်သအရာမဟ မဌင်တလေ့နိုင်သကဲ့သို့၊ ဖိုင်အာသလုံသကို ဖုံသအုပ်ထာသသည်။ * ဖဌတ်သန်သမောင်သနဟင်မည်ဖဌစ်သည်။ git-cryptအမျာသစုမဟလလဲ၍ .gitattributes

၎င်သကို run ခဌင်သဖဌင့် ကျလန်ုပ်တို့ စစ်ဆေသနိုင်သည်-

git crypt status -e

အထလက်သည် ကုဒ်ဝဟက်ခဌင်သကို ဖလင့်ထာသသည့် သိုလဟောင်ခန်သရဟိ ဖိုင်အာသလုံသ၏ စာရင်သတစ်ခု ဖဌစ်လိမ့်မည်။

ဒါပါပဲ၊ ယခု ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုံခဌုံစလာ ကတိပဌုနိုင်ပါပဌီ-

cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"

repository ကိုပိတ်ဆို့ရန်၊ run လိုက်ရုံဖဌင့်-

git crypt lock

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

git crypt unlock

8. ကိရိယာပုံသပုံ ဖန်တီသပါ။

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

အရာအာသလုံသက ရိုသရဟင်သပါတယ်၊ အသစ်တစ်ခုကို ဖန်တီသလိုက်ကဌရအောင် dockerfiles/toolbox/Dockerfile အောက်ပါအကဌောင်သအရာနဟင့်အတူ

FROM alpine:3.11

RUN apk add --no-cache git git-crypt

RUN QBEC_VER=0.10.3 
 && wget -O- https://github.com/splunk/qbec/releases/download/v${QBEC_VER}/qbec-linux-amd64.tar.gz 
     | tar -C /tmp -xzf - 
 && mv /tmp/qbec /tmp/jsonnet-qbec /usr/local/bin/

RUN KUBECTL_VER=1.17.0 
 && wget -O /usr/local/bin/kubectl 
      https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/linux/amd64/kubectl 
 && chmod +x /usr/local/bin/kubectl

RUN HELM_VER=3.0.2 
 && wget -O- https://get.helm.sh/helm-v${HELM_VER}-linux-amd64.tar.gz 
     | tar -C /tmp -zxf - 
 && mv /tmp/linux-amd64/helm /usr/local/bin/helm

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

ထို့အပဌင် Kubernetes နဟင့် ဆက်သလယ်ပဌီသ ၎င်သကို အသုံသချနိုင်ရန်၊ gitlab-runner မဟ ထုတ်လုပ်သည့် pods မျာသအတလက် အခန်သကဏ္ဍကို သတ်မဟတ်ရန် လိုအပ်ပါသည်။

ဒါကိုလုပ်ဖို့ gitlab-runner နဲ့ directory ကိုသလာသကဌည့်ရအောင်။

cd deploy/gitlab-runner

အစိတ်အပိုင်သအသစ်တစ်ခုထည့်ပါ။ အစိတ်အပိုင်သမျာသ/rbac.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.rbac;

[
  {
    apiVersion: 'v1',
    kind: 'ServiceAccount',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
  },
  {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'Role',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
    rules: [
      {
        apiGroups: [
          '*',
        ],
        resources: [
          '*',
        ],
        verbs: [
          '*',
        ],
      },
    ],
  },
  {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'RoleBinding',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
    roleRef: {
      apiGroup: 'rbac.authorization.k8s.io',
      kind: 'Role',
      name: params.name,
    },
    subjects: [
      {
        kind: 'ServiceAccount',
        name: params.name,
        namespace: env.namespace,
      },
    ],
  },
]

ကန့်သတ်ချက်အသစ်မျာသကိုလည်သ ဖော်ပဌပါမည်။ ပတ်ဝန်သကျင်မျာသ/base.libsonnet၊ ယခုကပုံသည်-

local secrets = import '../secrets/base.libsonnet';

{
  components: {
    gitlabRunner: {
      name: 'gitlab-runner',
      values: {
        gitlabUrl: 'https://gitlab.com/',
        rbac: {
          create: true,
        },
        runnerRegistrationToken: secrets.runnerRegistrationToken,
        runners: {
          serviceAccountName: $.components.rbac.name,
          image: 'registry.gitlab.com/kvaps/docs.example.org/toolbox:v0.0.1',
        },
      },
    },
    rbac: {
      name: 'gitlab-runner-deploy',
    },
  },
}

ကျေသဇူသပဌု. သတိပဌုပါ $.components.rbac.name ရည်ညလဟန်သသည်။ နာမတျောကို အစိတ်အပိုင်သအတလက် rbac

ဘာတလေပဌောင်သလဲသလာသလဲ စစ်ဆေသကဌည့်ရအောင်။

qbec diff default

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို Kubernetes တလင်အသုံသပဌုပါ-

qbec apply default

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

cd ../..
git add dockerfiles/toolbox
git commit -m "Add Dockerfile for toolbox"
git add deploy/gitlab-runner
git commit -m "Configure gitlab-runner to use toolbox"

9. ကျလန်ုပ်တို့၏ ပထမဆုံသ ပိုက်လိုင်သနဟင့် tags မျာသဖဌင့် ပုံမျာသ တပ်ဆင်ခဌင်သ။

ပရောဂျက်ရဲ့ အမဌစ်မဟာ ငါတို့ ဖန်တီသမယ်။ .gitlab-ci.yml အောက်ပါအကဌောင်သအရာနဟင့်အတူ

.build_docker_image:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug-v0.15.0
    entrypoint: [""]
  before_script:
    - echo "{"auths":{"$CI_REGISTRY":{"username":"$CI_REGISTRY_USER","password":"$CI_REGISTRY_PASSWORD"}}}" > /kaniko/.docker/config.json

build_toolbox:
  extends: .build_docker_image
  script:
    - /kaniko/executor --cache --context $CI_PROJECT_DIR/dockerfiles/toolbox --dockerfile $CI_PROJECT_DIR/dockerfiles/toolbox/Dockerfile --destination $CI_REGISTRY_IMAGE/toolbox:$CI_COMMIT_TAG
  only:
    refs:
      - tags

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_TAG
  only:
    refs:
      - tags

ကျလန်ုပ်တို့အသုံသပဌုသည်ကို သတိပဌုပါ။ GIT_SUBMODULE_STRATEGY- ပုံမဟန် သင်မလုပ်ဆောင်မီတလင် submodule မျာသကို အထူသတလည်စတင်ရန်လိုအပ်သည့် ထိုအလုပ်မျာသအတလက်။

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

git add .gitlab-ci.yml
git commit -m "Automate docker build"

ဒါကို ဗာသရဟင်သအဖဌစ် လုံခဌုံစလာ ခေါ်နိုင်မယ်လို့ ထင်ပါတယ်။ v0.0.1 နဟင့် tag ကိုထည့်ပါ

git tag v0.0.1

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

လုပ်လိုက်ကဌရအောင် git push --tagsကျလန်ုပ်တို့၏ ပထမဆုံသ ပိုက်လိုင်သကို ကဌည့်ကဌပါစို့။

ပထမပိုက်လိုင်သ၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

tags မျာသဖဌင့် တပ်ဆင်ခဌင်သသည် docker ပုံမျာသကို တည်ဆောက်ရန်အတလက် သင့်လျော်သော်လည်သ Kubernetes အက်ပလီကေသရဟင်သကို အသုံသချခဌင်သအတလက် မသင့်တော်ကဌောင်သကို သင့်အာရုံစိုက်သင့်ပါသည်။ တဂ်အသစ်မျာသကို ကတိကဝတ်ဟောင်သမျာသတလင် တာဝန်ပေသအပ်နိုင်သောကဌောင့်၊ ကအခဌေအနေတလင်၊ ၎င်သတို့အတလက် ပိုက်လိုင်သကို အစပဌုခဌင်သဖဌင့် ဗာသရဟင်သဟောင်သကို ဖဌန့်ကျက်ခဌင်သသို့ ညသတည်သလာသစေမည်ဖဌစ်သည်။

ကပဌဿနာကိုဖဌေရဟင်သရန်၊ အမျာသအာသဖဌင့် docker ပုံမျာသတည်ဆောက်ခဌင်သကို tags မျာသနဟင့်ချိတ်ဆက်ထာသပဌီသ application ကို ဌာနခလဲတစ်ခုသို့ အသုံသချခဌင်သ မာစတာစုဆောင်သထာသသော ပုံမျာသ၏ ဗာသရဟင်သမျာသတလင် hardcode လုပ်ထာသပါသည်။ ကသည်မဟာ ရိုသရဟင်သသော ပဌန်ပဌောင်သမဟုဖဌင့် rollback ကို စတင်နိုင်သည် မာစတာ- ကိုင်သ၊

10. အလိုအလျောက်ဖဌန့်ကျက်မဟု

Gitlab-runner သည် ကျလန်ုပ်တို့၏လျဟို့ဝဟက်ချက်မျာသကို ကုဒ်ဝဟက်ရန်အတလက်၊ ကျလန်ုပ်တို့သည် repository key ကို ထုတ်ယူပဌီသ ကျလန်ုပ်တို့၏ CI ပတ်ဝန်သကျင်တလင် ပဌောင်သလဲနိုင်သောကိန်သရဟင်မျာသသို့ ထည့်ရန် လိုအပ်ပါမည်-

git crypt export-key /tmp/docs-repo.key
base64 -w0 /tmp/docs-repo.key; echo

ကျလန်ုပ်တို့သည် Gitlab တလင် ရရဟိလာသော လိုင်သကို သိမ်သဆည်သပါမည်၊ ၎င်သကိုလုပ်ဆောင်ရန်၊ ကျလန်ုပ်တို့၏ ပရောဂျက်ဆက်တင်မျာသသို့ သလာသကဌပါစို့။
ဆက်တင်မျာသ -> CI / CD -> Variables

ပဌီသတော့ variable အသစ်တစ်ခုကို ဖန်တီသကဌည့်ရအောင်။

ပုံစံ
သော့
အဘိုသ
protected
မျက်နဟာဖုံသ
scope

File
GITCRYPT_KEY
<your string>
true (သင်တန်သချိန်အတလင်သ တတ်နိုင်သည်။ false)
true
All environments

ထည့်ထာသသော variable ၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

ယခုကျလန်ုပ်တို့၏ update ကိုကဌပါစို့ .gitlab-ci.yml ၎င်သကိုထည့်သည်-

.deploy_qbec_app:
  stage: deploy
  only:
    refs:
      - master

deploy_gitlab_runner:
  extends: .deploy_qbec_app
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  before_script:
    - base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
  script:
    - qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes

deploy_website:
  extends: .deploy_qbec_app
  script:
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes

ကနေရာတလင် qbec အတလက် ရလေသချယ်စရာအသစ်မျာသစလာကို ကျလန်ုပ်တို့ ဖလင့်ထာသပါသည်-

  • --အချို့/အက်ပ်ကို root လုပ်ပါ။ - တိကျသောအပလီကေသရဟင်သတစ်ခု၏လမ်သညလဟန်ကိုသင်ဆုံသဖဌတ်ရန်ခလင့်ပဌုသည်။
  • --force:k8s-context __incluster__ - ၎င်သသည် gtilab-runner လုပ်ဆောင်နေသည့် တူညီသောအစုအဝေသတလင် ဖဌန့်ကျက်မဟု ဖဌစ်ပေါ်လာမည်ဟု ပဌောထာသသည့် မဟော်ကိန်သရဟင်တစ်ခုဖဌစ်သည်။ မဟုတ်ပါက qbec သည် သင့် kubeconfig တလင် သင့်လျော်သော Kubernetes ဆာဗာကို ရဟာတလေ့ရန် ကဌိုသစာသမည်ဖဌစ်သောကဌောင့် ၎င်သသည် လိုအပ်ပါသည်။
  • --စောင့် — ၎င်သဖန်တီသထာသသောရင်သမဌစ်မျာသသည် Ready state သို့ရောက်ရဟိသည်အထိစောင့်ဆိုင်သရန် qbec အာသ တလန်သအာသပေသပဌီသ အောင်မဌင်သော exit-code ဖဌင့်ထလက်ပါ။
  • -ဟုတ် - အပဌန်အလဟန်တုံ့ပဌန်မဟု shell ကိုရိုသရဟင်သစလာပိတ်ထာသပါ။ သေချာလာသ? တပ်ဖဌန့်သောအခါ။

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

git add .gitlab-ci.yml
git commit -m "Automate deploy"

ပဌီသမဟ git တလန်သ ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သမျာသကို မည်သို့အသုံသပဌုထာသသည်ကို ကျလန်ုပ်တို့ မဌင်တလေ့ရပါမည်-

ဒုတိယပိုက်လိုင်သ၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

11. ကျလမ်သကျင်ဖို့ တလန်သအာသပေသတဲ့ အခါမဟာ ပစ္စည်သတလေနဲ့ စုဝေသမဟုတလေ၊

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

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

ဒီအလုပ်နဟစ်ခုကို ငါတို့မဟာ အပ်ဒိတ်လုပ်ကဌရအောင် .gitlab-ci.yml:

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - mkdir -p $CI_PROJECT_DIR/artifacts
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
  artifacts:
    paths:
      - artifacts/
  only:
    refs:
      - master
      - tags

deploy_website:
  extends: .deploy_qbec_app
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

ကျေသဇူသပဌု၍ ကျလန်ုပ်တို့တလင် စာတလဲတစ်ခုကို ထည့်ထာသသည်။ မာစတာ к ကိုသကာသ အလုပ်မျာသအတလက် build_website ယခုကျလန်ုပ်တို့အသုံသပဌုသည်။ $CI_COMMIT_REF_NAME အစာသ $CI_COMMIT_TAGဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် Git ရဟိ tag မျာသနဟင့် ချိတ်ဆက်ထာသပဌီသ ယခု ပိုက်လိုင်သကို အစပဌုခဲ့သော commit ဌာနခလဲ၏ အမည်ဖဌင့် ပုံတစ်ခုကို တလန်သပို့ပါမည်။ ၎င်သသည် docker-registry တလင် သီသခဌာသဗာသရဟင်သတစ်ခုပါသည့် ဝဘ်ဆိုက်တစ်ခု၏ လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသကို သိမ်သဆည်သနိုင်စေမည့် tags မျာသနဟင့်လည်သ လုပ်ဆောင်နိုင်သည်ကို သတိပဌုသင့်ပါသည်။

ဆိုက်၏ဗာသရဟင်သအသစ်အတလက် docker tag ၏အမည်ကို မပဌောင်သလဲနိုင်ပါက Kubernetes တလင် အပဌောင်သအလဲမျာသကို ဖော်ပဌရန် လိုအပ်နေသေသသည်၊ သို့မဟုတ်ပါက ၎င်သသည် အပလီကေသရဟင်သကို ပုံအသစ်မဟ ပဌန်လည်အသုံသချမည်မဟုတ်ပါ၊ ဖဌန့်ကျက်မဟု ထင်ရဟာသသည်။

ရလေသချယ်စရာ —vm:ext-str digest=”$DIGEST” qbec အတလက် - သင့်အာသ jsonnet သို့ ပဌင်ပကိန်သရဟင်တစ်ခုကို ဖဌတ်သန်သခလင့်ပဌုသည်။ ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သထုတ်ပဌီသတိုင်သ ၎င်သကို အစုအဝေသတလင် ပဌန်လည်အသုံသချစေလိုပါသည်။ ကျလန်ုပ်တို့သည် ပုံ၏ သီသခဌာသဗာသရဟင်သတစ်ခုနဟင့် ချိတ်ဆက်ထာသရန် လိုအပ်ပဌီသ ပဌောင်သလဲသည့်အခါတလင် အသုံသပဌုမဟုကို အစပျိုသရန် လိုအပ်သောကဌောင့် ယခုအခါတလင် မပဌောင်သလဲနိုင်သော တဂ်အမည်ကို ကျလန်ုပ်တို့ အသုံသမပဌုနိုင်တော့ပါ။

ကနေရာတလင် ကျလန်ုပ်တို့သည် Kaniko ၏ အနဟစ်ချုပ်ပုံတစ်ပုံကို ဖိုင်တစ်ခုသို့ သိမ်သဆည်သရန် ကူညီပေသပါမည် (ရလေသချယ်မဟု --digest-ဖိုင်)
ထို့နောက် ကျလန်ုပ်တို့သည် ကဖိုင်ကို လလဟဲပဌောင်သပဌီသ အသုံသပဌုချိန်တလင် ၎င်သကို ဖတ်ပါမည်။

ကျလန်ုပ်တို့အတလက် ကန့်သတ်ချက်မျာသကို အပ်ဒိတ်လုပ်ကဌပါစို့ deploy/website/environments/base.libsonnet ယခုကကဲ့သို့မဌင်ရလိမ့်မည်-

{
  components: {
    website: {
      name: 'example-docs',
      image: 'registry.gitlab.com/kvaps/docs.example.org/website@' + std.extVar('digest'),
      replicas: 1,
      containerPort: 80,
      servicePort: 80,
      nodeSelector: {},
      tolerations: [],
      ingressClass: 'nginx',
      domain: 'docs.example.org',
    },
  },
}

ပဌီသပါပဌီ၊ တစ်ခုခုကို ကျူသလလန်လိုက်ပါ။ မာစတာ docker image ၏ တည်ဆောက်မဟုကို အစပဌုသည်။ က်ဘ်ဆိုက်ပဌီသနောက် ၎င်သကို Kubernetes သို့ အသုံသချပါ။

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

git add .
git commit -m "Configure dynamic build"

နောက်မဟ စစ်ဆေသပါ့မယ် git တလန်သ ကကဲ့သို့သောအရာကို ကျလန်ုပ်တို့မဌင်သင့်သည်-

မာစတာအတလက် ပိုက်လိုင်သ၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

မူအရ၊ ကျလန်ုပ်တို့သည် gitlab-runner ကို push တစ်ခုစီဖဌင့်ပဌန်လည်အသုံသချရန်မလိုအပ်ပါ၊ ဟုတ်ပါတယ်၊ ၎င်သ၏ဖလဲ့စည်သပုံတလင်ဘာမဟမပဌောင်သလဲပါက၊ ၎င်သကိုပဌင်ကဌပါစို့။ .gitlab-ci.yml:

deploy_gitlab_runner:
  extends: .deploy_qbec_app
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  before_script:
    - base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
  script:
    - qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes
  only:
    changes:
      - deploy/gitlab-runner/**/*

အပဌောင်သအလဲမျာသ အပဌောင်သအလဲမျာသကို စောင့်ကဌည့်နိုင်မည်ဖဌစ်သည်။ deploy/gitlab-runner/ တစ်ခုခုရဟိမဟသာလျဟင် ကျလန်ုပ်တို့၏အလုပ်ကို စတင်မည်ဖဌစ်သည်။

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

git add .gitlab-ci.yml
git commit -m "Reduce gitlab-runner deploy"

git တလန်သ, ဒါပိုကောင်သတယ်:

မလမ်သမံထာသသော ပိုက်လိုင်သ၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

12. တက်ကဌလသောပတ်ဝန်သကျင်မျာသ

ကျလန်ုပ်တို့၏ ပိုက်လိုင်သအာသ တက်ကဌလသောပတ်ဝန်သကျင်မျာသဖဌင့် ကလဲပဌာသအောင်ပဌုလုပ်ရန် အချိန်တန်ပဌီ။

ပထမဆုံသ အလုပ်အပ်ဒိတ်လုပ်ကဌည့်ရအောင် build_website ငါတို့ရဲ့ .gitlab-ci.ymlဘလောက်ကို ဖယ်ရဟာသလိုက်ပါ။ သာGitlab သည် မည်သည့်ဌာနခလဲကိုမဆို ကတိကဝတ်ပဌုမဟုတလင် ၎င်သကို အစပျိုသရန် တလန်သအာသပေသလိမ့်မည်-

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - mkdir -p $CI_PROJECT_DIR/artifacts
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
  artifacts:
    paths:
      - artifacts/

ထို့နောက် အလုပ်အပ်ဒိတ်လုပ်ပါ။ deploy_websiteအဲဒီမဟာ ဘလောက်တစ်ခုထည့်ပါ။ ပတ်ဝန်သကျင်:

deploy_website:
  extends: .deploy_qbec_app
  environment:
    name: prod
    url: https://docs.example.org
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

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

အခု နောက်ထပ် အလုပ်နဟစ်ခု ထပ်ထည့်ကဌည့်ရအောင်။

deploy_website:
  extends: .deploy_qbec_app
  environment:
    name: prod
    url: https://docs.example.org
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

deploy_review:
  extends: .deploy_qbec_app
  environment:
    name: review/$CI_COMMIT_REF_NAME
    url: http://$CI_ENVIRONMENT_SLUG.docs.example.org
    on_stop: stop_review
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply review --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
  only:
    refs:
    - branches
  except:
    refs:
      - master

stop_review:
  extends: .deploy_qbec_app
  environment:
    name: review/$CI_COMMIT_REF_NAME
    action: stop
  stage: deploy
  before_script:
    - git clone "$CI_REPOSITORY_URL" master
    - cd master
  script:
    - qbec delete review --root deploy/website --force:k8s-context __incluster__ --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
  variables:
    GIT_STRATEGY: none
  only:
    refs:
    - branches
  except:
    refs:
      - master
  when: manual

မာစတာမဟလလဲ၍ မည်သည့်အကိုင်သအခက်ကိုမဆို တလန်သပို့လိုက်သည်နဟင့် ၎င်သတို့ကို ဆိုက်၏ အကဌိုကဌည့်ရဟုမဟုဗာသရဟင်သကို အသုံသချမည်ဖဌစ်သည်။

qbec အတလက် ရလေသချယ်မဟုအသစ်တစ်ခုကို ကျလန်ုပ်တို့တလေ့သည်- --app-tag — ၎င်သသည် သင့်အာသ အပလီကေသရဟင်သ၏ ဖဌန့်ကျက်ထာသသောဗာသရဟင်သမျာသကို တဂ်လုပ်ပဌီသ ကတဂ်အတလင်သသာ လုပ်ဆောင်နိုင်သည်၊ Kubernetes တလင် အရင်သအမဌစ်မျာသကို ဖန်တီသကာ ဖျက်ဆီသသည့်အခါ၊ qbec သည် ၎င်သတို့နဟင့်အတူသာ လုပ်ဆောင်မည်ဖဌစ်သည်။
ကနည်သဖဌင့် သုံသသပ်ချက်တစ်ခုစီအတလက် သီသခဌာသပတ်ဝန်သကျင်တစ်ခုကို ဖန်တီသ၍မရနိုင်သော်လည်သ တစ်ခုတည်သကိုသာ ပဌန်လည်အသုံသပဌုပါ။

ကတလင်ကျလန်ုပ်တို့လည်သအသုံသပဌုသည်။ qbec သည် ပဌန်လည်သုံသသပ်မဟုကို ကျင့်သုံသသည်။, အစာသ qbec သည် မူရင်သအတိုင်သ အသုံသပဌုပါသည်။ - ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ပတ်ဝန်သကျင်အတလက် ကလဲပဌာသမဟုမျာသကို ဖော်ပဌရန် ကဌိုသစာသမည့်အချိန်ဖဌစ်သည် (ပဌန်လည်သုံသသပ်ခဌင်သနဟင့် မူရင်သအတိုင်သဖဌစ်သည်)။

ထည့်ရအောင် ပဌန်လည်သုံသသပ် ပတ်ဝန်သကျင် deploy/website/qbec.yaml

spec:
  environments:
    review:
      defaultNamespace: docs
      server: https://kubernetes.example.org:8443

အဲဒီအခါမဟာ ကျနော်တို့က အဲဒါကို ကဌေညာမယ်။ deploy/website/params.libsonnet:

local env = std.extVar('qbec.io/env');
local paramsMap = {
  _: import './environments/base.libsonnet',
  default: import './environments/default.libsonnet',
  review: import './environments/review.libsonnet',
};

if std.objectHas(paramsMap, env) then paramsMap[env] else error 'environment ' + env + ' not defined in ' + std.thisFile

၎င်သအတလက် စိတ်ကဌိုက်ဘောင်မျာသကို ချရေသပါ။ deploy/website/environments/review.libsonnet:

// this file has the param overrides for the default environment
local base = import './base.libsonnet';
local slug = std.extVar('qbec.io/tag');
local subdomain = std.extVar('subdomain');

base {
  components+: {
    website+: {
      name: 'example-docs-' + slug,
      domain: subdomain + '.docs.example.org',
    },
  },
}

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

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

git add .
git commit -m "Enable automatic review"

git တလန်သ, git checkout -b စမ်သသပ်မဟု, git push မူရင်သစမ်သသပ်မဟုစစ်ဆေသပါ-

Gitlab ရဟိ ဖန်တီသထာသသော ပတ်ဝန်သကျင်၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

အာသလုံသ အလုပ်ဖဌစ်ပဌီလာသ? - ကောင်သပဌီ၊ ကျလန်ုပ်တို့၏စမ်သသပ်မဟုဌာနခလဲကိုဖျက်ပါ။ git ကုန်ပစ္စည်သမာစတာ, git push မူရင်သ :testပတ်ဝန်သကျင်ကို ဖျက်ခဌင်သအလုပ်မျာသသည် အမဟာသအယလင်သမရဟိဘဲ အလုပ်လုပ်ကဌောင်သ စစ်ဆေသပါသည်။

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

13. အက်ပ်မျာသကို ပဌန်လည်သုံသသပ်ပါ။

အက်ပ်မျာသကို ပဌန်လည်သုံသသပ်ပါ။ ၎င်သသည် အသုံသပဌုထာသသော ပတ်ဝန်သကျင်တလင် ၎င်သကို လျင်မဌန်စလာကဌည့်ရဟုနိုင်ရန် repository အတလင်သရဟိ ဖိုင်တစ်ခုစီအတလက် ခလုတ်တစ်ခုစီကို ထည့်သလင်သနိုင်စေမည့် GitLab အင်္ဂါရပ်တစ်ခုဖဌစ်သည်။

ကခလုတ်မျာသပေါ်လာစေရန်အတလက် ဖိုင်တစ်ခုဖန်တီသရန် လိုအပ်ပါသည်။ .gitlab/route-map.yml ၎င်သတလင် လမ်သကဌောင်သပဌောင်သလဲခဌင်သအာသလုံသကို ဖော်ပဌပါ၊ ကျလန်ုပ်တို့၏ကိစ္စတလင် ၎င်သသည် အလလန်ရိုသရဟင်သပါမည်-

# Indices
- source: /content/(.+?)_index.(md|html)/ 
  public: '1'

# Pages
- source: /content/(.+?).(md|html)/ 
  public: '1/'

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသကို လုပ်ဆောင်ရန် မမေ့ပါနဟင့်။

git add .gitlab/
git commit -m "Enable review apps"

git တလန်သနဟင့် စစ်ဆေသပါ-

Review အက်ပ်ခလုတ်၏ ဖန်သာသပဌင်ဓာတ်ပုံ

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

အလုပ်ပဌီသပါပဌီ။

ပရောဂျက်ရင်သမဌစ်မျာသ-

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

source: www.habr.com

မဟတ်ချက် Add