Continuous Delivery: Problémák és megoldások (http://bit.ly/1rjqond) Agenda - miről lesz szó. Agenda - miről nem lesz szó. Continuous Delivery

Hasonló dokumentumok
Programozási technológia 2.

Code review és continous integration toolok BME-MIT

Szoftver technológia. Continuous integration & delivery. Cserép Máté ELTE Informatikai Kar 2019.

A DevOps-kultúra eszközei

Több app. Egy kódbázis

AZ APACHE MAVEN ÉLETE ÉS HALÁLA.! Cservenák Tamás

A FEJLESZTÉS KIHÍVÁSAI

Viczián István IP Systems JUM XIX szeptember 18.

Automatikus teszt futtatás, build keretrendszerek

Automatikus teszt futtatás, folytonos integráció

Hello Maven. JSE vs. JEE, JEE vs Spring. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 2. Bedők Dávid v0.

CI gyakorlat segédlet

(Teszt)automatizálás. Bevezető

Source control systems. Horváth Ernő, Dr. Pozna Claudiu Radu

Java Programozó képzés A&K AKADÉMIA 2019.

Gyakorlat és házi feladat tájékoztató

Projektek menedzselése Apache Maven segítségével

A fordítónak mindenhez lehet

Iványi László ARM programozás. Szabó Béla 1. Óra Verziókövetés

Build keretrendszerek

Private Cloud architektúra keretrendszer

Apache Maven. Jeszenszky Péter Debreceni Egyetem, Informatikai Kar Utolsó módosítás: március 8.

Térinformatikai és távérzékelési alkalmazások fejlesztése. A szoftverfejlesztés technikai támogatása

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Szabálykezelés a gyakorlatban

A Java EE 5 plattform

Automatizált Java Build. ApacheAnt használatával

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Petőfi Irodalmi Múzeum. megújuló rendszere technológiaváltás

Mobil Informatikai Rendszerek

Git verziókezelő. Készítette: Hugyák Tamás. Pannon Egyetem Műszaki Informatikai Kar v1.0

Java Parancssor Maven-nel

Tortoise SVN használata. Képes útmutató

Fejlesztési projektek menedzselése IBM Rational CLM termékekkel. Ker-Soft Kft. Kaszás Orsolya - üzleti tanácsadó

Agilis tesztkörnyezeti teljesítménymenedzsment

Javadoc. Dokumentációs megjegyzés (2) Dokumentációs megjegyzés (1) Dokumentációs megjegyzés felépítése

Verifikáció és validáció Általános bevezető

Közösség, projektek, IDE

Könyvtári címkéző munkahely

Kinek szól a könyv? Hogyan épül fel a könyv? Megjelenés előtti szoftver A hálózati kézikönyv tartalma A könyv támogatása Kérdések és megjegyzések

STANDARD DEVELOPMENT U.L. FACTORY SYSTEMS GROUP IT DEPARTMENT

Microsoft SQL Server telepítése

Módszerek Vizsgálata. Diplomamunka

Miről lesz szó? Setup Project készítése. Tulajdonságok. 1. Készítsünk egy setup project alkalmazást egy már elkészített, lefordított programhoz.

GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK STRUKTÚRA ALAPÚ, VAGY FEHÉRDOBOZ TECHNIKÁK TAPASZTALAT ALAPÚ TECHNIKÁK

Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Hibatűrő Rendszerek Kutatócsoport

Kiszolgálók üzemeltetése. Iványi Péter

Szolgáltatásbiztonságra tervezés

Modern unit és integrációs tesztelés

JSF alkalmazások teljesítményhangolása JMeter és dynatrace segítségével

Összetett szoftverrendszerek fejlesztése Innovatív szoftver prototípusok a Codespring Mentorprogram keretein belül

Szoftver technológia. Build systems. Cserép Máté ELTE Informatikai Kar 2019.

ADATBÁZIS VERZIÓKÖVETÉSE: LIQUIBASE

Szoftver technológia. Verziókövető rendszerek. Cserép Máté ELTE Informatikai Kar 2019.

Oracle Forms - Oracle Application Express alkalmazások migrációja a jövőbe

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

Verziókezelt konfigurációmanagement++ Pásztor György, SZTE Klebelsberg Könyvtár

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Pentaho 4: Mindennapi BI egyszerűen. Fekszi Csaba Ügyvezető október 6.

A feladatok megoldásához felhasználandó annotációk leírásait az alábbi URL-en találja meg:

Madarassy László, mérnök, BME - Mobil Innovációs Központ. lmadarassy@mik.bme.hu

1 of :54

Mi is a git? Csapatban dolgozni Git pro eszközök. Git bevezető. Szabó Adrienn Adatbányászat és Webes Keresés Kutatócsoport

Név: Neptun kód: Pontszám:

IBM Váltsunk stratégiát! Budapest, 2012 november 14. V7000

Termék életciklus és a verziókezelés

Bazaar ismertető. Timár András

GDi Esri Magyarország Felhasználói Konferencia Timár Gábor: Konkurens adatfeldolgozás ArcGIS rendszerben

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

DRUPAL 7. újdonságai. Hojtsy Gábor Drupal Hétvége, Budapest november 14. Angela Byron fóliái alapján

Oracle Enterprise Manager 12c Cloud Control és 11g Grid Control összehasonlítás

JAVA webes alkalmazások

DCWatch fejlesztői HUB: dchub://4242.hu:1411 Elite Hub, ahol megnézheted működés közben a BOT-ot: dchub://elite.4242.hu:4242

Robot Operating System

Másolatképzési technikák és azok felhasználási lehetőségei

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

Integrációs mellékhatások és gyógymódok a felhőben. Géczy Viktor Üzletfejlesztési igazgató

Hello Gradle. TestNG, Eclipse, IntelliJ IDEA. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 2. Bedők Dávid v0.

Mobil Informatikai Rendszerek

CSEMPE GENERÁLÓ ALKALMAZÁS FÖLDHIVATALI ADATBÁZISHOZ Pálfi Antal PAGEOS

Git verziókezelő. Készítette: Hugyák Tamás. Pannon Egyetem Műszaki Informatikai Kar v1.1

RapidMiner telepítés i. RapidMiner telepítés

MEGÚJÍTOTT GIROLOCK_CA TANÚSÍTVÁNYCSERE

Reaktív programozás szerver oldalon

Tartalomjegyzék. Legfőbb különbségek az MPLAB 8-hoz képest

Dr. Mileff Péter SZOFTVERFEJLESZTÉS VERZIÓKÖVETÉS, VERZIÓKÖVETŐ RENDSZEREK. Miskolci Egyetem Általános Informatikai Tanszék

1. Bevezető. 2. Sérülékenységek

Saját Subversion tároló üzemeltetése i. Saját Subversion tároló üzemeltetése

Szoftver technológia. Projektmenedzsment eszközök. Cserép Máté ELTE Informatikai Kar 2019.

Fási PHP függőségkezelés composerrel

Széchenyi István Egyetem

SQL Server High Availability

Alkalmazás technológiai frissítés migrációs és üzemeltetési tapasztalatok

FRISSÍTÉSI LEÍRÁS A WINIKSZ PROGRAMCSOMAGHOZ

A szoftverfejlesztés eszközei

4. gyakorlat: Teszttervezés és integráció

FELHASZNÁLÓI DOKUMENTÁCIÓ

Átírás:

Continuous Delivery: Problémák és megoldások (http://bit.ly/1rjqond) Viczián István IP Systems Kft. http://jtechlog.blogspot.hu Agenda - miről lesz szó Continuous Delivery alapfogalmak Maven ellentmondások Megoldások Agenda - miről nem lesz szó Ant Gradle Élet a unit és integrációs teszteken kívül (pl. Kódminőség ellenőrzés, tesztelés konténeren, felületi tesztelés, deploy to container) Continuous Delivery Az ügyfélnek minél előbb kijuttatni a fejlesztésünk Mielőbbi visszajelzés Szemléletmód Nem eszköz vagy eszközrendszer Folyamatos karbantartás és fejlesztés Alapelvek Minden commit esetén build, mely kimenete potenciális release Pipeline A pipeline stage-ek ugyanazon binárison dolgoznak Következmények Nem történhet újrabuildelés Nem tárolhatunk környezeti információkat az artifact-ban Nem használhatunk bytekód instrumentációt pl. lefedettségi tesztelésnél Legyen gyors Ellentmondások Maven lifecycle: lefutnak az előző lifecycle phase-ek Ősellenség: Maven release plugin Integrációs teszt a lifecycle része

Integrációs tesztek lassan futnak Deploy a lifecycle része release:prepare check-poms: megvizsgálja, hogy az adott verzió SNAPSHOT-e. Ha nem SNAPSHOT, ak kor már megtörtént a release, így nem futtatható mégegyszer. (Hibaüzenet: You don't have a SNAPSHOT project in the reactor projects list.) scm-check-modifications: megvizsgálja, hogy minden állomány be van-e commit-ol va. Mivel a release plugin aktívan használj a verziókezelőt, ezért a POM-ban a z scm tag-nek be kell állítva lennie, különben hibaüzenetet kapunk. check-dependency-snapshots: megvizsgálja, hogy nincs-e SNAPSHOT függőség. Ha v an, akkor hibaüzenetet dob. A plugin-oknál is vizsgálja, hogy van-e SNAPSHOT. create-backup-poms: elmenti az előző POM állományt (pom.xml.releasebackup) név en. Ha bármi probléma van, ebből vissza lehet állni. map-release-versions: ha a release interaktív, akkor megkérdezi a felhasználót ól a release verzióját. Fel is ajánl egyet, az aktuális verziót SNAPSHOT nélkü l, ha jó, elég egy Enter-t ütni. input-variables: ha a release interaktív, akkor megkérdezi a felhasználótól a tag nevét. Fel is ajánl egyet, az modul neve + aktuális verzió SNAPSHOT nélkül, ha jó, elég egy Enter-t ütni (pl. fooapp-1.1). map-development-versions: ha a release interaktív, akkor megkérdezi a felhaszn álótól a következő verzió nevét. Fel is ajánl egyet úgy, hogy növeli a minor v erziószámot, és hozzáteszi a SNAPSHOT-ot (pl. 1.2-SNAPSHOT). Ha megfelelő, itt is üthetünk Enter-t. rewrite-poms-for-release: a POM át lesz írva a release verzióra, és az scm tag -ben is a tag url-je fog szerepelni. generate-release-poms: a release-eléshez használt POM legenerálásra. run-preparation-goals: az új POM-mal lebuild-eli a projektet, clean verify cél okkal. Közben a teszt esetek is lefutnak. scm-commit-release: commit-olja a módosított POM-ot. scm-tag: elvégzi a tag-gelést a verziókezelőben. rewrite-poms-for-development: a következő verzióhoz, ami már újra SNAPSHOT les z, elkészíti a POM-ot. remove-release-poms: eltakarítja a release-hez használt POM-ot. scm-commit-development: commit-olja az új POM-ot a verziókezelőbe. end-release: véglegesíti a release-t. release:perform verify-completed-prepare-phase: megvizsgálja, hogy a prepare cél le lett-e fut tatva. checkout-project-from-scm: a target könyvtárba a teljes projektet checkout-olj a, méghozzá az előbb tag-geltet. run-perform-goals: fork-ol egy új Maven példányt, és elindítja a checkout-olt projekten a deploy célt. Megoldás - első lépés Build nem SNAPSHOT verzióval dolgozik Maven versions plugin: verzióemelés pl. revision, gyakorlatilag release A fejlesztők SNAPSHOT verziókat használnak mvn versions:set -DnewVersion=1.1 mvn versions:revert Megoldás - második lépés Külön integrációs teszt projekt Csak integrációs teszt futtatása (profile)

Bináris újrafelhasználása a local repository-ból Nem fordít integrációs teszteket a commit stage Nem fut unit teszt az integration test stage-ben Commit profile esetén csak a base modul, it profile esetén csak az integration-tests modul aktív. <profiles> <profile> <id>commit</id> <modules> <module>base</module> </modules> </profile> <profile> <id>it</id> <modules> <module>integration-tests</module> </modules> </profile> </profiles> Csak secondary artifact deploy. <build> <plugins> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <version>2.2</version> <id>default-jar</id> <phase>never</phase> <finalname>unwanted</finalname> <classifier>unwanted</classifier> <goal>test-jar</goal> </plugins> </build> Megoldás - második (és fél) lépés Integrációs tesztek embedded adatbázison (platformfüggetlenség!) Flyway séma migrációra Spring context cache, fork elkerülése Külön szálon integrációs tesztek production adatbázison Optimalizált teszt futtatás külön szálon Minimálisan tartott alapadatkör Párhuzamosítás? Flyway: The agile database migration framework for Java, http://flywaydb.org/ Spring: @DirtiesContext Megoldás - harmadik lépés Teszt lefedettség mérés: Jacoco Dynamic instrumentation: Java agent - futásidőben Jacoco report futtatáshoz kell a forrás, secondary artifactként deployolva. <build> <plugins> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-source-plugin</artifactid> <version>2.2.1</version> <id>attach-sources</id> <goal>jar</goal>

</plugins> </build> Függőség a primary és secondary artifact-ra. <dependency> <groupid>${project.groupid}</groupid> <artifactid>base</artifactid> <version>${project.version}</version> </dependency> <dependency> <groupid>${project.groupid}</groupid> <artifactid>base</artifactid> <version>${project.version}</version> <classifier>sources</classifier> </dependency> Jacoco futtatása, kell neki a forrás és a class fájlok is: Maven dependency plugin kicsomagolja a forrás és class fájlokat Jacoco Maven plugin végzi az instrumentációt Mivel a Jacoco Maven pluginnek nem lehet megmondani a forrás és class fájlok helyét, Ant plugin-nel riport futtatás <artifactid>maven-dependency-plugin</artifactid> <id>prepare-covered-sources</id> <goal>unpack-dependencies</goal> <phase>generate-resources</phase> <includeclassifiers>sources</includeclassifiers> <outputdirectory>${project.build.directory}/covered-sources</o utputdirectory> <id>prepare-covered-classes</id> <goal>unpack-dependencies</goal> <phase>generate-resources</phase> <excludeclassifiers>sources</excludeclassifiers> <outputdirectory>${project.build.directory}/covered-classes</outputdirecto ry> <includegroupids>${project.groupid}</includegroupids> <groupid>org.jacoco</groupid> <artifactid>jacoco-maven-plugin</artifactid> <version>${jacoco.version}</version> <id>jacoco-initialize</id> <goal>prepare-agent</goal> <artifactid>maven-antrun-plugin</artifactid> <id>default-cli</id> <phase>post-integration-test</phase> <goal>run</goal> <tasks> <taskdef name="report" classname="org.jacoco.ant.reporttas k" classpathref="maven.plugin.classpath" /> <report> <executiondata> <file file="${project.build.directory}/jacoco.exec "> </file></executiondata> <structure name="integration test coverage"> <classfiles> <fileset dir="${project.build.directory}/covered-classes"> </fileset></classfiles> <sourcefiles encoding="utf-8"> <fileset dir="${project.build.directory}/cover ed-sources"> </fileset></sourcefiles> </structure> <html destdir="${project.build.directory}/jacoco-report"/>

</report> </tasks> <dependencies> <dependency> <groupid>org.jacoco</groupid> <artifactid>org.jacoco.ant</artifactid> <version>${jacoco.version}</version> </dependency> </dependencies> Jacoco konfigurálása: http://bo2framework.blogspot.gr/2013/10/oncontinous-integration-jenkins-maven.html Megoldás - negyedik lépés Jenkins commit stage Block build when downstream project is building versions:set deploy -Pcommit versions:revert Jenkins Maven Deployment Linker plugin: Nexusba deployolt artifact linkelésére Jenkins description setter plugin: build leírásában legyen benne a revision szám Jenkins Parameterized Trigger plugin: SVN_REVISION továbbadása Megoldás - ötödik lépés Parameterized build: SVN_REVISION Jenkins Subversion plugin trükk, adott revision checkout: file:///d:/houg/repo/jtechlog-dbunit/trunk@${svn_revision} versions:set clean verify -Pit versions:revert Jenkins JUnit plugin Jenkins JaCoCo plugin

Megoldás - hatodik lépés Jenkins Build Pipeline Plugin További tippek Ha csak deploy kell: Maven deploy plugin deploy goal futtatása Ne legyen a pipeline része dokumentáció generálás Kódminőség ellenőrző eszköz törje meg a buildet, különben figyelmen kívül hagyjuk Attól, hogy magas a teszt lefedettségünk, még nem biztos, hogy megbízunk a tesztjeinkben Ha alacsony a teszt lefedettség, az óvatosságra int Vas kell, akár grid Problémás esetek Több modulból álló alkalmazás esetén a modulok külön buildelése (akár fejlesztői gépen, akár build szerveren) Branch Workspace másolás Archiválás