Из техничких разлога садржај читалишта можете пратити искључиво на латиници.

CI/CD kao usluga: 10 alata za neprekidnu integraciju i isporuku u oblaku

Od Bitbucket-a i GitLab-a do AWS CodePipeline-a i Travis CI-ja, pogledajte ovih 10 usluga za oblak da biste automatizovali svoje softversko građenje, testiranje i implementaciju. Oblak i kontinuirana integracija (engl. CI - continuous integration) su prirodno povezani. Dok nas oblak oslobađa muke instaliranja i održavanja fizičkih servera, kontinuirana integracija automatizuje mnoge mučne poslove izgradnje, testiranja i implementacije našeg koda. Ako oboje ima za cilj da se rasterete razvojni timovi, ima smisla da se oni kombinuju i tako se jednim korakom eliminiše još više napora. Postoje mnoge usluge kontinuirane integracije i sve one rade uglavnom isto, bar u apstraktnom smislu. One počinju sa listom zadataka kao što su prevođenje ili testiranje, koji se moraju obaviti pre nego što svet počne da koristi genijalnost vašeg novog softvera. Kada potvrdite svoje linije koda, alati počinju izvršavanje po kontrolnoj listi sve dok ne naiđu na prepreku. Ako ne bude prepreka, svi su zadovoljni.

Svako može da koristi kontinuiranu integraciju za bilo koji projekat razvoja softvera, ali najveće prednosti uživaju timovi, po mogućnosti veliki timovi koji rade na istim, međusobno povezanim blokovima koda. Najtemeljitije implementacije kontinuirane integracije grade i obnavljaju kôd pre testiranja i ponovnog testiranja, sve u potrazi za novim greškama i nekompatibilnostima koje mogu da nastanu dok različiti članovi tima proveravaju svoj kôd. Serveri kontinuirane integracije sinhronizuju rad svih programera i pomažu timu da otkrije eventualne probleme.

Neke liste zadataka za CI server se završavaju testovima, ali u poslednje vreme sve više timova proširuje listu tako da uključe implementaciju novog koda, proces koji se ponekad naziva i „kontinuirano uvođenje“. Potpuno automatizovana implementacija ponekog uznemirava, pa često u proces dodaju neke ručne pauze. Dodavanje izvesne ljudske odgovornosti i osiguranja omogućava im da se malo opuste. Ovaj hibridni pristup naziva se "kontinuiranom isporukom" (engl. CD - continuous delivery) jer isporučuje kôd nekom klasteru za održavanje ili testiranje, gde čeka da čovek donese konačnu odluku o puštanju u proizvodnju.

Ako je kontinuirana integracija odlična u serverskoj sali na kraju hodnika, ona može da bude još bolja u oblaku, gde postoje velike mogućnosti za bržu isporuku i veću efikasnost. U najboljem slučaju, oblaci mogu da podele posao i izvršavaju zadatke paralelno. Usluge kreću sa velikom količinom hardvera i zatim ga dele među mnogim timovima. Ukoliko svi ne guraju svoj kôd u isto vreme, gradnje i testovi će ići mnogo brže. Kupovina iste velike količine hardvera samo za trenutke kada programeri žele da pokrenu sve testove je preskupa, ali ako timovi dele hardver, svi mogu da uživaju u većim brzinama.

Međutim, postoje opasnosti i brige, a najveća može biti gubitak kontrole. Sve usluge u oblaku zahtevaju predavanje vašeg koda drugome, izbor koji nekima može delovati oslobađajuće, ali drugima zastrašujuće. Svi servisi u oblaku se trude da naglase bezbednost, ali se nekako osećate drugačije kada je kôd pod vašim vlastitim krovom.
Pored široke podrške za sve glavne jezike, ove usluge pokrivaju iznenađujući broj manje poznatih i više zaista čudnih i neobičnih jezika. To je pre rezultat dobrih početnih arhitektonskih odluka nego nekih herojskih napora od strane razvijalaca. Liste zadataka su skoro uvek kodirane kao komande za neku ljusku ili komandnu liniju, tako da alati za kontinuiranu integraciju uglavnom samo izdaju komande dok se lista ne iscrpi, ili se ne pojavi neka nepremostiva prepreka. Neki od jezika kao što je Java nude sofisticiranije opcije, ali u većini slučajeva alati mogu da postignu ono što može da se uradi pomoću komandne linije.

Evo 10 različitih opcija za kontinuiranu integraciju u oblaku.

CloudBees

CloudBees Core je počeo sa Jenkinsom, poznatim projektom otvorenog koda za kontinuiranu integraciju, zatim je dodato testiranje, podrška i izvesno obezbeđenje da će kôd da se izvršava. Kompanija je izbacila sve eksperimentalne dodatke, dodala nekoliko svojih, a zatim uglancala one prave tako da rade onako kako se očekuje kada su vam potrebni.
CloudBees i dalje zapošljava 80% Jenkinsovog razvojnog tima i oni često doprinose projektu otvorenog koda, tako da možete biti sigurni da dobro razumeju ovu dominantnu platformu. Da bi se stvari ubrzale, CloudBees je takođe dodao obimnu paralelizaciju, kao i instrumente za praćenje procesa razvoja.  CloudBees nudi raznovrsne cene koje se kreću od besplatnog nivoa do "početnih kompleta" za celu godinu usluge. Kompanija takođe prekida podršku za Jenkins svakome kome je potrebna pomoć sa alatom, ali mu nije potrebno ili ne želi računarstvo u oblaku.

AWS CodePipeline

Amazonova alatka za kontinuiranu integraciju i implementaciju, AWS CodePipeline, optimizovana je za isporuku koda na AWS server, ali je još uvek otvorena za razrađenije putanje vašeg koda i podataka. Osnovni alat nudi lep izbor unapred konfigurisanih okruženja izgradnje za glavne jezike (Java, Python, Node.js, Ruby, Go, Android, .Net Core za Linux), a zatim spušta rezultat u S3 baket pre nego što ga pošalje na server da se izvršava. Postoji iznenađujuće veliki broj slojeva sa donekle različitim imenima. CodeBuild hvata vaš najnoviji genij iz CodeCommit-a kada ga pokrene CodePipeline, a zatim prenosi rezultat u CodeDeploy. Ako vam je to previše kodnih stvari za konfigurisanje, možete da preskočite pravo na CodeStar, koji nudi još jedan sloj automatizacije. Kada bi samo postojao CodeBugEraserStar koji bi automatski izbrisao sve naše greške. Vredi napomenuti da tehnički ne plaćate nijedan od ovih Code slojeva. Amazon vam naplaćuje samo računarske i skladišne resurse koji se koriste na tom putu. To i nije baš besplatno, mada izgleda kao da jeste.

Bitbucket Pipelines

Atlassian, programeri popularne ploče za praćenje poslova, Jira, i repozitorij koda, Bitbucket, odlučili su da iskoriste svoj radni proces tako što su napravili Bitbucket Pipelines, alat za kontinuiranu integraciju u oblaku Bitbucket. Tajna je u što više integracije, u ovom slučaju u obliku veza između mehanizma izgradnje i drugih Atlassianovih alata. Barem kozmetički, Pipelines čak nije ni zasebna stvar. To je samo dodatna opcija menija za svaki projekat u Bitbucket-u. Druga opcija menija ukazuje na implementacije, a ona vam omogućava da izaberete gde će izgradnje završiti. Veze su i sreća i ograničenje. Ako izaberete jedan od već definisanih šablona za glavne jezike (Java, JavaScript, Python, PHP, .Net, itd.), možete da napravite i implementirate svoj kôd u nekoliko pritisaka mišem. Ali ako se udaljite od standarda, primetićete da opcije nedostaju. Atlassian ohrabruje tržište aplikacija koje predstavljaju kombinaciju dijagrama i veb-ručica ka drugim uslugama. Alikacija na vrhu dijagrama, dok ovo pišem, povezaće Bitbucket sa Jenkinsom, verovatno da bi se obavilo nešto što se ne može uraditi brzo unutar zidova.

Osnovna prednost Pipelinesa je brzina. Atlassian je već pripremio većinu glavnih putanji od koda do pokretanja implementacije, pa možete za svega nekoliko dolara da se ugledate na kompaniju. Teško je uporediti cenu korišćenja Bitbucket-a zato što se, kao i većina modela bez servera, cene odnose na minute, ali timovi često prave namenski klaster instanci koje upravljaju Jenkinsovim gradnjama. Čak i ako ih isključujete noću i vikendom, sati se sabiraju.

GitLab CI/CD

Jedan od najvećih konkurenata Atlassian-a je GitLab, druga kompanija koja želi da obradi svaki korak od procesa koji imate u ruci do implementacije koja funkcioniše. Mehanizmi GitLab-a za izgradnju, testiranje i implementaciju su takođe direktno povezani sa njegovim Git repozitorijumima tako da se mogu aktivirati čim se potvrde. Proces se uglavnom gradi oko Docker kontejnera i ovo keširanje može u velikoj meri da pojednostavi neke poslove konfigurisanja koji moraju da se obave oko Jenkinsovih konstrukcija.
Zadaci izgradnje mogu da budu usmereni na bilo koji jezik, ali mora da ih pokreće GitLab Runner, automatski skalirana alatka napisana u jeziku Go, spremna za većinu platformi. Ova fleksibilnost znači da možete pokrenuti bilo koji posao na drugim mašinama, nešto što bi moglo biti korisno sa razrađenim arhitekturama koje rade više od puke isporuke mikroservisa.

Cene su vezane za različite nivoe kako bi se aproksimirala potreba. Gold tier grupe, na primer, dobijaju sve najbolje mogućnosti kao što su kontrolne table za bezbednost i 50.000 minuta izgradnje na zajedničkom klasteru mašina. Nema naknade ako se za deo procesa koriste sopstvene mašine ili zasebne instance u nekom drugom oblaku.

CircleCI

Mnogi od alata za neprekidnu integraciju fokusiraju se na kôd koji može da se izgradi u Linux okruženju. CircleCI gradi i isporučuje u Linux svetu, ali nudi i proizvod koji gradi Android aplikacije i sve što spada u Apple-ov Xcode ( iOS, MacOS, tvOS, ili watchOS). Ako radite u timu koji proizvodi aplikacije za ove platforme, možete da potvrdite svoj kôd i dozvolite da CircleCI primeni neku disciplinu testiranja na svim divergentnim genijima vašeg tima. Liste zadataka se pišu u YAML fajlove. CircleCI koristi Docker, u svoj njegovoj višeslojnoj veličini, da konfiguriše test okruženja za kôd. Izgradnja počinje sa svežim kontejnerima, a takođe i svi testovi. Mac radi na virtuelnim mašinama koje imaju sličan kratak životni vek. Tako se izbegavaju neki problemi sa konfigurisanjem, jer čista okruženja nemaju zaostale bitove. (Dakle, ako je vaše probleme prouzrokovao digitalni otpad, pa, sami ste krivi).

Cena zavisi od toga koliko vaše gradnje troše procesor. Broj korisnika i broj spremišta mogu da idu u beskonačnost. Međutim, meri se broj minuta gradnje i kontejneri koji prave ovu gradnju. Prvi kontejner je besplatan i u njemu možete da izvršite jednu gradnju. Ako želite više paralelizma ili više propusnosti, CircleCI zarađuje više. Korisnici Mac računara ne dobijaju istu besplatnu ponudu, ali postoje uvodni planovi za svakoga ko testira uslugu.

Travis CI

Ako vaše gradnje proizvode kôd koji treba testirati na Windows boxu, Travis CI vam je jedno rešenje. Kompanija već neko vreme nudi MacOS i Linux opcije, ali je upravo izašla Windows opcija, što pojednostavljuje izradu koda koji će raditi na još više mesta. Liste zadataka se takođe navode u YAML-u i poslovi se izvode u čistim virtuelnim mašinama sa prilično standardnom konfiguracijom. Linux kôd dobija neke osnovne verzije Ubuntu-a, Mac kôd radi u jednoj od desetak kombinacija OS X, Xcode i JDK. Windows kôd za sada može da se završi samo u jednoj verziji Windows Servera (1803). Travis CI nudi dugačku listu od 30 jezika i pravila za izgradnju koja su unapred konfigurisana i prilično spremna za izvršavanje. Cene se zasnivaju na tome koliko istovremenih poslova može da se izvrši odjednom, ali ne postoje formalne granice za broj minuta koje ove gradnje mogu da utroše. Kao da dobijate fiksni broj namenskih instanci za svoj rad i one su spremne sve vreme. Ne postoje besplatne opcije za vlasnički rad, ali projekti otvorenog koda su „uvek besplatni“ - tako da je to možda najjednostavniji način da se isproba Travis CI.

Azure Pipelines

Ako se pitate da li moderni Microsoft ima stav "Nije naše", ne tražite dalje od Azure Pipelines. Komercijalna literatura kaže: "Bilo koji jezik, bilo koja platforma." Iako je to skoro sigurno pomalo hiperbola, a Azure verovatno nema mnogo toga da ponudi ENIAC programerima, on na vidnom mestu nudi Microsoft, Linux i MacOS putanje za vaš kôd. Apple deo cilja samo MacOS-ove, ne iOS ili tvOS ili watchOS, ali nemojmo biti izbirljivi. Ovo je čaša koja je više od pola puna. U apstraktnom smislu, sistem je sličan ostalima. Postoje agenti koji izvršavaju gradnje da bi proizveli artefakte. Neki od njih mogu da budu na samostalnom hostu, ako ta opcija pomaže. Stek u potpunosti obuhvata Docker kontejnere, a Azureov hardver je spreman da vam ih izvrši. Sve ove detalje možete da sastavite sa vizuelnim dizajnerom ugrađenim u veb stranicu, ili sa YAML-om ako više volite da živite u svetu komandne linije.

Cene počinju od besplatnog “paralelnog rada” sa 1800 minuta vremena izgradnje. Ako želite više paralelizma ili više vremena, počnite da plaćate. Plan uključuje velikodušni besplatni nivo za projekte otvorenog koda, opet naglašavajući Microsoftovu želju da učestvuje u opštoj zajednici otvorenog koda. Ali ako Microsoft treba da potroši 7,5 milijardi dolara da bi dobio mesto za stolom tako što će kupiti GitHub, onda je to i logično. Gde će sav taj kôd da se izvršava? Azure Pipelines će ga vrlo rado lako prebaciti na Azure hardver.

CodeShip

Konfigurisanje liste zadataka je često najveći izazov kada se koristi alat za kontinuiranu integraciju. CodeShip ima dva različita pristupa tome, u dva nivoa usluge. Osnovni plan ("Basic") uključuje dosta automatizacije i pre-konfiguracije uz grafički korisnički interfejs za postavljanje grubog plana zadataka. Sve ostalo gotovo da ne morate da radite. Verzija „Pro“ omogućava vam da zađete pod haubu i petljate sa konfiguracijom i Docker kontejnerima koji se koriste za definisanje okruženja za izgradnju. Možete da birate koliko će mašina za gradnju biti posvećeno vašim zadacima, kao i koliko dobro će one biti opremljene. Na neki način, ovo je suprotno od načina na koji svet obično funkcioniše. Plaćate više, a imate više posla. Takozvani osnovni korisnik ima sve automatizovano. Ne izgleda pošteno, dok ne poželite da uradite nešto što nije uobičajeno, pa osetite potrebu za nadogradnjom iz Basic u Pro.

Plan Basic nudi besplatan nivo sa jednom mašinom za gradnju, neograničenim brojem projekata i ljudi, ali samo 100 gradnji mesečno. Dakle, ako imate više od 100 projekata, moraćete da platite ako želite da ih sve kompajlirate za mesec dana. Kada počnete da plaćate, ne postoji ograničenje broja gradnji ili koliko minuta traju. Vi samo birate koliko će mašina za gradnju i test mašina raditi na vašim zadacima. Plan Pro takođe počinje od besplatne opcije, ali kada počnete da plaćate, vaš račun zavisi od veličine i broja instanci u oblaku posvećenih vašem radu.

Sauce Labs

Većina navedenih alata specijalizovana je za uređivanje kako kôd teče od spremišta do uvođenja. Sauce Labs je fokusiran na testiranje. Usluga zasnovana na oblaku nudi neverovatno široku paletu kombinacija za proveravanje da li sve funkcioniše. Želite da testirate na Firefoxu 58 koji se izvršava na Windowsu 10? A šta za Firefox 56 na MacOS-u? Sve je spremno za vas. Kombinatorika brzo generiše najraznovrsnije opcije platformi za najupornije testere. Skriptovi za testiranje mogu da se pišu na jeziku koji odaberete - ukoliko odaberete jedan od standarda kao što su Java, Node, Ruby ili PHP. Oblak procesora će paralelno ciljati svaki. Sauce Labs je takođe specijalizovan za integraciju testova sa drugim CI alatima ili cevovodima. Tako da možete da pokrenete Jenkins lokalno, a zatim delegirate testiranje u Sauce Labs.

Cene počinju nisko za “živo” testiranje - tj. testove koje pokrećete i procenjujete sami. Platićete više za automatizovano testiranje, mereno minutima i brojem paralelnih putanji. Sauce Labs takođe ima opciju da testira vaš softver na bilo kojem od stotinu stvarnih uređaja u oblaku kompanije.

Jenkins i Hudson

Ponekad samo želite da to uradite sami. Jedan od najjednostavnijih načina za pokretanje kontinuiranog integracijskog cevovoda u oblaku je da iznajmite instancu servera i pokrenete Jenkins ili Hudson. U mnogim slučajevima, već postoji gotova slika nekog od dobavljača kao što je Bitnami koja samo čeka da je pokrenete. Dženkins i Hadson su jako davno počeli kao jedan isti program za testiranje Java koda na greške, ali su se podelili u dva tabora kada je došlo do spora između nekih programera i Oraclea. Detalji nisu toliko važni, ali podela pokazuje kako licence za otvoreni kôd daju programerima pravo da donose odluke o kodu tako da ograniče kontrolu nominalnih vlasnika.
I mada su Jenkins i Hudson počeli kao alatka za gradnju Java projekata, oni su odavno prerasli tu nišu. Sada ih timovi koriste za rad sa skoro svim jezicima, pa postoji na hiljade dodataka za gradnju, pakovanje, testiranje i implementaciju. Kôd je otvoren, tako da nema dodatne naknade za njegovo korišćenje. Vi samo plaćate za server - i vaše vreme za njegovo konfigurisanje.

Izvor: InfoWorld

Рачунарски факултет Рачунарски факултет 011-33-48-079