CI/CD ምንድን ነው? Continuous Integration እና Delivery በቀላል ማብራሪያ
CI/CD ኮድ እያንዳንዱ ለውጥ በራስ-ሰር የሚገነባበት፣ የሚፈተንበትና — ካለፈ — ለመልቀቅ የሚዘጋጅ ወይም የሚለቀቅበት የሶፍትዌር አቀራረብ ነው። CI (continuous integration) ማለት ለውጦች ብዙ ጊዜ ይጣመራሉ እና በእያንዳንዱ ጊዜ በራስ-ሰር ፈተናዎች ይፈተሻሉ ማለት ነው። CD (continuous delivery ወይም deployment) ማለት ያለፉት ለውጦች በትንሽ ወይም ያለ በእጅ ስራ ታሽገው ወደ ተጠቃሚዎችዎ ይገፋሉ ማለት ነው።
ነጥቡ ቀላል ነው፦ ስህተቶችን ከተፈጸሙ በደቂቃዎች ውስጥ ይያዙ፤ ደንበኛ ሳያገኛቸው ሳምንታት ከመጠበቅ።
በAI ሲገነቡ CI/CD ለምን አስፈላጊ ነው
AI መገንቢያዎች የኮድ ለውጦችን በፍጥነት ያደርጋሉ። አንድ ጥያቄ አሥር ፋይሎችን ሊነካ ይችላል። ይህ ፍጥነት እጅግ ጥሩ ነው፤ ነገር ግን የcheckout ገጽ ለውጥ በጸጥታ የlogin ገጽን ሲሰብረው ማንም ተጠቃሚ ኢሜይል እስኪልክልዎ ድረስ ሳይታወቅ ሊቆይ ይችላል።
CI/CD ለዚህ በትክክል መረብ ነው። እያንዳንዱ ለውጥ ጥሩ ነው ብሎ ከማመን ይልቅ pipeline ተመሳሳይ ፍተሻዎችን በእያንዳንዱ ጊዜ ያካሂዳል፦
- መተግበሪያው አሁንም ያለ ስህተት ይገነባል?
- በራስ-ሰር የሚደረጉ ፈተናዎች አሁንም ያልፋሉ?
- ኮዱ የፕሮጀክቱን ህጎች ይከተላል (types፣ formatting፣ የደህንነት ፍተሻዎች)?
ማንኛውም ፍተሻ ቢወድቅ ለውጡ ተጠቃሚዎች ላይ ከመድረሱ በፊት ይቆማል። ኮድዎ በፈጠነ ቁጥር የማይደክምና ደረጃ የማይዘልል ፍተሻ ይበልጥ ዋጋ ያለው ይሆናል።
ዕለታዊ ምሳሌ
በየማለዳው ዳቦ ለሱቆች የሚሸጥ ዳቦ ቤት አስቡ።
- CI/CD ከሌለ እያንዳንዱ ዳቦ ጋጋሪ ለሳምንት የራሱን የምግብ አዘገጃጀት ያስተካክላል፣ ከዚያ ዓርብ ማታ ሁሉም አንድ ላይ ያጣምሩታል እና ዳቦው እንደሚነሳ ተስፋ ያደርጋሉ። ካልነሳ ማንም የማን ለውጥ እንደሆነ አያውቅም።
- CI ጋር እያንዳንዱ ትንሽ የአዘገጃጀት ለውጥ ወዲያውኑ ወደ ፈተና ዳቦ ተጋግሮ ይፈተሻል — ጣዕም፣ ክብደት፣ ቅርጽ። መጥፎ ለውጥ በዚያው ቀን ይያዛል፤ የትኛው እንደነበረ በትክክል ያውቃሉ።
- CD ጋር ፍተሻውን ያለፉ ዳቦዎች ቀጥታ ወደ ማድረስ መኪናው ይሄዳሉ፤ በእያንዳንዱ ጊዜ በተመሳሳይ መንገድ ታሽገውና ተለጥፈው፣ ሰው ጠዋት 5 ሰዓት ሳጥን በእጁ ከመሙላት ይልቅ።
ፍተሻው ጋጋሪዎቹን የተሻሉ አያደርጋቸውም። ስህተቶቻቸውን ርካሽ ያደርገዋል።
የCI/CD pipeline እንዴት ይሠራል
Pipeline አንድ ነገር ሲፈጠር — ብዙውን ጊዜ አንድ ሰው ኮድ እንደ GitHub ወዳለ repository ሲገፋ — በCI/CD አገልግሎት በራስ-ሰር የሚሠራ የእርምጃዎች ዝርዝር ነው። የተለመደ pipeline እንደዚህ ይመስላል፦
| እርምጃ | ምን ይሆናል | ምን ይይዛል |
|---|---|---|
| 1. Trigger | ኮድ ይገፋል ወይም pull request ይከፈታል | — |
| 2. Install | አዲስ ማሽን ኮዱንና ጥገኞቹን ያወርዳል | የጎደሉ ወይም የተበላሹ ጥቅሎች |
| 3. Build | መተግበሪያው ይተረጎማል ወይም ይታሸጋል | የsyntax እና type ስህተቶች፣ የተበላሹ imports |
| 4. Test | በራስ-ሰር ፈተናዎች ይሠራሉ | ከአሁን በኋላ የማይሠሩ ባህሪያት |
| 5. Checks | Linting፣ formatting፣ የደህንነት ቅኝቶች | የስታይል ችግሮች፣ የታወቁ ተጋላጭ ጥቅሎች፣ የወጡ ቁልፎች |
| 6. Deploy to staging | መተግበሪያው ወደ ፕሮዳክሽን ቅጂ ይሄዳል | በእውነተኛ አካባቢ ብቻ የሚታዩ ችግሮች |
| 7. Deploy to production | መተግበሪያው በራስ-ሰር ወይም ከማጽደቅ በኋላ ቀጥታ ይሄዳል | — |
እያንዳንዱ እርምጃ በንጹህ ማሽን ላይ ይሠራል፣ በማንም ላፕቶፕ ላይ አይደለም፤ ስለዚህ «በእኔ ኮምፒዩተር ይሠራል» ሰበብ መሆኑ ያቆማል። እርምጃ ቢወድቅ pipeline ይቆማል እና ለውጡን ላደረገው ሰው ይነግራል።
እርምጃዎቹ ከኮዱ ጋር በሚኖር የውቅር ፋይል ውስጥ ይገለጻሉ። ለምሳሌ በGitHub Actions ይህ በrepositoryው .github/workflows አቃፊ ውስጥ ያለ YAML ፋይል ነው።
Continuous delivery ከcontinuous deployment ጋር
«CD» ግልጽ ያልሆነ ነው፤ ሰዎች በሁለት መንገድ ይጠቀሙበታል፦
| Continuous delivery | Continuous deployment | |
|---|---|---|
| ፈተናዎች በራስ-ሰር ይሠራሉ | አዎ | አዎ |
| መልቀቂያው በራስ-ሰር ይታሸጋል | አዎ | አዎ |
| በራስ-ሰር ቀጥታ ይሄዳል | አይ — ሰው «release» ጠቅ ያደርጋል | አዎ — ያለፈ እያንዳንዱ ለውጥ ይላካል |
| ለማን ይጠቅማል | ለአብዛኞቹ ትናንሽ ቡድኖች፣ ክፍያ ለሚከፍሉ ተጠቃሚዎች ያሉት መተግበሪያዎች | ጠንካራ የፈተና ሽፋንና ክትትል ላላቸው ቡድኖች |
Continuous deployment ፈተናዎቹ ጥሩ ከሆኑ ብቻ በደንብ ይሠራል። ፈተናዎችዎ checkoutን ካልሸፈኑ፣ continuous deployment የተበላሸ checkout በደስታ ይልካል።
ምሳሌ፦ pipeline ያለው የቦታ ማስያዣ መተግበሪያ
የሳሎን ቦታ ማስያዣ መተግበሪያ አለዎት እንበል፤ ኮዱ በGitHub repository ውስጥ ነው። AI መገንቢያን «ለመጀመሪያ ጊዜ ለሚመጡ ደንበኞች የ10% ቅናሽ ጨምር» ብለው ይጠይቃሉ።
- ለውጡ ወደ አዲስ branch ይገፋል እና pull request ይከፈታል።
- Pipelineው ይጀምራል። ፓኬጆችን ይጭናል እና መተግበሪያውን ይገነባል — ይህ ያልፋል።
- ፈተናዎችን ያካሂዳል። አንድ ፈተና፣ «ተመላሽ ደንበኛ ሙሉ ዋጋ ይከፍላል»፣ ይወድቃል፦ ቅናሹ ለሁሉም እየተተገበረ ነው።
- Pull requestው ቀይ መስቀል ያሳያል። ለውጡ ሊዋሃድ አይችልም።
- AIው እንዲያስተካክል ይጠይቃሉ። ማስተካከያ ይገፋል፤ pipelineው ዳግም ይሠራል እና ሁሉም ያልፋል።
- ለውጡ ይዋሃዳል። Pipelineው ወደ staging አካባቢ ያሰማራዋል፤ እዚያም የሙከራ ቦታ ማስያዝ ይሞክራሉ።
- ያጸድቃሉ፤ ወደ production ይሰማራል።
Pipeline ከሌለ፣ ደረጃ 3 በደንበኞችዎ ኪስ ውስጥ ይከሰት ነበር።
ቁልፍ ቃላት
| ቃል | ትርጉም |
|---|---|
| Pipeline | በእያንዳንዱ ለውጥ የሚሠራ የእርምጃዎች በራስ-ሰር ቅደም ተከተል። |
| Build | ምንጭ ኮድን ማስኬድ ወደሚቻል ነገር መቀየር። |
| Automated test | ሌላ ኮድ የሚገባውን እንደሚያደርግ የሚፈትሽ ኮድ። |
| Pull request (PR) | ሌሎች (እና pipelineው) ከመዋሀዱ በፊት የሚገመግሙት የቀረበ ለውጥ። GitHub ምንድን ነው ይመልከቱ። |
| Branch | የተለየ የለውጥ መስመር፤ ስለዚህ ያልተጠናቀቀ ሥራ ዋናውን ኮድ እንዳይነካ። |
| Staging | ለውጦች ተጠቃሚዎች ከማየታቸው በፊት ለመፈተሽ፣ production የሚመስል የግል ቅጂ። |
| Production | ተጠቃሚዎችዎ የሚጠቀሙበት የቀጥታ መተግበሪያ። |
| Rollback | መልቀቂያ ሲበላሽ ወደ ቀዳሚው የሠራ ስሪት መመለስ። |
| Green / red build | pipeline ያለፈ / የወደቀ ሩጫ። |
የተለመዱ የተሳሳቱ ግንዛቤዎች
- «CI/CD ማለት መተግበሪያዬ ተፈትኗል ማለት ነው።» pipeline የሚያካሂደው ያሉዎትን ፈተናዎች ብቻ ነው። ፈተና ከሌለ CI የሚያረጋግጠው መተግበሪያው እንደሚገነባ ብቻ ነው — ከዚያ በላይ የለም። በጣም አስፈላጊ ለሆኑ ፍሰቶች ፈተናዎች እንዲጽፍ AIውን ይጠይቁ።
- «CI/CD ለትላልቅ ኩባንያዎች ብቻ ነው።» እንደ GitHub Actions ያሉ የተስተናገዱ መሣሪያዎች ለማዋቀር አጭር የውቅር ፋይል ይወስዳሉ፤ ትናንሽ ቡድኖችም ሁልጊዜ ይጠቀሙባቸዋል። ጥረቱን የሚወስደው ፈተናዎቹ እንጂ መሣሪያው አይደለም።
- «በራስ-ሰር ማሰማራት ማለት ማንም ምንም አይፈትሽም ማለት ነው።» ጥሩ pipelines ፍተሻዎችን ይጨምራሉ እንጂ አያስወግዱም። ብዙ ቡድኖች ወደ production ከመሄዳቸው በፊት የሰው ማጽደቂያ ደረጃ ይይዛሉ።
- «pipelineው አረንጓዴ ከሆነ መተግበሪያው ይሠራል ማለት ነው።» ማለት የራስ-ሰር ፍተሻዎቹ አልፈዋል ማለት ነው። አሁንም ለውጡን እራስዎ ይሞክሩ፤ በተለይ በpreview ወይም በstaging ላይ።
- «CI/CD ምትኬዎችን ይተካል።» አይተካም። ፈተናዎችን ያለፈ መጥፎ የዳታቤዝ migration አሁንም እውነተኛ ዳታ ሊያበላሽ ይችላል። ምትኬዎችንና ወደ ኋላ የመመለሻ መንገድ ይዘው ይቆዩ።
ለAI መገንቢያዎ ምን ብለው ይጠይቁ
- «ለsign-up፣ login እና checkout በራስ-ሰር ፈተናዎች ጻፍ፤ እንዴት እንደሚሠሩ አሳየኝ።»
- «በእያንዳንዱ pull request ላይ ጥገኞችን የሚጭን፣ መተግበሪያውን የሚገነባና ፈተናዎችን የሚያካሂድ የGitHub Actions workflow አዘጋጅ።»
- «በpipelineው ላይ type check እና linter ጨምር፤ ስህተቶች ሲኖሩ እንዲወድቅ አድርገው።»
- «የpipelineው እያንዳንዱ እርምጃ ምን እንደሚሠራ በቀላል እንግሊዝኛ አብራራ።»
- «deploy በግማሽ ቢወድቅ ምን ይሆናል? እንዴት ወደ ኋላ እመለሳለሁ?»
- «ምንም ሚስጥር በrepositoryው ውስጥ በቀጥታ ያልተጻፈ ወይም በpipeline logs ውስጥ ያልታተመ መሆኑን አረጋግጥ።»
መተግበሪያዎ API ቁልፎችን የሚጠቀም ከሆነ pipelineውም ያስፈልጋቸዋል — በCI መሣሪያው ውስጥ እንደተመሰጠሩ ሚስጥሮች ይቀመጣሉ፤ በውቅር ፋይሉ ውስጥ በጭራሽ። የአካባቢ ተለዋዋጮችና ሚስጥሮች ይመልከቱ።
CI/CD እና Mythex
Mythex ለእርስዎ CI pipeline አያካሂድም፤ ነገር ግን ተመሳሳይ ፍላጎቶችን በራሱ መንገድ ይሸፍናል፦
- Checkpoints። ከእያንዳንዱ የተሳካ የagent ዙር በኋላ Mythex የgit checkpoint ያስቀምጣል፤ ለውጥ ከተበላሸ ወደዚህ ነጥብ ተመለስ ፕሮጀክቱን ወደ ኋላ ይመልሳል። Chat ይመልከቱ።
- App Testing።
/testብለው ይጻፉ፤ agentው እንደ ተጠቃሚ በቀጥታ preview ላይ ይጫናል እና የተበላሹ ፍሰቶችን ሪፖርት ያደርጋል — ከእያንዳንዱ ማተም በፊት ጠቃሚ ነው። App Testing ይመልከቱ። - ማተም ሆን ተብሎ የሚደረግ እርምጃ ነው። ለውጦች መጀመሪያ በግል preview ላይ ይታያሉ፤ የይፋው መተግበሪያዎ የሚዘምነው እንደገና ሲያትሙ ብቻ ነው — ከcontinuous deployment ይልቅ ለcontinuous delivery ይቀርባል።
- GitHub sync (Pro)። ፕሮጀክቱን ከGitHub repository ጋር ካመሳሰሉ፣ በእያንዳንዱ push ላይ ፈተናዎችን ለማሄድ የራስዎን GitHub Actions workflows ማከል ይችላሉ። GitHub እና export ይመልከቱ።
ከመልቀቅዎ በፊት በእጅ ምን መፈተሽ እንዳለበት ዝርዝር ለማግኘት መተግበሪያዎን ከመጀመሪያ ጊዜ በፊት እንዴት መፈተሽ እንደሚቻል ይመልከቱ፤ ከversion control ጋር ለመስራት ደግሞ በAI በተገነባ መተግበሪያ Git እንዴት መጠቀም እንደሚቻል።
ጥያቄዎች
CI/CD ምን ማለት ነው?
CI ማለት continuous integration ነው፦ እያንዳንዱ የኮድ ለውጥ ብዙ ጊዜ ተጣምሮ በራስ-ሰር ይገነባል እና ይፈተናል። CD ማለት continuous delivery ወይም continuous deployment ነው፦ ፈተናውን ያለፉ ለውጦች ለመልቀቅ በራስ-ሰር ይዘጋጃሉ (delivery) ወይም ያለ በእጅ ደረጃ ለተጠቃሚዎች ይለቀቃሉ (deployment)።
በcontinuous delivery እና continuous deployment መካከል ያለው ልዩነት ምንድን ነው?
በcontinuous delivery pipelineውን ያለፈ እያንዳንዱ ለውጥ ለመልቀቅ ዝግጁ ነው፤ ነገር ግን መቼ ወደ ቀጥታ እንደሚገባ አሁንም ሰው ይወስናል። በcontinuous deployment ያለፈ እያንዳንዱ ለውጥ ያለ ሰው ማጽደቂያ በራስ-ሰር ቀጥታ ይሄዳል።
በAI የተገነባ ትንሽ መተግበሪያ CI/CD ያስፈልገኛል?
በመጀመሪያው ቀን አያስፈልግም። ጥቂት ተጠቃሚዎች ያሉት ትንሽ መተግበሪያ በpreview መፈተንና በእጅ ማተም ሊያልፍ ይችላል። CI/CD ዋጋውን የሚያስገኘው ብዙ ሰዎች ኮዱን ሲቀይሩ፣ እውነተኛ ደንበኞች በመተግበሪያው ላይ ሲመሠረቱ፣ ወይም ቀድሞ የሠሩ ነገሮችን ደጋግመው ሲሰብሩ ነው።
ለCI/CD የሚያገለግሉ መሣሪያዎች ምንድን ናቸው?
የተለመዱት GitHub Actions፣ GitLab CI/CD፣ CircleCI እና Jenkins ናቸው፤ እንዲሁም የhosting መድረኮች አብሮ የተሰሩ የdeploy pipelines። ሁሉም አንድ መሠረታዊ ሥራ ይሠራሉ፦ ኮድ በተቀየረ ቁጥር የእርምጃዎች ዝርዝርን በራስ-ሰር ያስኬዳሉ።