ትርፍ፡
- የ CI/CD ጽንሰ-ሀሳብ፣ የቧንቧ መስመር የሰውነት አካል (ቀስቃሽ፣ ስራ፣ ደረጃ፣ ሯጭ፣ አርቲፊክት) እና በ GitHub Actions እና GitLab CI መካከል ያለውን ልዩነት የመረዳት እና አርቴፊሻል ኢንተለጀንስ ያላቸው የቧንቧ መስመሮች ከትክክለኛ አውድ ጋር ያመርታሉ።
- በአርቴፊሻል ኢንተለጀንስ በተሰራው የቧንቧ መስመር ውስጥ ሚስጥራዊ ማጣቀሻዎችን ፣ ፈቃዶችን እና የተጠሩትን አካላት የመፈተሽ እና የማረጋገጥ ችሎታ
- ምስጢሮችን በግልፅ ፅሁፍ ያለመፃፍ፣ አነስተኛ ፍቃድ የመስጠት እና የስርጭት ስራን ከ CI በመለየት የመቆጣጠር መርሆዎችን የመተግበር ችሎታ።
የዘመናዊ ሶፍትዌር እምብርት ኮድ የገንቢውን ኮምፒዩተር በደህና ደንበኛው እስኪደርስ ድረስ የሚተውበት አውቶሜትድ የቧንቧ መስመር ነው። ይህ ቧንቧ CI/CD ይባላል። CI (ቀጣይነት ያለው ውህደት) የእያንዳንዱን ኮድ ለውጥ በራስ ሰር ማጠናቀር እና መሞከር ነው። ዓላማው ገንቢው ከቁልፍ ሰሌዳው ከመውጣቱ በፊት ሳንካ መያዝ ነው። ሲዲ (ቀጣይ ማድረስ/ማሰማራት) የተፈተነ ኮድ አውቶማቲክ ዝግጅት ወይም መልቀቅ ነው። CI/CD ቧንቧ መስመር እነዚህን ቅደም ተከተሎች በቅደም ተከተል የሚገልጽ የማዋቀር ፋይል ነው - ብዙውን ጊዜ በ YAML (በሰው ሊነበብ የሚችል የውቅር የጽሑፍ ቅርጸት) ይጻፋል።
እነዚህን የ YAML ፋይሎች በእጅ መጻፍ አሰልቺ፣ ቃላቶች እና ለስህተት የተጋለጠ ነው። ማስገቢያው በአንድ ቦታ ላይ ከተንሸራተቱ, የቧንቧው መስመር በሙሉ ይሰበራል. AI የሚመጣው እዚህ ነው: ከትክክለኛው አውድ ጋር, በሰከንዶች ውስጥ የሚሰራ ረቂቅ ይፈጥራል. ነገር ግን እያንዳንዱ የመነጨ እርምጃ ምን እንደሚሰራ መረዳት እና ማረጋገጥ የእርስዎ ስራ ነው - ምክንያቱም ኮድዎን ወደ ምርት የሚያመጣው ይህ ቱቦ ነው።
የሲአይ/ሲዲ ቧንቧ መስመር አናቶሚ
እያንዳንዱ የቧንቧ መስመር በርካታ መሰረታዊ ፅንሰ ሀሳቦችን ያቀፈ ነው። እነዚህን ሳታውቁ የ AI ውፅዓትን መቆጣጠር አትችልም፡-
- ቀስቅሴ፡ ቧንቧው ምን ይጀምራል? ብዙውን ጊዜ ወደ ቅርንጫፍ መግፋት፣ የመሳብ ጥያቄ (የውህደት ጥያቄ) ወይም የጊዜ ሰሌዳ።
- ሥራ: ተከታታይ እርምጃዎችን የሚያከናውን አመክንዮአዊ ክፍል; ለምሳሌ "ሙከራ"፣ "ግንባታ"፣ "ማሰማራት"።
- ደረጃ፡ አንድ ነጠላ ትዕዛዝ ወይም ድርጊት በአንድ ሥራ ውስጥ።
- ሯጭ፡- ስራዎች የሚሰሩበት ቨርቹዋል ማሽን ወይም መያዣ።
- አርቲፊሻል፡ በአንድ ስራ የሚመረተው እና በቀጣይ ስራዎች ጥቅም ላይ የሚውለው ውጤት (ለምሳሌ፣ የተጠናቀረ ፋይል)።
- ሚስጥር፡ ፓይላይን የሚጠቀመው ሚስጥራዊ መረጃ በማከማቻ ማከማቻው ውስጥ ግልጽ በሆነ ጽሑፍ ውስጥ መቀመጥ የለበትም።
GitHub Actions ይህን ፍቺ በ.github/workflows/*.yml ፋይሎች ውስጥ ያስቀምጣል። ክፍሉ የስራ ፍሰት → ስራ → የእርምጃ ተዋረድ ነው። GitLab CI, በሌላ በኩል, በ .gitlab-ci.yml ፋይል ውስጥ ያለውን ደረጃ → የሥራ መዋቅር ይጠቀማል. AI ሁለቱንም አገባቦች ያውቃል፣ ግን የትኛውን እንደሚፈልጉ በግልፅ መናገር አለቦት።
ጠቃሚ ምክር፡ AI የቧንቧ መስመሮችን ሲጠይቁ ሁል ጊዜ ይግለጹ፡ መድረክ (GitHub Actions or GitLab CI)፣ ቋንቋ/ማእቀፍ (ኖድ፣ .NET፣ Python…)፣ ቀስቅሴ እና ስራ ላይ ይውል እንደሆነ። እነዚህ አራት መረጃዎች የውጤቱን ጥቅም በእጥፍ ይጨምራሉ።
ደረጃ በደረጃ፡ ከ AI ጋር የቧንቧ መስመር ዲዛይን ማድረግ
- ግቡን ግልጽ ያድርጉ. እንደ "ወደ ዋናው በመግፋት ሙከራዎችን አሂድ፣ ምስልን ገንባ፣ ግን መለያ ሲጣል ብቻ አሰማር"።
- አጽሙን እንዲመረት ያድርጉ. ለመሠረታዊ የስራ ሂደት AI ን ይጠይቁ።
- ደረጃዎቹን ያንብቡ እና ይረዱ። እያንዳንዱ ሩጫ እና መስመር ምን እንደሚሰራ ያረጋግጡ።
- ሚስጥራዊ ማጣቀሻዎችን ይፈትሹ. ምስጢሮቹ የሚጠሩት በ${{ secrets.NAME }} ነው ወይንስ በኮዱ ውስጥ ተካትተዋል?
- በአካባቢው/CI ይሞክሩት። በትንሽ የሙከራ ማከማቻ ቦታ ላይ ያሂዱት፣ ቀይ-አረንጓዴ (አለመሳካት) ባህሪን ይመልከቱ።
- ቀስ በቀስ ዘርጋ። መጀመሪያ CI (ሙከራ) ብቻ ይጨምሩ፣ ከዚያ ይገንቡ፣ መጨረሻ ያክሉ።
ደህንነት: በቧንቧ ውስጥ ሚስጥር እና ፍቃድ
CI/CD ሚስጥሮች በብዛት ከሚወጡባቸው ቦታዎች አንዱ ነው። ሶስት ወርቃማ ህጎች;
- በ YAML ውስጥ ሚስጥሮችን በግልፅ ፅሁፍ በጭራሽ አይፃፉ። የመሳሪያ ስርዓቱን ሚስጥራዊ ማከማቻ (GitHub Secrets፣ GitLab CI/CD Variables) ተጠቀም እና በ${{ secrets.X }} ይደውሉ።
- ትንሹ መብት። ለፔፕፐሊን የሰጡት ማስመሰያ እንደ አስፈላጊነቱ ብዙ ስልጣን ብቻ ይኖረዋል። ይህንን በፍቃዶች ያጠቡት፡ በ GitHub Actions ውስጥ ያግዱ።
- ምስጢሩን በምዝግብ ማስታወሻው ላይ አይጫኑ. እንደ echo $TOKEN ያሉ መስመሮች በምዝግብ ማስታወሻው ውስጥ ያለውን ሚስጥር ያሳያሉ። የፕላትፎርሞች ጭንብል፣ ግን ይጠንቀቁ።
ይጠንቀቁ፡ ለመመቻቸት AI አንዳንድ ጊዜ እንደ የይለፍ ቃል፡ 123456 ወይም ከመጠን በላይ ሰፊ ፍቃዶችን ያስቀምጣቸዋል፡ ሁሉንም በናሙና ቧንቧዎች ውስጥ ይፃፉ። ይህንን ሁልጊዜ አስተካክል፡ ሚስጥርን ወደ ማጣቀሻ ቀይር፣ ፍቃድ ሰብስብ።
የንጽጽር ሰንጠረዥ
ጽንሰ-ሐሳብ
GitHub ድርጊቶች
GitLab CI
የማዋቀር ፋይል
.github/የስራ ፍሰቶች/*.yml
.gitlab-ci.yml
የግንባታ ክፍል
የስራ ሂደት → ስራ → ደረጃ
ደረጃ → ሥራ
ቀስቅሴ
አስር፡
ደንቦች: / ብቻ:
የመጥራት ምስጢር
${{ ሚስጥሮች.NAME }}
$NAME (ሲአይ/ሲዲ ተለዋዋጮች)
ዝግጁ አካል
ይጠቀማል፡ action@v4
ያካትታሉ: / አብነት
ሯጭ
መሮጥ፦
መለያዎች
ሶስት ጥቃቅን ጉዳዮች
ጉዳይ 1 - ወደ 6 ሰአታት ከ 40 ደቂቃዎች ይቀንሳል. አንድ ቡድን በእጅ የመሞከሪያ-ግንባታ-ማሰማራት ሂደታቸውን በራስ ሰር ለመስራት ፈልጎ ነበር፣ ነገር ግን ማንም YAMLን አያውቅም። YZን እንደ "Node.js ፕሮጀክት፣ GitHub Actions፣ npm test እና npm build in push to main፣ በ v* መለያ ብቻ ማሰማራት" ሲሉ ገልጸውታል። AI የ 40 መስመሮችን የሚሠራ አጽም አወጣ; ቡድኑ እያንዳንዱን እርምጃ አረጋግጦ በ40 ደቂቃ ውስጥ በቀጥታ ወጣ። በእጅ ቢጽፉት የአንድ ቀን ሥራ ይሆን ነበር።
ጉዳይ 2 — ማረጋገጫ የደህንነት ተጋላጭነትን ያዘ። አንድ መሐንዲስ AI የስራ ፍሰት እንዲያሰማራ ጠየቀ። ውጤቱ ፈቃዶችን ያካትታል-ሁሉንም ይፃፉ - ትርጉሙ ማስመሰያው ወደ ማከማቻው ፣ ፓኬጆች ፣ ሁሉም ነገር ሊጽፍ ይችላል። ኢንጂነሩ ይህንን አስተውለው በፍቃዶች አጠበበው፡ {ይዘት፡ ማንበብ፣ ፓኬጆች፡ ጻፍ}። ይህም አጠቃላይ ማከማቻውን በመተካት የተጠለፈ ጥገኝነት አደጋን አስቀርቷል።
ጉዳይ 3 - የቅዠት ድርጊት. አንድ ቡድን በ AI-የተጠቆመው አጠቃቀሞችን ሮጧል፡ ድርጊቶች/ማሰማራት-ወደ-aws@v3 መስመር; እንደዚህ ያለ ኦፊሴላዊ እርምጃ አልነበረም, AI ስሙን አዘጋጀ. የቧንቧ መስመር በ"እርምጃ አልተገኘም" ፈነዳ። ትምህርት፡ በገበያ ቦታ ላይ እያንዳንዱ የተጠራው አካል ጥቅም ላይ እንደሚውል ያረጋግጡ፡ በትክክል መኖሩን ያረጋግጡ።
አራት ሊገለበጡ የሚችሉ አብነቶች
1) መሰረታዊ የ CI የስራ ፍሰት
ለ GitHub Actions የCI የስራ ፍሰት ይጻፉ። ፕሮጀክት፡ [ቋንቋ/መዋቅር]።ቀስቅስ፡ ግፋ እና ጥያቄን ወደ ዋናው ቅርንጫፍ ጎትት። ደረጃዎች: ጥገኞችን ይጫኑ, ሙከራዎችን ያሂዱ, ሊንትን ያሂዱ. NO Deploy.Runner ubuntu-የቅርብ ጊዜ። ምንም ምስጢር አያስፈልግም. YAML ያብራሩ።
2) የተዘረጋ የሲዲ የስራ ፍሰት (ደህንነቱ የተጠበቀ)፡
ለ[PLATFORM] የማሰማራት የስራ ፍሰት ይፃፉ። በ'v*' መለያ ላይ ብቻ መስራት አለበት። ዒላማ፡ [MEDIA/CLOUD]። ሕጎች፡- ምስጢሮችን በፍጹም ግልጽ በሆነ ጽሑፍ አይጻፉ፣ በ${{ ሚስጥሮች ይደውሉላቸው።
3) አሁን ያለውን የቧንቧ መስመር ይግለጹ:
የሚከተለውን [PLATFORM] የቧንቧ መስመር መስመርን ይግለጹ፡ እያንዳንዱ ስራ ምን ይሰራል፣ በምን አይነት ቅደም ተከተል ነው የሚሰራው፣ ምን ሚስጥር ይጠቀማል፣ እና ሁለቱ አደገኛ ነጥቦቹ ምንድናቸው? በመጨረሻም፣ 3 ማሻሻያዎችን ይጠቁሙ። ቧንቧ፡ [YAML CONTENT]
4) የቧንቧ መስመርን ማፋጠን;
የሚከተለው CI ቧንቧ በዝግታ ነው የሚሰራው (የቆይታ ጊዜ፡ [X ደቂቃ])። የመሸጎጫ አጠቃቀምን፣ ትይዩ ስራዎችን እና አላስፈላጊ እርምጃዎችን ይፈትሹ። 5 ተጨባጭ፣ ሊተገበር የሚችል የፍጥነት ጥቆማዎችን ይስጡ እና የእያንዳንዱን ግምታዊ ተፅእኖ ይፃፉ። የቧንቧ መስመር፡ [YAML]
ደካማ ጥያቄ / ጠንካራ ጥያቄ
ደካማ፡ "የGitHub ድርጊቶች የስራ ፍሰት ይፃፉ።"
ውጤት፡ የትኛው ቋንቋ፣ የትኛው ቀስቅሴ፣ ማሰማራት አለመኖሩ ግልጽ አይደለም፤ AI አጠቃላይ የመስቀለኛ መንገድ ምሳሌን ይሰጣል፣ ምናልባት ከፕሮጀክትዎ ጋር አይጣጣምም እና ምስጢሩን በሃርድ ኮድ ሊይዝ ይችላል።
ጠንካራ: "የ GitHub Actions የስራ ፍሰትን ይፃፉ። Python 3.12 ፕሮጀክት፣ pytest + ruff በጉተታ ጥያቄ እና በዋና ግፊት ያሂዱ፤ ኖ ማሰማራት፤ ጥገኞችን በፒፕ መሸጎጫ ያፋጥኑ፤ ምንም ሚስጥሮች አያስፈልግም። YAML ከአስተያየቶች ጋር ይላኩ።"
ልዩነት፡ ሁለተኛው ጥያቄ ቋንቋውን፣ ቀስቅሴውን፣ ወሰንን (ምንም ማሰማራት የለም)፣ የአፈጻጸም መጠበቅ እና የደህንነት እክልን ይሰጣል። ውጤቱ በቀጥታ ይሰራል.
የተለመዱ ስህተቶች
- ምስጢሩን በ YAML ውስጥ መክተት። ግልጽ ጽሁፍ የይለፍ ቃል/ቶከን በጣም የተለመደው የCI ተጋላጭነት ነው።
- ከመጠን በላይ ሰፊ ፍቃድ. ሁሉንም ከመጻፍ ይልቅ የሚፈለገውን ዝቅተኛ ፍቃድ ይስጡ።
- በሌለው ድርጊት/አብነት ላይ መተማመን። በ AI የተሰሩ አጠቃቀሞችን ያረጋግጡ፡ በገበያ ቦታ ላይ ያሉ መስመሮች።
- ግራ የሚያጋባ ማሰማራት ከ CI ጋር። ፈተናው በእያንዳንዱ ግፊት ላይ ሊሠራ ይችላል, ነገር ግን ማሰማራቱ ቁጥጥር እና መጽደቅ አለበት.
- መሸጎጫ አለመጠቀም። በእያንዳንዱ ሩጫ ላይ ጥገኛዎችን ከባዶ መጫን የቧንቧ መስመርን በደቂቃዎች ይቀንሳል.
- የመጀመሪያውን የስራ ፍሰት በቀጥታ በዋናው ማከማቻ ውስጥ መሞከር. መጀመሪያ በሙከራ ማከማቻ ላይ ያሂዱት።
በማጠቃለያው
የሲአይ/ሲዲ ቧንቧዎች አውቶማቲክ ቱቦዎች ሲሆኑ ኮድን ወደ ምርት የሚያንቀሳቅሱ እና በ YAML የተገለጹ ናቸው። AI በፍጥነት ለ GitHub Actions እና GitLab CI የሚሰሩ ሰማያዊ ንድፎችን ያዘጋጃል - ነገር ግን ስለ መድረክ፣ ቋንቋ፣ ቀስቅሴ እና የማሰማራት ወሰን ግልጽ መሆን አለቦት። በደህንነት ውስጥ ሶስት ህጎች አሉ-ምስጢሮችን በማጣቀሻ ይደውሉ ፣ አነስተኛ መብቶችን ይስጡ ፣ ምስጢሮችን በምዝግብ ማስታወሻው ውስጥ አያትሙ ። እያንዳንዱ የሚጠቀመው፡/ማካተት፡ አካል በትክክል መኖሩን እና እያንዳንዱ እርምጃ ምን እንደሚሰራ ማረጋገጥ የእርስዎ ኃላፊነት ነው።
የመተግበሪያ ተግባር
ቀላል የናሙና ፕሮጀክት ይምረጡ (በቋንቋዎ ውስጥ "ሄሎ ዓለም" እንኳን ይሠራል)። AI ከላይ ካለው "መሰረታዊ CI የስራ ፍሰት" አብነት ጋር የስራ ፍሰት እንዲሰራ ያድርጉ። ከዚያም: (1) እያንዳንዱ እርምጃ ምን እንደሚሰራ በራስዎ ቃላት ይጻፉ; (2) ምንም ምስጢሮች ያልተካተቱ እና ፈቃዶች ጠባብ መሆናቸውን ማረጋገጥ; (3) ከተቻለ በሙከራ ገንዳ ውስጥ ያካሂዱት እና ቀይ አረንጓዴ ባህሪን ይመልከቱ።
የማረጋገጫ ዝርዝር
- [ ] መድረኩን፣ ቋንቋ/ማእቀፍ ጨምሬአለሁ፣ ቀስቅሴ እና ወሰን አሰማርኩ።
- [ ] እያንዳንዱ ሥራ እና እርምጃ በተፈጠረ YAML ውስጥ ምን እንደሚሰራ ተረድቻለሁ።
- [ ] ምንም ምስጢር ግልጽ አይደለም; ሁሉም ${{ ሚስጥሮች.X }} / CI ተለዋዋጭ።
- [ ] ፈቃዶቹን ወደ ትንሹ ባለስልጣን ጠበብኳቸው።
- [] ሁሉም ድርጊቶች/ አብነቶች የሚባሉት በትክክል እንዳሉ አረጋግጣለሁ።
- [ ] የማሰማራቱን ደረጃ በማጽደቅ/በመከላከያ ቁጥጥር አድርጌዋለሁ።