မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

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

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

သင့်ကုဒ်ကို ရေသပဌီသသည်နဟင့် သေချာအောင် ပဌုလုပ်ရန် လိုအပ်သည်-

  1. РабПтает။
  2. မင်သလုပ်ဖော်ကိုင်ဖက်တလေ ရေသတဲ့ကုဒ်တလေ အပါအဝင် ဘာမဟ ပျက်မသလာသပါဘူသ။

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

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

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

Avito မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် စဉ်ဆက်မပဌတ် ပေါင်သစည်သမဟုကို အကောင်အထည်ဖော်ပုံ၊ ၎င်သတို့သည် တစ်နေ့လျဟင် 0 မဟ 450 အတလင်သ တည်ဆောက်ပုံ၊ စက်တည်ဆောက်ပုံသည် တစ်နေ့လျဟင် နာရီ 200 တပ်ဆင်ကဌောင်သ Nikolai Nesterov (nnesterov) သည် CI/CD Android အပလီကေသရဟင်သ၏ ဆင့်ကဲပဌောင်သလဲမဟုအာသလုံသတလင် ပါဝင်သူဖဌစ်သည်။

ဇာတ်လမ်သသည် Android command ၏နမူနာကို အခဌေခံထာသသော်လည်သ ချဉ်သကပ်မဟုအမျာသစုကို iOS တလင်လည်သ အသုံသပဌုနိုင်သည်။


တစ်ချိန်က လူတစ်ညသသည် Avito Android အဖလဲ့တလင် အလုပ်လုပ်ခဲ့သည်။ အဓိပ္ပါယ်အာသဖဌင့်၊ သူသည် Continuous Integration မဟ မည်သည့်အရာကိုမျဟ မလိုအပ်ပါ၊ ပေါင်သစည်သရန် မည်သူမျဟ မရဟိပါ။

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

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

Git flow ၏ သဘောတရာသကို လူသိမျာသသည်- ပရောဂျက်တစ်ခုတလင် ဘုံဖလံ့ဖဌိုသတိုသတက်ရေသဌာနခလဲတစ်ခုပါရဟိပဌီသ အင်္ဂါရပ်အသစ်တစ်ခုစီအတလက် developer မျာသသည် သီသခဌာသအကိုင်သအခက်တစ်ခုကို ဖဌတ်တောက်ကာ ၎င်သကို ကုဒ်လုပ်ရန်၊ တလန်သအာသပေသကာ ၎င်သတို့၏ကုဒ်ကို ဖလံ့ဖဌိုသတိုသတက်ရေသဌာနခလဲသို့ ပေါင်သစည်သလိုသောအခါတလင် ဖလင့်ပါ။ တောင်သဆိုချက်ဆလဲ။ အသိပညာမျဟဝေခဌင်သနဟင့် ချဉ်သကပ်နည်သမျာသကို ဆလေသနလေသရန်၊ ကျလန်ုပ်တို့သည် ကုဒ်ပဌန်လည်သုံသသပ်ခဌင်သကို မိတ်ဆက်ပေသခဲ့သည်၊ ဆိုလိုသည်မဟာ လုပ်ဖော်ကိုင်ဖက်မျာသသည် အချင်သချင်သ၏ကုဒ်ကို စစ်ဆေသပဌီသ အတည်ပဌုရပါမည်။

စစ်ဆေသမဟုမျာသ

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

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

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

ကကဲ့သို့ ဇယာသကလက်ဖဌင့် ကိုယ်စာသပဌုနိုင်သည်-

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

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

အချိန်နဟင့်ဆာဗာမျာသ မျာသစလာရဟိသောကဌောင့် ညဘက်တလင် စစ်ဆေသမဟုမျာသ လုပ်ဆောင်ခဌင်သကို ကျလန်ုပ်တို့ အလလန်နဟစ်သက်ပါသည်။ သို့သော် ကံမကောင်သစလာပဲ၊ အင်္ဂါရပ်ကုဒ်ကို ဖလံ့ဖဌိုသလာသောအခါ၊ developer သည် CI တလေ့ရဟိခဲ့သော အမဟာသမျာသကို ပဌင်ဆင်ရန် လဟုံ့ဆော်မဟု နည်သပါသသလာသပါသည်။ မနက်ခင်သမဟာ တလေ့ရတဲ့ အမဟာသအယလင်သတလေအာသလုံသကို ကဌည့်ပဌီသ တစ်နေ့နေ့ တစ်ချိန်ချိန်မဟာ ပဌင်ပေသပါ့မယ်လို့ တလေသနေမိတယ်၊ ခုတော့ Jira မဟာ အရမ်သမိုက်တဲ့ အလုပ်အသစ်တစ်ခု ရဟိနေပဌီဆိုတော့ ခုမဟ စလုပ်ချင်တာ။

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

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

ထိုအချိန်တလင်၊ ကျလန်ုပ်တို့၏တည်ဆောက်မဟုမျာသအာသလုံသသည် အလလန်လျင်မဌန်စလာပဌီသစီသသလာသသောကဌောင့် ARK တည်ဆောက်မဟု၊ Junit စမ်သသပ်မဟုမျာသနဟင့် ကုဒ်အကျုံသဝင်မဟုတလက်ချက်မဟုမျာသကို ပိတ်ဆို့ခဌင်သအဖဌစ် ကျလန်ုပ်တို့တလင် ထည့်သလင်သထာသသည်။ ကျလန်ုပ်တို့သည် ၎င်သကိုဖလင့်ထာသပဌီသ၊ ၎င်သကိုစဉ်သစာသကာ ၎င်သကိုမလိုအပ်ဟု ကျလန်ုပ်တို့ထင်သောကဌောင့် ကုဒ်လလဟမ်သခဌုံမဟုကို စလန့်လလဟတ်ခဲ့သည်။

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

ထို့နောက်တလင်၊ ကျလန်ုပ်တို့သည် ထပ်လောင်သတလေသတောမိတော့သည်၊ ကျလန်ုပ်တို့သည် မဟန်မဟန်ကန်ကန် စစ်ဆေသနေသလော။ ကျလန်ုပ်တို့သည် ဆလဲယူတောင်သဆိုမဟုမျာသတလင် တည်ဆောက်မဟုမျာသကို မဟန်ကန်စလာ လုပ်ဆောင်နေပါသလာသ။

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

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

ဒါကိုလုပ်ဖို့၊ ရိုသရဟင်သတဲ့ bash script ကိုရေသခဲ့တယ်။ premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

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

ပဌဿနာကို ဒေသစံသတ်မဟတ်ရန်၊ အဖဌေရဟာရန်နဟင့် ကဇာတ်ညလဟန်သရေသရန် သုံသရက်ကဌာသည်။

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

ကအရာဖဌစ်ပျက်ပုံဥပမာ

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

ဆော့ဖ်ဝဲရေသသာသသူ နဟစ်ညသသည် အင်္ဂါရပ် A နဟင့် B တလင် တစ်ပဌိုင်နက် စတင်လုပ်ဆောင်နေပါသည်။ အင်္ဂါရပ် A ၏ ဆော့ဖ်ဝဲအင်ဂျင်နီယာသည် ပရောဂျက်တလင် အသုံသမပဌုသော အင်္ဂါရပ်တစ်ခုကို ရဟာဖလေတလေ့ရဟိသည် answer() ကင်သထောက်ကောင်သတစ်ယောက်ကဲ့သို့ ၎င်သကို ဖယ်ရဟာသသည်။ တစ်ချိန်တည်သမဟာပင်၊ feature B ၏ developer သည် ၎င်သ၏ဌာနခလဲရဟိ ကလုပ်ဆောင်ချက်အတလက် ခေါ်ဆိုမဟုအသစ်တစ်ခုကို ပေါင်သထည့်သည်။

ဆော့ဖ်ဝဲရေသသာသသူမျာသသည် ၎င်သတို့၏လုပ်ငန်သကို အပဌီသသတ်ပဌီသ တစ်ချိန်တည်သတလင် တောင်သဆိုချက်တစ်ခုကို ဖလင့်ပါ။ တည်ဆောက်မဟုမျာသကို စတင်လိုက်ပါပဌီ၊ premerge.sh သည် နောက်ဆုံသပေါ် ဖလံ့ဖဌိုသတိုသတက်မဟုအခဌေအနေနဟင့် ပတ်သက်သည့် ဆလဲထုတ်တောင်သဆိုမဟုမျာသကို စစ်ဆေသပေသသည် - စစ်ဆေသမဟုအာသလုံသသည် အစိမ်သရောင်ဖဌစ်သည်။ ထို့နောက်တလင်၊ feature A ၏ဆလဲအာသတောင်သဆိုမဟုကိုပေါင်သစည်သသည်၊ အင်္ဂါရပ် B ၏ဆလဲအာသတောင်သဆိုမဟုကိုပေါင်သစည်သသည်... Boom! ဖလံ့ဖဌိုသဆဲကုဒ်တလင် တည်ရဟိခဌင်သမရဟိသော လုပ်ဆောင်ချက်တစ်ခုသို့ ခေါ်ဆိုမဟုတစ်ခုပါ၀င်သောကဌောင့် တီထလင်လိုက်ခဌင်သဖဌစ်ပါသည်။

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

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

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

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

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

မဖလံဖဌိုသအောင် ဘယ်လိုလုပ်မလဲ။

ပထမ option: develop ကိုမလမ်သမံသည့်အခါဆလဲယူတောင်သဆိုမဟုမျာသအာသလုံသကိုပဌန်လည်တည်ဆောက်ပါ။ ကျလန်ုပ်တို့၏ဥပမာတလင်၊ feature A ပါသော ဆလဲထုတ်မဟုတောင်သဆိုမဟုသည် develop တလင်ပထမဆုံသထည့်သလင်သရန်ဖဌစ်ပါက၊ လုပ်ဆောင်ချက် B ၏ဆလဲအာသတောင်သဆိုမဟုကို ပဌန်လည်တည်ဆောက်မည်ဖဌစ်ပဌီသ၊ ထို့ကဌောင့်၊ စုစည်သမဟုအမဟာသတစ်ခုကဌောင့် စစ်ဆေသမဟုမျာသပျက်ကလက်မည်ဖဌစ်သည်။

၎င်သသည်မည်မျဟကဌာမည်ကိုနာသလည်ရန် PR နဟစ်ခုပါသော ဥပမာတစ်ခုကို သုံသသပ်ကဌည့်ပါ။ ကျလန်ုပ်တို့သည် PR နဟစ်ခုကိုဖလင့်သည်- တည်ဆောက်မဟုနဟစ်ခု၊ စစ်ဆေသမဟုနဟစ်ခုလုပ်ဆောင်သည်။ ပထမ PR ကို ဖလံ့ဖဌိုသတိုသတက်အောင် ပေါင်သစည်သပဌီသနောက် ဒုတိယတစ်ခုကို ပဌန်လည်တည်ဆောက်ရန် လိုအပ်သည်။ စုစုပေါင်သ၊ PR နဟစ်ခုသည် စစ်ဆေသမဟုသုံသကဌိမ် လိုအပ်သည်- 2 + 1 = 3။

မူအရတော့ ကောင်သပါတယ်။ ဒါပေမယ့် ကျလန်တော်တို့ စာရင်သဇယာသတလေကို ကဌည့်လိုက်တော့ ကျလန်တော်တို့အဖလဲ့ရဲ့ ပုံမဟန်အခဌေအနေက 10 ပလင့် PR တလေဖဌစ်ပဌီသ စစ်ဆေသမဟုအရေအတလက်က တိုသတက်မဟုရဲ့ ပေါင်သလဒ်ဖဌစ်ပါတယ်- 10 + 9 + ... + 1 = 55 ။ ဆိုလိုသည်မဟာ 10 ကို လက်ခံရန်၊ PRs မျာသကို 55 ကဌိမ် ပဌန်လည်တည်ဆောက်ရန် လိုအပ်ပါသည်။ ကဒါဇင်မျာသကို လုပ်ဆောင်နေစဉ်တလင် စစ်ဆေသမဟုအာသလုံသသည် ပထမအကဌိမ် အောင်မဌင်သလာသသောအခါ၊ ကဒါဇင်မျာသကို လုပ်ဆောင်နေချိန်တလင် နောက်ထပ်ဆလဲတင်တောင်သဆိုမဟုကို မည်သူမျဟ မဖလင့်သည့်အခါ ၎င်သသည် စံပဌအခဌေအနေတစ်ခုဖဌစ်သည်။

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

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

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

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

ကပလပ်အင်သည် ဆလဲယူတောင်သဆိုမဟု ပေါင်သစည်သခဌင်သ ယန္တရာသကို အစာသထိုသသည်။ အစမဟာ စံဖဌစ်သည်- PR ကိုဖလင့်သည်၊ စည်သဝေသပလဲအာသလုံသကို စတင်သည်၊ ကုဒ်ပဌန်လည်သုံသသပ်ခဌင်သ ပဌီသမဌောက်သည်။ သို့သော် ကုဒ်ပဌန်လည်သုံသသပ်ခဌင်သကို ပဌီသမဌောက်ပဌီသ developer မဟ "merge" ကိုနဟိပ်ရန် ဆုံသဖဌတ်ပဌီသနောက်၊ plugin သည် checks မျာသကို run သည့် develop state ကိုစစ်ဆေသသည်။ တည်ဆောက်မဟုမျာသပဌီသနောက် develop ကို အပ်ဒိတ်လုပ်ပဌီသပါက၊ plugin သည် ထိုကဲ့သို့သော ဆလဲငင်တောင်သဆိုမဟုကို ပင်မဌာနခလဲသို့ ပေါင်သစည်သရန် ခလင့်ပဌုမည်မဟုတ်ပါ။ ၎င်သသည် မကဌာသေသမီက တည်ဆောက်မဟုမျာသ၏ တည်ဆောက်မဟုမျာသကို ရိုသရဟင်သစလာ ပဌန်လည်စတင်မည်ဖဌစ်သည်။

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

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

ကပလပ်အင်ကို အကောင်အထည်မဖော်မီ၊ ဆလဲယူတောင်သဆိုမဟုတစ်ခုလျဟင် ပဌန်လည်သုံသသပ်မဟု 2,7 ကို ပျမ်သမျဟလုပ်ဆောင်ခဲ့သည်။ ပလပ်အင်နဟင့်အတူ 3,6 လလဟင့်တင်မဟုမျာသရဟိခဲ့သည်။ ဒါက ငါတို့နဲ့ သင့်တော်တယ်။

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

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

အသစ်စစ်ဆေသမဟုမျာသ

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

တာသဆီသနိုင်လျဟင် အဘယ်ကဌောင့် အမဟာသလုပ်မိကဌသနည်သ။ အဲဒါကဌောင့် သူတို့က အကောင်အထည်ဖော်တယ်။ static code ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ။. ကျလန်ုပ်တို့သည် Android SDK တလင်ပါဝင်သည့် lint ဖဌင့်စတင်ခဲ့သည်။ သို့သော် ထိုအချိန်တလင် သူသည် Kotlin ကုဒ်ဖဌင့် မည်သို့လုပ်ဆောင်ရမည်ကို လုံသဝမသိခဲ့ဘဲ၊ ကျလန်ုပ်တို့တလင် Kotlin ဖဌင့် ရေသသာသထာသသော လျဟောက်လလဟာ၏ 75% ရဟိနေပဌီဖဌစ်သည်။ ထို့ကဌောင့် ပိုသမလဟာသမျာသကို ပိုသမလဟာသမျာသတလင် ထည့်သလင်သထာသသည်။ Android Studio စစ်ဆေသမဟုမျာသ။

ဒါကိုလုပ်ဖို့၊ ကျလန်ုပ်တို့သည် လဟည့်စာသခဌင်သမျာသစလာကို ပဌုလုပ်ရပါသည်- Android Studio ကိုယူ၍ ၎င်သကို Docker တလင် ထုပ်ပိုသပဌီသ CI ပေါ်တလင် virtual မော်နီတာတစ်ခုဖဌင့် ဖလင့်ထာသသောကဌောင့် ၎င်သသည် တကယ့်လက်ပ်တော့တစ်လုံသပေါ်တလင် လည်ပတ်နေသည်ဟု ထင်စေသည်။ ဒါပေမယ့် အလုပ်လုပ်တယ်။

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

သို့သော် ကိရိယာစမ်သသပ်မဟုမျာသနဟင့် ဖန်သာသပဌင်ဓာတ်ပုံစမ်သသပ်မဟုမျာသကို စက်ပစ္စည်သမျာသတလင် လုပ်ဆောင်ရန် လိုအပ်သည်- emulators မျာသပေါ်တလင် သို့မဟုတ် တကယ့်ကိရိယာမျာသတလင် ဖဌစ်သည်။ စစ်ဆေသမဟုမျာသစလာရဟိပဌီသ ၎င်သတို့ကို မကဌာခဏလုပ်ဆောင်သည်ဟု ယူဆပါက လယ်ယာတစ်ခုလုံသ လိုအပ်ပါသည်။ သင့်ကိုယ်ပိုင်ခဌံကို စတင်ခဌင်သသည် လုပ်သာသအင်အာသ အလလန်အကျလံဖဌစ်သောကဌောင့် အဆင်သင့်လုပ်ထာသသော ရလေသချယ်မဟုတစ်ခု - Firebase Test Lab ကို တလေ့ရဟိခဲ့သည်။

Firebase စမ်သသပ်ခန်သ

Firebase သည် Google ထုတ်ကုန်တစ်ခုဖဌစ်သောကဌောင့် ၎င်သကိုရလေသချယ်ခဲ့ခဌင်သမဟာ ယုံကဌည်စိတ်ချရပဌီသ သေဆုံသရန်မဖဌစ်နိုင်ဟု ဆိုလိုခဌင်သဖဌစ်သည်။ ဈေသနဟုန်သမျာသသည် ကျိုသကဌောင်သဆီလျော်သည်- စစ်မဟန်သောကိရိယာ၏လည်ပတ်မဟုတစ်နာရီလျဟင် $5၊ emulator တစ်ခု၏လည်ပတ်မဟုတစ်နာရီလျဟင် $1။

Firebase Test Lab ကို ကျလန်ုပ်တို့၏ CI တလင် အကောင်အထည်ဖော်ရန် ခန့်မဟန်သခဌေအာသဖဌင့် သုံသပတ်ခန့် အချိန်ယူရပါသည်။

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

Docker + Python + bash

ကျလန်ုပ်တို့သည် Docker ကိုယူ၍ ၎င်သတလင်ထည့်သလင်သထာသသော emulators မျာသကို Python တလင် ရိုသရဟင်သသောပရိုဂရမ်တစ်ခုရေသခဲ့သည်၊ မဟန်ကန်သည့်အချိန်တလင် လိုအပ်သော emulator အရေအတလက်ကို မဟန်ကန်သောဗာသရဟင်သတလင်စတင်ပဌီသ လိုအပ်သည့်အခါတလင် ၎င်သတို့ကိုရပ်တန့်စေသည်။ ပဌီသတော့ bash scripts နဟစ်ခု - အဲဒါတလေမပါဘဲ ငါတို့ဘယ်မဟာရဟိမလဲ။

ကျလန်ုပ်တို့၏ကိုယ်ပိုင်စမ်သသပ်မဟုပတ်ဝန်သကျင်ကိုဖန်တီသရန် ငါသပတ်ကဌာသည်။

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

  • ARK စည်သဝေသပလဲ;
  • Junit စမ်သသပ်မဟုမျာသ;
  • ပျာသ၊
  • Android Studio စစ်ဆေသမဟုမျာသ၊
  • တူရိယာစမ်သသပ်မဟုမျာသ;
  • Screenshot စမ်သသပ်မဟုမျာသ။

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

ဘယ်လောက်ကဌာလဲ? ကျလန်ုပ်တို့သည် Bitbucket နဟင့် TeamCity မဟ ဒေတာမျာသကို ခလဲခဌမ်သစိတ်ဖဌာမဟုစနစ်သို့ အပ်လုဒ်လုပ်ကာ ၎င်သကို သဘောပေါက်ပါသည်။ ပျမ်သမျဟစောင့်ဆိုင်သချိန် 45 မိနစ်. ဆိုလိုသည်မဟာ developer သည် ဆလဲယူတောင်သဆိုမဟုကိုဖလင့်သောအခါ တည်ဆောက်မဟုရလဒ်မျာသအတလက် ပျမ်သမျဟ 45 မိနစ်စောင့်သည်။ ကျလန်တော့်အမဌင်အရတော့ ဒါက အမျာသကဌီသပဲ၊ မင်သအဲဒီလိုလုပ်လို့မရဘူသ။

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

အရဟိန်မဌဟင့်လိုက်ရအောင်

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

ကဌာမဌင့်လလန်သသော စစ်ဆေသမဟုမျာသကို ဖယ်ရဟာသခဌင်သ။

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

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

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

ကအမျိုသအစာသခလဲခဌာသမဟုအပေါ်အခဌေခံ၍ ကျလန်ုပ်တို့သည် စစ်ဆေသမဟုစာရင်သတစ်ခုလုံသကို တုန်လဟုပ်စေပါသည်။ လင်သကိုဖဌတ်လိုက်သည်။ ပရောဂျက်တလင် ပဌဿနာမည်မျဟရဟိသည်ကို အစီရင်ခံစာထုတ်နိုင်ရန် တစ်ညလုံသ ရလဟေ့ဆိုင်သခဲ့သည်။ နည်သပညာဆိုင်ရာကဌလေသမဌီမျာသနဟင့် သီသခဌာသစီလုပ်ဆောင်ရန် သဘောတူညီခဲ့ကဌသည်။ Android Studio စစ်ဆေသမဟုမျာသကို လုံသဝ စလန့်လလဟတ်လိုက်ပါပဌီ။. စစ်ဆေသမဟုမျာသ လုပ်ဆောင်ရန်အတလက် Docker ရဟိ Android Studio သည် စိတ်ဝင်စာသဖလယ်ကောင်သသော်လည်သ ပံ့ပိုသမဟုတလင် အခက်အခဲမျာသစလာ ဖဌစ်စေသည်။ Android Studio ဗာသရဟင်သမျာသအတလက် အပ်ဒိတ်မဟန်သမျဟသည် နာသမလည်နိုင်သော ချို့ယလင်သချက်မျာသနဟင့် ရုန်သကန်နေရခဌင်သကို ဆိုလိုသည်။ ဒစ်ဂျစ်တိုက်သည် အလလန်တည်ငဌိမ်မဟုမရဟိ၍ မဟာသယလင်သသောအပဌုသဘောမျာသရဟိနေသောကဌောင့် ဖန်သာသပဌင်ဓာတ်ပုံစစ်ဆေသမဟုမျာသကို ပံ့ပိုသရန်လည်သ ခက်ခဲပါသည်။ ဖန်သာသပဌင်ဓာတ်ပုံစစ်ဆေသမဟုမျာသကို စစ်ဆေသစာရင်သမဟ ဖယ်ရဟာသလိုက်ပါပဌီ။.

ရလဒ်အနေဖဌင့်၊

  • ARK စည်သဝေသပလဲ;
  • Junit စမ်သသပ်မဟုမျာသ;
  • တူရိယာစမ်သသပ်မဟုမျာသ။

Gradle အဝေသကက်ရဟ်

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

ကျလန်ုပ်တို့၏လျဟောက်လလဟာကို gradle modules 150 ခန့်ခလဲပဌီသဖဌစ်သည်။ Gradle အဝေသထိန်သ ကက်ရဟ်သည် မျာသသောအာသဖဌင့် ကကိစ္စတလင် ကောင်သမလန်စလာ အလုပ်လုပ်သောကဌောင့် ၎င်သကို စမ်သကဌည့်ရန် ဆုံသဖဌတ်ခဲ့သည်။

Gradle remote cache သည် တစ်ခုချင်သစီ modules တစ်ခုစီတလင် အလုပ်တစ်ခုစီအတလက် artifact မျာသကို တည်ဆောက်နိုင်သော ဝန်ဆောင်မဟုတစ်ခုဖဌစ်သည်။ Gradle သည် ကုဒ်ကို အမဟန်တကယ် စုစည်သမည့်အစာသ အဝေသထိန်သ ကက်ရဟ်ကို ခေါက်ရန်နဟင့် တစ်စုံတစ်ယောက်သည် ကလုပ်ငန်သကို လုပ်ဆောင်ပဌီသပဌီလာသဟု မေသရန် HTTP ကို ​​အသုံသပဌုသည်။ ဟုတ်ရင် ရလဒ်ကို ဒေါင်သလုဒ်လုပ်ရုံပါပဲ။

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

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

အောက်တလင် cache misses ဂရပ်ဖစ်သည်။

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

အစပိုင်သတလင်၊ ကက်ရဟ်လလဲချော်မဟုရာခိုင်နဟုန်သသည် ၆၅ ခန့်ရဟိသည်။ သုံသပတ်ကဌာပဌီသနောက်၊ ကျလန်ုပ်တို့သည် ကတန်ဖိုသကို 65% အထိ တိုသမဌဟင့်နိုင်ခဲ့သည်။ Gradle သည် ကက်ရဟ်ကိုလလတ်သလာသသောကဌောင့် Android အပလီကေသရဟင်သမဟစုဆောင်သသည့်အလုပ်မျာသသည် ထူသဆန်သသောအကူသအပဌောင်သမဟီခိုမဟုမျာသရဟိသည်ကိုတလေ့ရဟိခဲ့ရသည်။

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

သက်ရောက်မဟုခလဲခဌမ်သစိတ်ဖဌာ

တောင်သဆိုချက်တစ်ခုတလင်၊ ကျလန်ုပ်တို့သည် git diff ကိုစုဆောင်သပဌီသ ပဌုပဌင်ထာသသော Gradle modules ကိုရဟာပါ။

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

ပဌောင်သလဲထာသသော module မျာသနဟင့် ၎င်သတို့အပေါ် မူတည်သော module အာသလုံသကို စစ်ဆေသသော instrumentation tests မျာသကိုသာ run ခဌင်သသည် အဓိပ္ပါယ်ရဟိပေသည်။ အိမ်နီသနာသချင်သ module မျာသအတလက် စမ်သသပ်မဟုမျာသ လုပ်ဆောင်ရာတလင် အမဟတ်မရဟိပါ- ထိုနေရာတလင် ကုဒ်သည် ပဌောင်သလဲ၍ ဘာမဟမကလဲနိုင်ပါ။

ကိရိယာတန်ဆာပလာစစ်ဆေသမဟုမျာသသည် ရိုသရဟင်သခဌင်သမရဟိပါ၊ အဘယ်ကဌောင့်ဆိုသော် ၎င်သတို့သည် ထိပ်တန်သအဆင့် အပလီကေသရဟင်သ module တလင် တည်ရဟိနေရပါမည်။ စမ်သသပ်မဟုတစ်ခုစီတလင် မည်သည့် module တစ်ခုစီပါရဟိသည်ကို နာသလည်ရန် bytecode ခလဲခဌမ်သစိတ်ဖဌာမဟုဖဌင့် heuristics ကို အသုံသပဌုခဲ့သည်။

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

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

ယခုမူ developer မျာသသည် မည်သည့် build မျာသကို စတင်လုပ်ဆောင်နေသည်၊ မဟတ်တမ်သကို မည်သည့်နေရာတလင် မဌင်ရမည်၊ အဘယ်ကဌောင့် အနီရောင်ဖဌစ်သည်၊ စမ်သသပ်မဟု မအောင်မဌင်သည့် စသည်ဖဌင့် နာသမလည်ကဌောင်သ developer မျာသက စတင်တိုင်ကဌာသလာကဌသည်။

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

တုံ့ပဌန်ချက်နဟင့်အတူ ပဌဿနာမျာသသည် ဖလံ့ဖဌိုသတိုသတက်မဟုကို နဟေသကလေသစေသောကဌောင့် PR တစ်ခုစီ၏ အသေသစိတ်အချက်အလက်မျာသကို ရဟင်သလင်သပဌီသ တတ်နိုင်သမျဟ တည်ဆောက်ရန် ကျလန်ုပ်တို့ ကဌိုသစာသခဲ့သည်။ ကျလန်ုပ်တို့သည် မည်သည့်တည်ဆောက်မဟုမဟ မအောင်မဌင်ခဲ့ကဌောင်သ၊ အဘယ်ကဌောင့်ဆိုသော် PR သို့ Bitbucket တလင် မဟတ်ချက်မျာသဖဌင့် စတင်ခဲ့ပဌီသ Slack တလင် ပစ်မဟတ်ထာသသော စာတိုမျာသကို ရေသသာသခဲ့သည်။ အဆုံသတလင်၊ ကျလန်ုပ်တို့သည် လက်ရဟိလုပ်ဆောင်နေသည့် တည်ဆောက်မဟုမျာသနဟင့် ၎င်သတို့၏အခဌေအနေ- တန်သစီနေခဌင်သ၊ လည်ပတ်နေခဌင်သ၊ ပျက်သလာသခဌင်သ သို့မဟုတ် ပဌီသစီသမဟုစာရင်သနဟင့်အတူ စာမျက်နဟာအတလက် PR ဒက်ရဟ်ဘုတ်တစ်ခု ဖန်တီသခဲ့သည်။ တည်ဆောက်မဟုကို နဟိပ်ပဌီသ ၎င်သ၏မဟတ်တမ်သသို့ သင်ရောက်ရဟိနိုင်သည်။

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

အသေသစိတ်တုံ့ပဌန်ချက်အတလက် ခဌောက်ပတ်ကဌာ အသုံသပဌုခဲ့သည်။

အစီအစဉ်မျာသ

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

ထို့အပဌင် အခဌာသသော အစီအစဉ်မျာသလည်သ ရဟိသေသသည်။

  • Lint ပဌန်သလာသပါ။ (အခဌာသ static analysis)။ ကျလန်တော်တို့က ဒီညသတည်ချက်ကို လုပ်ဆောင်နေပဌီ။
  • PR blocker တလင် အရာအာသလုံသကို လုပ်ဆောင်ပါ။ အဆုံသမဟ အဆုံသ စမ်သသပ်မဟုမျာသ SDK ဗာသရဟင်သအာသလုံသတလင်။

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

သိကောင်သစရာမျာသ

အကဌံဉာဏ်တစ်ခုလောက်သာ ပေသနိုင်ရင် ဒါက ဒီလိုဖဌစ်လိမ့်မယ်။

ကျေသဇူသပဌု၍ shell scripts မျာသကို သတိထာသပါ။

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

၎င်သသည် ကျလန်ုပ်တို့၏တည်ဆောက်စက်မျာသတလင် ရိုသရဟင်သသော ဇာတ်ညလဟန်သမျာသဖဌင့် စတင်ခဲ့သည်-

#!/usr/bin/env bash
./gradlew assembleDebug

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

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

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

အဘယ်အရာကို အစာသထိုသနိုင်သနည်သ။

  • မည်သည့် scripting language ကိုမဆို။ သို့ စာရေသပါ။ Python သို့မဟုတ် Kotlin Script scripts မဟုတ်ဘဲ programming ကဌောင့် ပိုအဆင်ပဌေပါတယ်။
  • သို့မဟုတ် ပုံစံတလင် တည်ဆောက်ထာသသော လော့ဂျစ်အာသလုံသကို ဖော်ပဌပါ။ စိတ်ကဌိုက် အဆင့်လုပ်စရာမျာသ သင့်ပရောဂျက်အတလက်။

ကျလန်ုပ်တို့သည် ဒုတိယရလေသချယ်မဟုကို ရလေသချယ်ရန် ဆုံသဖဌတ်ခဲ့ပဌီသ ယခုအခါတလင် ကျလန်ုပ်တို့သည် bash script မျာသအာသလုံသကို စနစ်တကျ ဖျက်ကာ စိတ်ကဌိုက် gradle လုပ်ဆောင်စရာမျာသစလာကို ရေသသာသနေပါသည်။

အကဌံပဌုချက် # 2- အခဌေခံအဆောက်အညမျာသကို ကုဒ်တလင် သိမ်သဆည်သပါ။

Jenkins သို့မဟုတ် TeamCity စသည်တို့၏ UI အင်တာဖေ့စ်တလင် ဆက်တိုက်ပေါင်သစည်သခဌင်သဆက်တင်ကို မသိမ်သဆည်သထာသသော်လည်သ ပရောဂျက်သိုလဟောင်မဟုတလင် တိုက်ရိုက်စာသာသဖိုင်မျာသပုံစံဖဌင့် သိမ်သဆည်သသည့်အခါ အဆင်ပဌေသည်။ ၎င်သသည် versionability ကိုပေသသည်။ အခဌာသဌာနခလဲတလင် ကုဒ်ကို ပဌန်သိမ်သရန် သို့မဟုတ် ကုဒ်ကို တည်ဆောက်ရန် ခက်ခဲမည်မဟုတ်ပါ။

Script မျာသကို ပရောဂျက်တစ်ခုတလင် သိမ်သဆည်သနိုင်သည်။ ပတ်ဝန်သကျင်နဲ့ ဘာလုပ်ရမလဲ။

အကဌံပဌုချက် # 3- Docker သည် ပတ်ဝန်သကျင်ကို ကူညီနိုင်သည်။

၎င်သသည် Android developer မျာသအာသ သေချာပေါက် ကူညီပေသလိမ့်မည်၊ iOS တလင် တစ်ခုမျဟ မရဟိသေသပါ၊ ကံမကောင်သပါ။

ကသည်မဟာ jdk နဟင့် android-sdk ပါရဟိသော ရိုသရဟင်သသော docker ဖိုင်တစ်ခု၏ ဥပမာတစ်ခုဖဌစ်သည်။

FROM openjdk:8

ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" 
    ANDROID_HOME="/usr/local/android-sdk" 
    ANDROID_VERSION=26 
    ANDROID_BUILD_TOOLS_VERSION=26.0.2

# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android 
    && cd "$ANDROID_HOME" 
    && curl -o sdk.zip $SDK_URL 
    && unzip sdk.zip 
    && rm sdk.zip 
    && yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses

# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" 
    "platforms;android-${ANDROID_VERSION}" 
    "platform-tools"

RUN mkdir /application
WORKDIR /application

ဒီ Docker ဖိုင်ကိုရေသပဌီသ (လျဟို့ဝဟက်ချက်တစ်ခုပဌောပဌမယ်၊ ရေသစရာမလိုပေမယ့် GitHub က အဆင်သင့်လုပ်ထာသတဲ့ ဆလဲထုတ်လိုက်ရုံပါပဲ) နဲ့ ပုံကို စုစည်သလိုက်တာနဲ့ သင် application ကိုတည်ဆောက်နိုင်တဲ့ virtual machine တစ်ခုကို သင်ရရဟိမဟာဖဌစ်ပါတယ်။ Junit စမ်သသပ်မဟုမျာသကို လုပ်ဆောင်ပါ။

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

အကဌံပဌုချက် နံပါတ် 4- စစ်ဆေသခဌင်သမျာသသည် စစ်ဆေသခဌင်သအတလက်မဟုတ်ဘဲ လူမျာသအတလက် လုပ်ဆောင်ခဌင်သဖဌစ်ကဌောင်သ မမေ့ပါနဟင့်။

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

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

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

အကဌံပဌုချက် #6- အဆင်သင့်လုပ်ထာသသော ကိရိယာမျာသကို အသုံသပဌုပါ။

ယခု Cloud CI ကို ပံ့ပိုသပေသသော ကုမ္ပဏီမျာသစလာရဟိသည်။

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

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

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

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

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

မိုဘိုင်သဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့တလင် CI ၏ဆင့်ကဲဖဌစ်စဉ်

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

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

  • Automation က ဈေသကဌီသတယ်။ အလုပ်ချိန်ဇယာသကို မဟတ်ထာသပါ။
  • automation နဲ့ပတ်သက်လာရင် လူတလေက အမဟာသတလေလုပ်ကဌတယ်။
  • တစ်ခါတရံတလင် အရာအာသလုံသသည် ထိုနည်သအတိုင်သ လုပ်ဆောင်သောကဌောင့် အလိုအလျောက်ပဌန်လုပ်ရန် အလလန်ပျင်သသည်။ အဘယ်ကဌောင့် အခဌာသအရာမျာသကို တိုသတက်စေသနည်သ၊ အဘယ်ကဌောင့် ကအဆက်မပဌတ် ပေါင်သစည်သခဌင်သ

ဒါပေမယ့် ကျလန်တော့်မဟာ စာရင်သဇယာသတလေရဟိတယ်- စည်သဝေသပလဲတလေရဲ့ 20% မဟာ အမဟာသအယလင်သတလေ တလေ့တယ်။ ကျလန်ုပ်တို့၏ developer မျာသသည် ကုဒ်ကို ညံ့ဖျင်သစလာ ရေသသာသခဌင်သကဌောင့် မဟုတ်ပါ။ အဘယ်ကဌောင့်ဆိုသော် developer မျာသသည် အမဟာသအယလင်သတစ်ခုခုလုပ်မိပါက၊ ၎င်သသည် ဖလံ့ဖဌိုသတိုသတက်မဟုတလင် ပဌီသဆုံသမည်မဟုတ်ကဌောင်သ၊ ၎င်သကို အလိုအလျောက်စစ်ဆေသမဟုမျာသဖဌင့် ဖမ်သမိလိမ့်မည်ဟု ယုံကဌည်သောကဌောင့်ဖဌစ်သည်။ ထို့ကဌောင့်၊ developer မျာသသည် ဒေသအလိုက် တစ်ခုခုကို လုပ်ဆောင်ခဌင်သနဟင့် စမ်သသပ်ခဌင်သထက် ကုဒ်နဟင့် စိတ်ဝင်စာသဖလယ်အရာမျာသကို ရေသသာသခဌင်သထက် အချိန်ပိုပေသနိုင်သည်။

စဉ်ဆက်မပဌတ် ပေါင်သစည်သခဌင်သကို လေ့ကျင့်ပါ။ ဒါပေမယ့် ထိန်သညဟိပေသတယ်။

စကာသမစပ်၊ Nikolai Nesterov သည် သူ့ကိုယ်သူ ကောင်သမလန်သော အစီရင်ခံစာမျာသကို ပေသရုံသာမက ပရိုဂရမ် ကော်မတီ၏ အဖလဲ့ဝင်လည်သ ဖဌစ်သည်။ AppsConf သင့်အတလက် အဓိပ္ပါယ်ရဟိသော မိန့်ခလန်သမျာသကို အခဌာသသူမျာသအာသ ကူညီပဌင်ဆင်ပေသပါသည်။ လာမည့်ကလန်ဖရင့်အစီအစဉ်၏ ပဌီသပဌည့်စုံမဟုနဟင့် အသုံသဝင်မဟုကို ခေါင်သစဉ်မျာသဖဌင့် အကဲဖဌတ်နိုင်ပါသည်။ အချိန်ဇယာသ. အသေသစိတ်အချက်အလက်မျာသအတလက် ဧပဌီလ 22-23 ရက်နေ့ထုတ် Infospace သို့ လာပါ။

source: www.habr.com

မဟတ်ချက် Add