Upload
janis-baiza
View
180
Download
3
Embed Size (px)
Citation preview
Delivery automation roadmap / Ceļš uz automatizētām piegādēm
Jānis Baiža
@jbaiza
Oracle pieredze > 10 gadi.
Oracle, .NET, Ruby, Java
1 – 20+ cilvēki projektā
Dažādas piegāžu automatizācijas pakāpes
Dibināta: 04.06.2014 apvienojoties SIA Special Solutions, SIA eBIT unSIA Open ID
Darbinieki: ~100
Tehnoloģijas: Oracle PL/SQL, Java, Ruby, Microsoft .NET, ĢIS
Jautājumi par automatizāciju
Vai izmanto automatizāciju?
Kādus rīkus izmanto (Jenkins/Bamboo/cits)
Vai esi pārliecināts par to, ka piegādes sagatavošana/uzstādīšana ies pēc plāna?– Ļoti pārliecināts– 50/50– Neesmu pārliecināts
Rīki
JENKINS
https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins
Vienkārša instalācija
java -jar jenkins.war.
Viegla konfigurēšana
Visa konfigurācija no UI ar paskaidrojumiem, nav nepieciešama XML labošana vai kas cits tamlīdzīgs.
Izmaiņu kopas
Jenkins var ģenerēt izmaiņu sarakstus no Subversion/CVS.
Rezultātu paziņošana
Būvējumu rezultāti RSS/E-pastā vai reālā laika paziņojumi.
Build Notifiers – vairāk kā 50 spraudņi– Skype– Google calendar– IRC– Sladiator
JUnit/TestNG testu atskaites
Testu atskaites var tikt analizētas un vizuāli attēlotas ar vēsturisko informāciju.
Sadalītie būvējumi
Jenkins var sadalīt būvējumu veikšanas/testu slodzi starp vairākiem datoriem un dažādiem OS.
Spraudņu atbalsts
Jenkins funkcionalitāte var tikt paplašināta ar trešo pušu spraudņiem (vairāk par 900 dažādiem)
Java/Ant/Maven versijas
Iespējams definēt fiksētas produktu versijas un projektā izmantot nepieciešamo versiju
Izmaiņu piegādes process
Izstrāde Vienībtesti Testēšana
Piegādes pakas sagatavošana
Piegādes uzstādīšana
PiegādePiegāde
IZMAIŅU IZSTRĀDE
Izmaiņu izstrāde – manuāli
Rakstīt pārbaudes vai tabula izveidota/kolonna pievienota u.t.t.
Manuāla formu un citu objektu nogāde uz aplikāciju serveri.
Izmaiņu izstrāde/sagatavošana commit-am - automatizēšana
Atkārtoti darbināmi skripti:– Pārbaude par iespēju veikt darbību– Skriptu reģistrs, lai nemēģina izpildīt otru reizi
Gatavi paraugi dažādām darbībām (CREATE TABLE/ALTER TABLE/CREATE INDEX, u.t.t.)
Automatizācijas iespējas:– Konvertācija no ruby migrācijām– DB struktūras salīdzināšana ar VCS– Formu un citu objektu nogāde uz aplikāciju serveri
– lokāli darbināms “piegādes savākšanas” skripts
Commit testa DB / Vienībtestu automātiska darbināšana
Pēc commit automātiska DB izmaiņu uzlikšana testa DB– Pārbauda vai skripti darbosies– Sagatavo vidi vienībtestiem
Vienībtestu automātiska darbināšana
IZMAIŅU NOGĀDĀŠANA TESTĒŠANAI
Izmaiņu nogādāšana testēšanai - manuāli
Izmainīto failu savākšana ar rokām, piemēram, pēc SVN log.
Izmainīto aplikāciju servera failu kopēšana uz serveri.
DB piegādes uzstādīšanas kopējais SQL skripts.
Pieteikumu statusu maiņa (bulk edit)
Izmaiņu savākšana/sagatavošana
Java/.NET – Maven, Ant, MSBuild
Oracle Forms/Reports, DB (ja nepiegādā ar app migrācijām) – savāc izmaiņas no repozitorija– Instalācijas secība
• Stingri definēta starp dažāda veida objektiem (Tabulas -> Indeksi -> Skati -> … -> Procedūras -> … -> Dati -> … -> Oracle Forms -> …
• Commit secībā• Objekta ietvaros alfabētiski
Izmaiņu uzstādīšana
Java – uzkopē war/ear/jar
.NET – web deploy/copy
Ruby – Capistrano
Oracle Forms/Reports, DB (ja nepiegādā ar app migrācijām)– “master” skripts, kurā definētas darbības
dažāda veida objektu uzstādīšanai– ģenerēts skripts ar visām uzstādāmajām
izmaiņām.
Savākšanas/Uzstādīšanas automatizēšana
Maven, Ant, MSBuild – Jenkins iebūvēts/plug-in
Shell/Powershell skriptu darbināšana no Jenkins
Integrācija ar Jira - Jira Issue Updater Plugin
PIEGĀDES PAKAS SAGATAVOŠANA
Piegādes pakas sagatavošana
Piegādes failu savākšana
Arhīva izveidošana
Arhīva kopēšana uz serveri
Piegādes dokumentācijas “dzejošana”
Izmaiņas pieteikumu sistēmā (statusi/versijas/komentāri)
Nogādāšana līdz klientam
SFTP
Repozitorijs commit -> push -> instalē pēc tag
Direct build (ja ir piekļuve klienta vidēm)
Caur e-pastu, caur JIRA
Slikti: Repozitorijā iekommitots sakompilēts binārais fails
Slikti: Klients pats build-o – var nesakrist darbstacijas konfigurācijas, pastāv iespēja, ka pielabos kodu.
Pakas informācija
Informācija par piegādi– Ar roku rakstīts -> E-pasts no template ->
Automātiski aizpildīts template -> Nosūtīts/pārsūtīts gatavais e-pasts
Statusu maiņa/komentāri pie pieteikuma
Piegādes dokumentācija– Eksports no pieteikumu sistēmas– Ģenerēts
• Caur JIRA API• Markdown (teksts -> PDF)
Pakas uzstādīšana
Maksimāli automatizēts, bet ar monitorēšanas un reaģēšanas iespēju.– NOATTEND_INSTALL, NOATTEND_LEVEL
• There was a warning during installation. Press enter to continue
• There was an error during installation. Do you wish to continue [y|n]
Rollback uz iepriekšējo versiju
Atgriezeniskā saite par versijas uzlikšanu– Master -> Test -> Prod
“ONE CLICK” AUTOMATIZĀCIJA
Jenkins / Build pipeline
Jenkins / Build pipeline (2)
KOPSAVILKUMS
Manuāli
Neliels izmaiņu apjoms
Nē!
Automatizēšana - Legacy projekti
Necenties automatizēt bardaku – var būt ilgi un neoptimāli.
Jāmaina domāšana pašiem/klientam.
Automatizēšana ir laikietilpīga.
Automatizācija kā apakšprojekts.
Nevajag uzreiz 100% - galvenais sākumā karkass, uz kura būvēt. Kļūdu novēršana var būt laikietilpīga.
Kļūdas piegādes savākšanā var izraisīt problēmas sistēmā.
Atkārtojami instalējami skripti.
Never ending story – vienmēr ir vieta uzlabojumiem.
Automatizēšana - Jauni projekti
Jau uzsākot izmantot arhitektūru, kas atvieglo piegāžu automatizēšanu
Pēc iespējas, dalīt neatkarīgi piegādājamos moduļos - high cohesion, low coupling
Paldies par uzmanību! Jautājumi?
Feedback
Sponsors of XXIX DevClub.lv