Text size
പരീക്ഷിച്ചറിഞ്ഞത്6 മിനിറ്റ് വായന

വേഗതയേറിയ സിഐ പൈപ്പ്ലൈനുകൾ: 40 മിനിറ്റിൽ നിന്ന് 8 മിനിറ്റിലേക്ക്

ഏറ്റവും വലിയ വ്യത്യാസം ഉണ്ടാക്കുന്ന കാഷിംഗ്, സ്പ്ലിറ്റ്, റണ്ണർ തന്ത്രങ്ങൾ.

Faster CI pipelines: from 40 minutes to 8
AI ഉപയോഗിച്ച് സൃഷ്ടിച്ച ചിത്രീകരണം

ഒരു പതുക്കിയ പൈപ്പ്ലൈനിന് കമ്പ്യൂട്ടർ സമയത്തേക്കാൾ വില കൂടുതലാണ്. കാത്തിരിക്കുമ്പോൾ ഡെവലപ്പർമാർ മറ്റൊന്നിലേക്ക് മാറുന്നു, ഫോക്കസ് നഷ്ടപ്പെടുന്നു, വീണ്ടും കാത്തിരിക്കാതിരിക്കാൻ മാറ്റങ്ങൾ കൂട്ടിച്ചേർക്കുന്നു, "ഇത് ഒരുപക്ഷേ കടന്നുപോകും" എന്ന ചിന്തയിൽ ലയിക്കാൻ തുടങ്ങുന്നു. 40 മിനിറ്റ് നീണ്ടു നിൽക്കുന്ന ഒരു പൈപ്പ്ലൈൻ എല്ലാം മോശമാക്കുന്നു. വലിയ മാറ്റങ്ങൾ, വേഗത കുറഞ്ഞ അവലോകനങ്ങൾ, കൂടുതൽ അപകടസാധ്യത.

മിക്ക പദ്ധതികളും അവരുടെ പൈപ്പ്ലൈൻ സമയം 40 മിനിറ്റിൽ നിന്ന് 10 മിനിറ്റിലധികം കുറയ്ക്കുന്നു. ഏറ്റവും വലിയ വ്യത്യാസം ഉണ്ടാക്കുന്ന സാങ്കേതിക വിദ്യകൾ ഇതാ, ഞാൻ ശ്രമിക്കുന്ന ക്രമത്തിൽ.

പതുക്കെ പതുക്കെ വരുന്ന ഭാഗങ്ങൾ കണ്ടെത്തുന്നു

അന്ധമായി ഒപ്റ്റിമൈസ് ചെയ്യരുത്. ആദ്യം, നടപടി:

  • നോക്കൂ ഓരോ ജോലിയുടെയും ഘട്ടത്തിന്റെയും ദൈർഘ്യം കഴിഞ്ഞ കുറച്ച് ആഴ്ചകളായി. ഗിറ്റ്ഹബ് ആക്ഷനുകളും ഗിറ്റ്ലാബും മിക്ക ഐഐ ടൂളുകളും ഇത് കാണിക്കുന്നു.
  • കണ്ടുപിടിക്കുക വിമര് ശന പാത: മൊത്തം സമയം നിശ്ചയിക്കുന്ന ജോലികളുടെ ശൃംഖല. വേഗത കുറഞ്ഞ ജോലിയുടെ കൂടെ വേഗത കൂട്ടുന്നതൊന്നും മാറ്റില്ല.
  • എത്ര സമയം കടന്നുപോകുന്നു എന്ന് പരിശോധിക്കുക സജ്ജീകരണം: ഉപകരണങ്ങള് ഇൻസ്റ്റാളുചെയ്യുക, ആശ്രിതത്വങ്ങള് ഡൌണ് ലോഡ് ചെയ്യുക, ചിത്രങ്ങള് പിൻവലിക്കുക. പലപ്പോഴും അതിശയകരമായി വലിയൊരു പങ്ക്.

സാധാരണയായി മൂന്നോ നാലോ ചുവടുകള് മിക്ക സമയവും എടുക്കുന്നു. അവിടെ ശ്രദ്ധിക്കുക.

കാഷെ ചെയ്യാവുന്ന എല്ലാ കാര്യങ്ങളും കാഷെ ചെയ്യുന്നു

മിക്ക പൈപ്പ് ലൈനുകളുടെയും ഏറ്റവും വലിയ വിജയം.

ആശ്രിതത്വത്തിന്റെ ഒളിപ്പിടങ്ങൾ. പാക്കേജ് ഡൌൺലോഡുകൾ (npm, pip, Maven, Go മൊഡ്യൂളുകൾ) ഓരോ റണ്ണിലും ആദ്യം മുതൽ സംഭവിക്കരുത്. മിക്ക സജ്ജീകരണ പ്രവർത്തനങ്ങളിലും ലോക്ക് ഫയലിൽ ഒരു ബിൽറ്റ്-ഇൻ കാഷെ ഓപ്ഷൻ കീ ചെയ്തിട്ടുണ്ട്:

- uses: actions/setup-node@<sha> # v4
  with:
    node-version: 22
    cache: npm

ഡോക്കര് ലെയര് കാഷിംഗ്. ബിൽഡ്കിറ്റ് ഉപയോഗിച്ച്, റൺസ് തമ്മിലുള്ള കാഷെ ലെയറുകൾ, ഐസി ദാതാവിന്റെ കാഷെ അല്ലെങ്കിൽ ഒരു രജിസ്ട്രിയിൽഃ

- uses: docker/build-push-action@<sha> # v6
  with:
    cache-from: type=registry,ref=ghcr.io/my-org/shop-api:buildcache
    cache-to: type=registry,ref=ghcr.io/my-org/shop-api:buildcache,mode=max

നന്നായി ഓർഡർ ചെയ്ത ഡോക്കർഫയലുമായി (ആദ്യം ആശ്രയത്വങ്ങൾ, അവസാനം കോഡ്) സംയോജിപ്പിച്ച്, ഇമേജ് ബിൽഡുകൾ പലപ്പോഴും നിരവധി മിനിറ്റുകളിൽ നിന്ന് ഒന്നിൽ താഴെയായി കുറയുന്നു.

ഒളിപ്പിടങ്ങൾ ഉണ്ടാക്കുക. ഗ്രാഡ്ലെ, ബേസെൽ, എൻഎക്സ്, ടർബോറെപ്പോ തുടങ്ങിയ ഉപകരണങ്ങള് ക്ക് ബിൽഡ് ചെയ്യാനും വിദൂരമായി ഔട്ട്പുട്ടുകൾ പരിശോധിക്കാനും സാധിക്കും, അങ്ങനെ മാറ്റമില്ലാത്ത മൊഡ്യൂളുകള് പുനർനിർമിക്കുകയോ വീണ്ടും പരിശോധിക്കുകയോ ചെയ്യുന്നില്ല.

നിങ്ങളുടെ പൈപ്പ് ലൈനിന് വീണ്ടും ചെയ്യേണ്ടിവരാത്ത ജോലിയാണ് ഏറ്റവും വേഗതയേറിയത്.

സമാന്തരമായി ഓടുന്നു

പല പൈപ്പ്ലൈനുകളും ഒരു പടി പിന്നാലെ മറ്റൊന്ന് നടക്കുന്നു. സ്വതന്ത്രമായ ജോലി തേടുക:

  • ലിന്റ്, യൂണിറ്റ് ടെസ്റ്റുകൾ, സെക്യൂരിറ്റി സ്കാനുകൾ എന്നിവ സാധാരണയായി പ്രവർത്തിപ്പിക്കാം ഒരേ സമയം.
  • ഒരു മാട്രിക്സ് ഒന്നിലധികം പതിപ്പുകളോ ഘടകങ്ങളോ സമാന്തരമായി പരീക്ഷിക്കുക.
  • നിങ്ങളുടെ പ്രോസസ്സ് അനുവദിക്കുന്ന പക്ഷം, വേഗത കുറഞ്ഞ ടെസ്റ്റ് സ്യൂട്ടുകൾ പ്രവർത്തിക്കുമ്പോൾ തന്നെ ഇമേജ് ബിൽഡ് ആരംഭിക്കുക.

പരീക്ഷണങ്ങള് വിഭജിക്കുകയും, കറൻറീനില് സൂക്ഷിക്കുകയും ചെയ്യുക

പരിശോധനകളാണ് ഏറ്റവും ദൈർഘ്യമേറിയ ഘട്ടം. രണ്ടു രീതികൾ:

പരീക്ഷണം വിഭജിക്കുന്നു. ടെസ്റ്റ് സ്യൂട്ടിനെ പല സമാന്തര ജോലികളിലായി വിഭജിക്കുക, ചരിത്രപരമായ സമയക്രമത്തിൽ അടിസ്ഥാനമാക്കിയുള്ളതാണ്, അതിനാൽ ഓരോ ജോലിയും ഏകദേശം ഒരേ സമയം എടുക്കും. പല ടെസ്റ്റ് ഫ്രെയിം വർക്കുകളും ഐസി ടൂളുകളും ഇത് പ്രാദേശികമായി അല്ലെങ്കിൽ ചെറിയ സഹായ ഉപകരണങ്ങളിലൂടെ പിന്തുണയ്ക്കുന്നു.

ഫ്ളാക്ക് ടെസ്റ്റ് ക്വാറന്റീൻ. ഒരു പരീക്ഷണം പരാജയപ്പെട്ടാൽ, അത് പൈപ്പ്ലൈനിന്റെ മുഴുവൻ ഭാഗവും വീണ്ടും പ്രവർത്തിപ്പിക്കും. അത് വെറും മാലിന്യമാണ്. ഫ്ലാക്ക് ടെസ്റ്റുകൾ ട്രാക്കുചെയ്യുക, അവയെ ഒരു പ്രത്യേക നോൺ ബ്ലോക്കിംഗ് ജോലിക്കായി മാറ്റുക, അവ ഒരു ഡെഡ്ലൈനിൽ പരിഹരിക്കുക. എല്ലായിടത്തും ഓട്ടോമാറ്റിക് റീട്രൈസ് ചേര് ത്ത് അതിനെ കുറിച്ച് മറക്കരുത്.

എല്ലാ പരീക്ഷണങ്ങളും ഓരോ കമ്മിറ്റിലും നടത്തേണ്ടതുണ്ടോ എന്ന് ചോദിക്കുക. നീണ്ട എൻഡ്-ടു-എൻഡ് സ്യൂട്ടുകൾ മെയിൻ അല്ലെങ്കിൽ നൈറ്റ്ലി ലേക്ക് ലയിപ്പിച്ചുകൊണ്ട് പ്രവർത്തിപ്പിക്കാൻ കഴിയും, അതേസമയം പിൻ അഭ്യർത്ഥനകൾ ഫോക്കസ് ചെയ്ത ഉപസെറ്റ് പ്രവർത്തിപ്പിക്കുന്നു.

മാറ്റം വന്നത് മാത്രം പ്രവർത്തിപ്പിക്കുക

മോണോറെപ്പോയില് , എല്ലാം പുനര് നിർമ്മിക്കുകയും വീണ്ടും പരിശോധിക്കുകയും ചെയ്യുക എന്നത് ഒരു വരി മാറ്റത്തിന് ഏറ്റവും വലിയ മാലിന്യ സ്രോതസ്സാണ്:

  • പാത്ത് ഫിൽട്ടറുകൾ പ്രസക്തമായ ഫോൾഡറുകള് മാറുമ്പോള് മാത്രം ജോലികള് ആരംഭിക്കുക.
  • ബാധിതരായ കെട്ടിടങ്ങള് മാത്രം Nx, Turborepo, Bazel അല്ലെങ്കിൽ Pants എന്നിവ ഉപയോഗിച്ച് ഒരു മാറ്റം സ്പർശിക്കുന്ന പ്രോജക്ടുകൾ കൃത്യമായി കണ്ടെത്താൻ ആശ്രയത്വ ഗ്രാഫ് ഉപയോഗിക്കുക.

നല്ല ഓട്ടക്കാരെ

ചിലപ്പോള് യന്ത്രം തന്നെയാണ് തടസ്സം.

  • വലിയ ഓട്ടക്കാർ കൂടുതൽ സിപിയുവും മെമ്മറിയും ഉപയോഗിച്ച് മൊത്തത്തിൽ വിലകുറഞ്ഞതാകാം, സമയം കുറച്ചാൽ. ഓരോ പൈപ്പ് ലൈനിനും ചെലവ് അളക്കുക, മിനിറ്റിന് ചെലവ് അല്ല.
  • സ്വയം ഹോസ്റ്റുചെയ്ത എഫെമെറൽ റണ്ണേഴ്സ്ഉദാഹരണത്തിന് പ്രവർത്തനങ്ങളുടെ റണ്ണർ കൺട്രോളർ കുബർനെറ്റേസിൽ, മെഷീന് വലുപ്പത്തെ നിയന്ത്രിക്കാനും, റണ്ണറുകളുടെ അടുത്ത് കാഷെ സൂക്ഷിക്കാനും നിങ്ങളെ അനുവദിക്കുന്നു. അവയെ അപ്രത്യക്ഷമാക്കുക, സുരക്ഷയ്ക്കായി ഓരോ ഓട്ടക്കാരനും ഒരു ജോലി.
  • വേഗതയേറിയ മൂന്നാം കക്ഷി റണ്ണർ സേവനങ്ങൾ പലപ്പോഴും മെച്ചപ്പെട്ട കാഷിംഗ് ഉള്ളവയും.

ചെറിയ വിജയങ്ങൾ കൂടി ചേർക്കുന്നു

  • ആഴമില്ലാത്ത ഗിറ്റ് ക്ലോണുകൾ (fetch-depth: 1) നിങ്ങൾക്ക് ചരിത്രം ആവശ്യമില്ലെങ്കിൽ.
  • നിങ്ങളുടെ ഉപകരണങ്ങള് ഉപയോഗിച്ച് മുൻകൂട്ടി നിർമ്മിച്ച ഐ. സി. ചിത്രങ്ങള് .
  • പുതിയ commit ഒരേ ബ്രാഞ്ചിലേക്ക് തള്ളുമ്പോൾ കാലഹരണപ്പെട്ട റൺസ് റദ്ദാക്കുന്നു (concurrency കൂടെ cancel-in-progress).
  • ആരും നോക്കാത്ത പടികൾ നീക്കം ചെയ്യുന്നു.

പിന്നെ, നല്ല ലക്ഷ്യം എന്താണ്?

ഒരു പുഷ് മുതൽ ഗ്രീൻ ചെക്ക് വരെയുള്ള പത്ത് മിനിറ്റിനുള്ളിൽ ഒരു പിൻ അഭ്യർത്ഥന മിക്ക സേവനങ്ങൾക്കും നല്ല ലക്ഷ്യമാണ്. അഞ്ചു വയസിനു താഴെയുള്ളത് നല്ലതാണ്. അളക്കുക, കാഷെ ചെയ്യുക, സമാന്തരമാക്കുക, ചെറിയ പരിശോധനകൾ നടത്തുക, എത്ര സമയം അപ്രത്യക്ഷമാകുന്നു എന്ന് നിങ്ങൾ അത്ഭുതപ്പെടും.

എന്റെ അഭിപ്രായം: പൈപ്പ് ലൈനിന്റെ വേഗത ഒരു സവിശേഷതയായി കണക്കാക്കുക. നിങ്ങൾ സംരക്ഷിക്കുന്ന ഓരോ മിനിറ്റും ഓരോ ഡെവലപ്പർമാരും വീണ്ടും സംരക്ഷിക്കുന്നു, ഓരോ കമ്മിറ്റിലും.

ഡെസ്ലി