Mikä on CI/CD? Jatkuva integrointi ja jatkuva toimitus
⚡ Älykäs yhteenveto
Jatkuva integraatio on ohjelmistokehityskäytäntö, jossa tiimin jäsenet yhdistävät työnsä jaettuun tietovarastoon vähintään päivittäin, ja jokainen commit käynnistää automaattisen koonti- ja testausprosessin integraatiovirheiden havaitsemiseksi varhaisessa vaiheessa.
Mikä on jatkuva integrointi (CI)?
Jatkuva integraatio on ohjelmistokehitysmenetelmä, jossa tiimin jäsenet integroivat työnsä vähintään kerran päivässä. Jokainen integraatio varmennetaan automaattisella koonnilla, joka havaitsee virheet. Konsepti otettiin käyttöön yli kaksi vuosikymmentä sitten "integraatiohelvetin" välttämiseksi, joka tapahtuu, kun integraatio lykätään projektin loppuun.
Koodicommitin jälkeen ohjelmisto rakennetaan ja testataan välittömästi. Suuressa projektissa, jossa on useita kehittäjiä, commit-päivityksiä tehdään useita kertoja päivässä. Jokaisen commitin yhteydessä koodi rakennetaan ja testataan; jos testi läpäisee, koonti tarkistetaan käyttöönottoa varten; ja jos käyttöönotto onnistuu, koodi viedään tuotantoon. Tämä commit-, koonti-, testaus- ja käyttöönottosykli on jatkuva, mistä käytäntö on saanut nimensä.
Mikä on jatkuva toimitus (CD)?
Jatkuva Toimitus on ohjelmistokehitysmenetelmä, jossa tiimi kehittää ohjelmistoa lyhyissä sykleissä ja varmistaa, että se voidaan julkaista luotettavasti milloin tahansa. Tavoitteena on rakentaa, testata ja julkaista ohjelmistoa hyvällä nopeudella ja tiheydellä, mikä vähentää muutosten toimittamisen kustannuksia, aikaa ja riskejä tiheiden tuotantopäivitysten avulla.
Ero CI:n ja CD:n välillä
Jatkuva integraatio on lähestymistapa, jossa jokainen koodikannan muutos testataan automaattisesti, kun taas jatkuva toimitus on lähestymistapa, jossa muutokset, kuten uudet ominaisuudet, kokoonpanot ja virheenkorjaukset, saadaan tuotantoon turvallisesti ja nopeasti.
Kehitys ilman CI:tä vs. kehitys CI:n kanssa
| Kehitys ilman CI:tä | Kehitys CI:n kanssa |
|---|---|
| Paljon vikoja | Vähemmän bugeja |
| Harvoin sitoutuu | Säännölliset sitoumukset |
| Harvoin ja hitaita julkaisuja | Säännölliset työjulkaisut |
| Vaikea integrointi | Helppo ja tehokas integrointi |
| Testaus tapahtuu myöhään | Testaus tapahtuu usein ja aikaisin |
| Ongelmia on vaikeampi korjata | Ongelmat löytyvät ja korjataan nopeammin |
| Huono projektin näkyvyys | Parempi hankkeen näkyvyys |
Ero kääntämisen ja jatkuvan integroinnin välillä
Vaikka kääntäminen muuntaa koodin vain konekielelle, CI suorittaa useita laajempia toimintoja:
- Tietokannan integrointi: Pitää tietokannan ja koodin synkronoituna ja automatisoi tietokannan ja testidatan luomisen.
- Code tarkastus: Varmistaa terveen koodikannan, tunnistaa ongelmat varhaisessa vaiheessa ja soveltaa parhaita käytäntöjä.
- Automatisoitu käyttöönotto: Voit julkaista tuotteen milloin tahansa ja pitää sen jatkuvasti esittelykelpoisessa tilassa.
- Asiakirjan luominen: Pitää dokumentaation ajan tasalla ja tuottaa koontiraportteja ja mittareita.
- Kokoelma: Muuntaa korkean tason koodin konekielelle ja varmistaa, että se käännetään kaikilla kohdealustoilla.
Ihannetapauksessa koonti suoritetaan komentoriviltä IDE:n sijaan, tapahtuu jatkuvasti erillisellä CI-palvelimella (ei cron-työnä), käynnistyy jokaisen sisäänkirjautumisen yhteydessä ja tarjoaa välitöntä palautetta ilman kehittäjän vaivaa.
Mitä tarvitset CI-prosessin suorittamiseen?
- Versionhallintajärjestelmä (VCS): Luotettava tapa keskittää ja säilyttää projektiisi tehtyjä muutoksia ajan kuluessa.
- Virtuaalikone: Varapalvelin tai ainakin yksi virtuaalikone rakentaaksesi järjestelmäsi.
- Isännöidyt CI-työkaluratkaisut: Palvelimien hallinnan välttämiseksi isännöidyt ratkaisut ylläpitävät koko prosessia ja tarjoavat helpomman skaalautuvuuden.
- Työkalut: Jos valitset itse isännöidyn version, asenna CI-työkalu, kuten Jenkins, TeamCity, Bambootai GitLabia.
Miten jatkuva integraatio toimii?
Vanha esimerkki on Nokia, joka käytti aikoinaan nightly build -nimistä menettelyä. Useiden kehittäjien päivän aikana tekemien useiden committien jälkeen ohjelmisto rakennettiin joka yö. Koska se rakennettiin vain kerran päivässä, virheiden eristäminen, tunnistaminen ja korjaaminen suuressa koodikannassa oli tuskallista.
Later Tiimi otti käyttöön jatkuvan integraation (Continuous Integration). Ohjelmisto rakennettiin ja testattiin heti, kun kehittäjä teki koodia, joten kaikki virheet havaittiin välittömästi ja vastuullinen kehittäjä pystyi korjaamaan ne nopeasti.
CI:n ominaisuudet
- Mahdollistaa yhden lähdekoodin arkiston ylläpidon.
- Voit testata tuotantoympäristön kloonia, joka pidetään lähellä tuotantoympäristöä.
- Tarjoaa jatkuvan saatavuuden nykyiselle koontiversiolle.
- Tekee koko rakennus-, testaus- ja käyttöönottoprosessin näkyväksi kaikille sidosryhmille.
Miksi käyttää CI:tä?
- Auttaa sinua rakentamaan laadukkaampaa ohjelmistoa ja suorittamaan toistettavia testejä.
- Skaalaa suunnittelutiimien toimitustuotosta ja antaa kehittäjien työskennellä ominaisuuksien parissa rinnakkain.
- Lisää näkyvyyttä ja kommunikaatiota tiimissä.
- Antaa välitöntä palautetta ongelman ilmetessä ja vähentää riskiä tekemällä käyttöönotosta nopeampaa ja ennustettavampaa.
- Välttää viime hetken hämmennystä julkaisun yhteydessä.
CI-järjestelmien parhaat käytännöt
- Tee commit ajoissa ja usein, äläkä koskaan commitoi rikkinäistä koodia.
- Korjaa rakennusvirheet välittömästi ja toimi mittareiden perusteella.
- Rakenna jokaisessa kohdeympäristössä ja luo artefakteja jokaisesta rakennuksesta.
- Automatisoi koonti, jotta se ei ole riippuvainen IDE:stä.
- Rakenna ja testaa kaikki muuttuessa, mukaan lukien tietokannan kaava.
- Pidä koonti nopeana ja käytä automatisoitua käyttöönottoa.
CI:n haitat
- CI-palvelimen käyttöön tottuminen vaatii alkuasennusaikaa ja koulutusta.
- Sopivat testausmenetelmät on kehitettävä, ja hyvin rakennettu testisarja vaatii merkittäviä resursseja.
- Tuttuja prosesseja on muunnettava, ja tarvitaan lisää palvelimia ja ympäristöjä.
- Odotusaikoja voi esiintyä, kun useat kehittäjät haluavat integroida koodinsa samanaikaisesti.
Työkalut CI-prosessiin
Jenkins
Jenkins on avoimen lähdekoodin jatkuvan integraation työkalu, joka on kirjoitettu JavaSe helpottaa reaaliaikaista testausta ja yksittäisten muutosten raportointia laajemmassa koodikannassa ja auttaa kehittäjiä löytämään ja ratkaisemaan vikoja nopeasti samalla automatisoimalla koontitestausta.
Bamboo
Bamboo on jatkuvan integraation koontipalvelin, joka suorittaa automaattisen koonnin, testauksen ja julkaisun yhdessä paikassa. Se toimii saumattomasti Jiran ja Bitbucket ja tukee useita teknologioita, kuten Dockeria, Gitiä, SVN:ää, Mercurialia ja AWS:ää.
TeamCity
TeamCity on jatkuvan integraation palvelin, jossa on monia tehokkaita ominaisuuksia. Se pitää CI-palvelimen toimintakunnossa ja vakaana, vaikka mitään koontiversioita ei olisi käynnissä, ja tarjoaa paremman koodinlaadun mille tahansa projektille.

