Ivan Sinek
Autor:
Ivan Sinek

Programer za C#.NET programski jezik

Continuous Delivery s Team Foundation Serverom

DevOps movement

Kod razvoja softvera ponekad samo planiranje i pisanje koda nisu veliki problem, nego do problema dolazi kod isporuke proizvoda klijentima. Kako bi se izbjegli problemi s isporukom i kako bi se cijeli proces isporuke ubrzao koristi se Continuous Delivery. Release Management je integriran unutar sustava od Team Foundation Server-a 2015  i nema potrebe za dodatnim instalacijama.

Što nam je donijela takva integracija s TFS-om? Najveća prednost je Continuous Integration pomoću kojega se može napraviti nova verzija softvera za svaku promjenu u kodu. Uključivanjem CI-a kod svake promjene koda (Check-In) izvršava se automatski build nove verzije odabranog rješenja.  Ovakav pristup zahtjeva da kod svake promjene koda softver bude stabilan i sve njegove funkcionalnosti rade. To je ponekad veliki izazov za nas programere jer je potrebno postići disciplinu pisanja koda i testiranja istog kako bi se osiguralo da svi dijelovi sustava rade. Za organizaciju rada uglavnom koristimo TFS Scrum predložak i zbog toga vrijedi pravilo da se cijeli Product Backlog Item ili ispravak Buga šalju na server odjednom. Ako PBI ili Bug nije moguće riješiti jednom promjenom koda, tada je potrebno drugačije organizirati backlog.

Nakon automatskog pokretanja i izvršavanja builda trenutne verzije koda, istu verziju je moguće automatski ili ručno isporučiti na jednu ili više okolina. S obzirom na velik broj verzija softvera prirodno je da će se isporuke događati puno češće nego što je to slučaj bez Continuous Deliveryja. Za programere je to dobra vijest jer će isporuke ići češće s manje uloženog vremena, a u slučaju kritične logičke pogreške u softveru, bez ikakvih problema će moći osigurati isporuku zadnje ispravne verzije. S druge strane, ova promjena ponekad teško pada korisnicima ako i oni testiraju softver prije njegove isporuke u produkciju. Problemi nastaju ako korisnici nisu navikli redovito testirati verzije softvera ili u svom poslovnom procesu uopće nemaju predviđeno vrijeme za testiranja. No, kada klijent prihvati obavezu redovitog testiranja, sam proces izrade softvera, ispravka grešaka, isporuke softvera, ali i testiranja postaje brži i fluidniji.

Dodatna prednost je to što su verzije softvera isporučene na različite okoline uvijek identične, što kod ručne isporuke ponekad nije slučaj. Time se dobiva konzistencija isporuke i dodatno se osigurava da korisnik dobije testiranu verziju bez dodatnih promjena. Još jedna prednost je to što se isporuka uvijek odvija identičnim postupkom čime se osigurava uspješnost isporuke, te se smanjuje broj mogućih problema. Kod ručne isporuke softvera ponekad uspješnost isporuke ovisi o tome tko od programera izvršava isporuku, a moguća je i situacija da programer koji treba izvršiti isporuku nije dostupan u željeno vrijeme isporuke. Kod automatske isporuke ako u nekom slučaju i dođe do problema s isporukom ili nisu na vrijeme utvrđeni problemi u radu softvera, s nekoliko klikova miša se može izvršiti isporuka stabilne verzije softvera na sve okoline.

Release process

Pošto sustav prati verzije softvera, nema potrebe za dodatnim branchevima nego se cijeli razvoj odvija na osnovnom branchu. Time se eliminira vrijeme utrošeno na spajanje koda između brancheva i smanjuje se mogućnost pogreške nastale kod spajanja svog i tuđeg koda. Dakako, tu postoje i iznimke poput novih velikih dijelova sustava ili featurea koji se ne smiju pojavljivati kao djelomična rješenja, prebacivanje cijelog softvera na noviju verziju operacijskog sustava, IIS-a, baze podataka i slično. Prema našem iskustvu, u takvim situacijama i dalje je bolja opcija izraditi novi branch koji će dobiti svoju odvojenu build definiciju i definiciju isporuke. Time se omogućava nesmetani razvoj programerima koji rade na drugim dijelovima sustava.

vNext vs Team Foundation Server Release Management

Za razliku od prijašnjeg vNext Continuous Delivery rješenja za TFS, sada je potrebna instalacija samo jednog agenta koji može obavljati i build i isporuku softvera. Proces izvršavanja operacija više se ne opisuje XAML dijagramima nego listom naredbi s predefiniranim naredbama ili vlastitim skriptama.

S obzirom na to da je RM dio TFS-a koji se lako integrira s Visual Studiom, moguće je koristiti Visual Studio Marketplace na kojem postoje korisne skripte i dijelovi procesa isporuke u posebnim uvjetima. Zbog toga više ne postoji potreba da se svaki dio procesa isporuke izrađuje ručno, nego je lakše preuzeti provjerene dijelove s Visual Studio Marketplacea.

VisualStudio Marketplace

Jedan od nedostataka TFS RM-a je to što ne postoji automatski rollback mehanizam ili princip transakcije. Za neke specifične slučajeve bi bio koristan kako se isporuka ne bi morala nadzirati od strane programera, testera ili neke treće osobe zadužene za isporuku softvera. Time bi osigurali automatizirani proces koji uvijek isporučuje stabilnu verziju softvera i gotovo da ne ostavlja prostora za greške.

Agent

Za svaki projekt moguće je izraditi zaseban agent pool koji će se sastojati od minimalno jednog agenta zaduženog za build i isporuku projekta. Dodavanjem više agenata u agent pool omogućavamo paralelno izvršavanje radnji što ponekad može značiti znatno bržu isporuku softvera klijentu. Ako je jedan agent zadužen i za build i za isporuku softvera, dešavat će se da isporuka zastane na neko vrijeme jer build ima veći prioritet i ako proces isporuke nije započeo, build će se izvršavati prije.

Ponekad postoji potreba da jedan ili više specifičnih agenata izvršava neki dio procesa isporuke. Takve slučajeve osiguravamo varijablama koje opisuju sposobnosti agenta (agent capability). Ako se agentove sposobnosti slažu sa zahtjevima okoline (environment demands), tada je agent sposoban izvršiti isporuku softvera na okolinu. Ovakav slučaj je ponekad potreban kod isporuke na servere koji nisu unutar domene, te je na agentovom serveru potrebno koristiti VPN što možda na nekim serverima nije moguće iz sigurnosnih razloga.

Agent and Environment

Glavni izazovi prebacivanja na continuous delivery

1.     Build baze podataka

Jedan od najvećih izazova je svakako postići potpuno ispravnu verziju baze podataka unutar Visual Studio Source Controla, naročito ako baza podataka nije stvarana kroz Visual Studio. Probleme često stvara korištenje pomoćnih tablica koje se koriste kroz nekoliko procedura, u Visual Studiju takav pristup jednostavno nije moguć. Dodatne komplikacije stvara korištenje povezanih servera (linked servers). U tom slučaju je obavezno dodavanje i korištenje varijabli kako bi na svakoj okolini serveri i baze podataka mogli imati različita imena.

2.     Poslovni proces

Podrazumijeva se da do problema dolazi i s poslovne strane. Često korisnici ne vide potrebu za ovakvim načinom isporuke softvera. Unatoč tome treba ustrajati u provođenju continuous delivery procesa kako bi se olakšao proces testiranja i smanjilo vrijeme isporuke. Ako unutar procesa isporuke postoji i user acceptance test kojeg su korisnici zanemarivali, potrebno ih je uvjeriti da je testiranje važan korak koji se mora redovito obavljati kako bi na produkcijskoj okolini sve radilo kako je očekivano. Nakon kratkog vremena korisnici će i sami vidjeti prednosti isporuke malih dijelova softvera, djelomično će dobiti uvid u brzinu i kontinuiranost rada, neće odjednom morati prolaziti cijeli softver kako bi ga testirali i time će uštedjeti vrijeme.

3.     Okoline

Kod okolina problemi dolaze ako se radi o serverima visoke sigurnosti. Potrebno je uložiti puno vremena u pisanje vlastitih skripti koje će odrađivati dijelove procesa isporuke, te dodjeljivanje prava korisnicima koje će koristiti samo TFS RM za automatsku isporuku. Čak i korištenje VPN-a može biti jedna od stavki koja će biti otežavajuća okolnost.

Popularne teme
.NET ABAP ADFS Agile Always On Anemic Model Angular automatsko generiranje dokumnetacije Azure Backbone benchmark BI BI projekti Bootstrap building people business inteligence Business Intelligence Change Chrome CI CITCON Claims compile Continuous Delivery continuous deployment Continuous Integration CSR d3js data data visualization Data visualization alati DDD dekompozicija dependency injection dinamička forma dinamički parametri dinamički query distribuirani razvoj dokumentacija Domain-Driven design DOP društvena odgovornost edge-based video analytics Eliminating waste enkapsulacija enterprise razvoj softvera ERP ETL Excel FIORI Frontend funkionalna dokumentacija game Geopackage GPKG GIS Git Groovy heat map HICCUPS Hichert HTML IBCS interoperability invision IoT IPSO izvještavanje java JavaFX Javascript Jazz Build Engine JBE Jenkins jquery jqueryui jsfiddle JVM Kaizen Kanban king KING ICT Kingovci Knockout kvaliteta lambde leadership Lean legacy code M language Management Maven Metodologija microservices Microsoft mobile Mobility mockups moć monday game NetWeaver network nodejs oblikovni obrasci OGC OKR open source optimizacija organizacija organizacijska struktura OutOfMemoryError outsourcing overengineering paginacija Performance performanse PERT PMI PMP; Agile; Project management; Scrum; KING ICT; razvoj; metodologija podatkovni skup pouzdanost Power BI Power Map Power Pivot Power Query Power View pretraga proces procjena Product Owner programming proizvod Project manager projektni plan radar Rational Team Concert razvoj tima refaktoriranje Release resize responsive charts REST retrospektiva Rich-Domain model Roko Roić rolling wave planning RTC SAP scale scatterplot chart Scrum scrum team scrum tim service boundaries single responsibility principle Single Sign-On smart metering SoapUI social responsibility softver Software software prototyping Software Testing Club Spring Boot SQL standard sustav videonadzora svg swagger tdd Team team building team development Team Foundation Server tech tehnologije terminski plan Testing tim timesheet timovi Toggl.com touch transakcijski nadzor tražilica underengineering unit testing Uspjeh Visual Studio vodstvo vodstvo leadership moć društvena odgovornost DOP social responsibility CSR vođenje projekata WBS Web Zagreb STC

PRIJAVA NA NEWSLETTER

Najnovije novosti iz ICT svijeta