Mis on CI/CD? Pidev integreerimine ja pidev kohaletoimetamine
⚡ Nutikas kokkuvõte
Pidev integratsioon on tarkvaraarenduse tava, kus meeskonnaliikmed koondavad oma töö vähemalt kord päevas ühisesse repositooriumisse ja iga commit käivitab automaatse ehituse ja testimise, et integratsioonivead varakult avastada.
Mis on pidev integreerimine (CI)?
Pidev integreerimine on tarkvaraarendusmeetod, kus meeskonnaliikmed integreerivad oma tööd vähemalt kord päevas. Iga integratsiooni kontrollib automaatne järgustamine, mis tuvastab vigu. See kontseptsioon võeti kasutusele üle kahe aastakümne tagasi, et vältida „integratsioonipõrgu“, mis juhtub siis, kui integratsioon lükatakse projekti lõppu.
Pärast koodi kinnitamist (commit) ehitatakse ja testitakse tarkvara kohe. Suures projektis, kus on palju arendajaid, tehakse kinnitusi mitu korda päevas. Iga kinnitusega kood ehitatakse ja testitakse; kui test läbib, kontrollitakse ehitust juurutamiseks; ja kui juurutamine õnnestub, suunatakse kood tootmiskeskkonda. See kinnituse, loomise, testimise ja juurutamise tsükkel on pidev, mis annabki sellele praktikale nime.
Mis on pidev kohaletoimetamine (CD)?
Pidev kohaletoimetamine on tarkvaratehnika meetod, mille puhul meeskond arendab tarkvara lühikeste tsüklite jooksul ja tagab selle usaldusväärse avaldamise igal ajal. Eesmärk on tarkvara kiire ja sagedase loomine, testimine ja avaldamine, vähendades sagedaste tootmisvärskenduste abil muudatuste edastamise kulusid, aega ja riski.
Erinevus CI ja CD vahel
Pidev integreerimine on lähenemisviis, mille puhul testitakse iga koodibaasi muudatust automaatselt, samas kui pidev edastamine on lähenemisviis selliste muudatuste nagu uute funktsioonide, konfiguratsiooni ja veaparanduste kiireks ja ohutuks tootmisesse toomiseks.
Arendus ilma CI-ta vs. arendus CI-ga
| Areng ilma CIta | Arendus CI-ga |
|---|---|
| Palju vigu | Vähem vigu |
| Harvad kohustused | Regulaarsed kohustused |
| Harvad ja aeglased vabastamised | Regulaarsed tööväljaanded |
| Raske integreerimine | Lihtne ja tõhus integreerimine |
| Testimine toimub hilja | Testimine toimub varakult ja sageli |
| Probleeme on raskem lahendada | Probleemid leitakse ja lahendatakse kiiremini |
| Projekti halb nähtavus | Parem projekti nähtavus |
Erinevus kompileerimise ja pideva integratsiooni vahel
Kuigi kompileerimine teisendab koodi ainult masinkeeleks, täidab CI mitmeid laiemaid tegevusi:
- Andmebaasi integratsioon: Hoiab andmebaasi ja koodi sünkroonis ning automatiseerib andmebaasi ja testandmete loomise.
- Code ülevaatus: Tagab terve koodibaasi, tuvastab probleemid varakult ja rakendab parimaid tavasid.
- Automatiseeritud juurutamine: Võimaldab toote igal ajal välja anda ja hoiab seda pidevalt demokõlblikus olekus.
- Dokumentide genereerimine: Hoiab dokumentatsiooni ajakohasena ning loob aruandeid ja mõõdikuid.
- Koostamine: Teisendab kõrgetasemelise koodi masinkeeleks ja tagab selle kompileerimise igal sihtplatvormil.
Ideaalis käivitatakse ehitus käsurealt, mitte IDE-st sõltudes, toimub pidevalt spetsiaalsel CI-serveril (mitte cron-tööna), käivitatakse iga registreerimise korral ja annab kohest tagasisidet ilma arendaja pingutuseta.
Mida on vaja CI protsessi läbiviimiseks?
- Versioonikontrollisüsteem (VCS): Usaldusväärne meetod projektis aja jooksul tehtud muudatuste tsentraliseerimiseks ja säilitamiseks.
- Virtuaalne masin: Varuserver või vähemalt üks virtuaalne masin oma süsteemi ülesehitamiseks.
- Majutatud CI tööriistalahendused: Serverite haldamise vältimiseks haldavad hostitud lahendused kogu protsessi ja pakuvad lihtsamat skaleeritavust.
- Vahendid: Kui valite ise hostitud variandi, installige CI-tööriist, näiteks Jenkins, TeamCity, Bamboovõi GitLab.
Kuidas pidev integratsioon töötab?
Vana näide on Nokia, mis kasutas kunagi protseduuri nimega öine ehitus. Pärast seda, kui paljud arendajad päeva jooksul mitu korda muudatusi tegid, ehitati tarkvara igal öösel. Kuna tarkvara ehitati ainult üks kord päevas, oli suures koodibaasis vigade eraldamine, tuvastamine ja parandamine vaevaline.
Later Meeskond võttis kasutusele pideva integratsiooni (Continuous Integration). Tarkvara ehitati ja testiti kohe, kui arendaja koodi lisas, seega avastati kõik vead kohe ja vastutav arendaja sai need kiiresti parandada.
CI omadused
- Võimaldab teil hallata ühte lähtekoodiga repositooriumi.
- Võimaldab testida tootmiskeskkonna klooni, mis on tootmiskeskkonnale lähedal.
- Pakub praeguse järgu pidevat kättesaadavust.
- Teeb kogu ehituse, testimise ja juurutamise protsessi kõigile sidusrühmadele nähtavaks.
Miks kasutada CI-d?
- Aitab teil luua kvaliteetsemat tarkvara ja läbi viia korduvaid teste.
- Skaleerib insenerimeeskondade väljundit ja võimaldab arendajatel funktsioonide kallal paralleelselt töötada.
- Suurendab nähtavust ja suhtlust meeskonnas.
- Annab kohest tagasisidet probleemi ilmnemisel ja vähendab riski, muutes juurutamise kiiremaks ja prognoositavamaks.
- Väldib viimase hetke segadust avaldamise ajal.
CI-süsteemide kasutamise parimad tavad
- Tehke muudatusi varakult ja sageli ning ärge kunagi tehke vigast koodi.
- Parandage ehitusvead koheselt ja tegutsege mõõdikute põhjal.
- Ehita igas sihtkeskkonnas ja loo igast ehitusest artefakte.
- Automatiseeri ehitus nii, et see ei sõltuks IDE-st.
- Ehita ja testi kõike vastavalt muudatustele, sh andmebaasi skeemi.
- Hoidke ehitus kiire ja kasutage automatiseeritud juurutamist.
CI puudused
- CI-serveriga harjumiseks on vaja esialgset seadistamisaega ja koolitust.
- Tuleb välja töötada sobivad testimisprotseduurid ja hästi üles ehitatud testikomplekt vajab märkimisväärseid ressursse.
- Tuttavad protsessid tuleb ümber ehitada ning vaja on täiendavaid servereid ja keskkondi.
- Ooteajad võivad tekkida siis, kui mitu arendajat soovivad oma koodi korraga integreerida.
CI protsessi tööriistad
Jenkins
Jenkins on avatud lähtekoodiga pideva integratsiooni tööriist, mis on kirjutatud JavaSee hõlbustab reaalajas testimist ja üksikute muudatuste aruandlust suuremas koodibaasis ning aitab arendajatel defekte kiiresti leida ja lahendada, automatiseerides samal ajal ehitustestimist.
Bamboo
Bamboo on pideva integratsiooniga ehitusserver, mis teostab automatiseeritud ehitust, testimist ja avaldamist ühes kohas. See töötab sujuvalt Jira ja Bitbucket ja toetab paljusid tehnoloogiaid nagu Docker, Git, SVN, Mercurial ja AWS.
TeamCity
TeamCity on pideva integratsiooniga server paljude võimsate funktsioonidega. See hoiab CI-serveri terve ja stabiilsena isegi siis, kui ühtegi järku ei tööta, ning pakub igale projektile paremat koodikvaliteeti.

