Smidig Utrulling - JavaZone 2009

Preview:

DESCRIPTION

My slides from JavaZone 2009 on agile deployment. Sorry, presentation only in Norwegian. Video will be online, and the demo code is available at http://github.com/anderssv/agile-deploy/tree/master .

Citation preview

Together. Free your energies Anders Sveen – JavaZone 2009

Smidig utrulling

Anders Sveen

JavaZone 2009

Together. Free your energies Anders Sveen – JavaZone 2009

Først

• Teknologileder for Java i Capgemini• BBS, CIBER• Java, Smidig, Back end, Hibernate,

Maven, Konfigurasjonsstyring

• Ting som må gjøres for smidigere utrulling, og vise noen eksempler som kan inspirere

Together. Free your energies Anders Sveen – JavaZone 2009

Smidig?

Tilpasnings-dyktig

Kvalitet

Forbedringer

Flyt og forutsigbarhet

Trygghet

Together. Free your energies Anders Sveen – JavaZone 2009

Smidig utrulling

• Enkelt• Raskt• Sikkert

• Automatisk!

Prosess

Teknologi

Drift

DatabaseKonfigurasjons-styring

Avhengigheter

Arkitektur

Together. Free your energies Anders Sveen – JavaZone 2009

Fordeler

• Definition of done!• Return on investment• Raskere verifisering og tilbakemelding• Flere miljøer• Raskere feilfiks• Reduserte miljøforskjeller

Together. Free your energies Anders Sveen – JavaZone 2009

Hvordan?

• Automatisering og kontroll• Kunnskap• Kultur• Kontinuerlig forbedring

Together. Free your energies Anders Sveen – JavaZone 2009

Utfordringer

• Kulturelt– Utvikling– Database– Drift

• Teknisk– Er det for mange biter i applikasjonen?– Er andre prosjekter avhengige av grensesnitt i

systemet?– Hvordan går vi bakover når noe går feil?

Together. Free your energies Anders Sveen – JavaZone 2009

Eksempel

• Maven• Webapp• Webserver• Database• Egenutviklet kode

• http://github.com/anderssv/agile-deploy• Bruk det som inspirasjon!

Together. Free your energies Anders Sveen – JavaZone 2009

Utviklingsløpet

Utvikler DBsandkasse

Hent release

t versj

on

Hent releaset versjon

Hent releaset versjon

Commit

Tes

ter

Utvikler Subversion Mavenrepository

Deploy

Hen

t nye

ste

Hudson Test

Beta

ProdDB

DB

DB

Oppgrader

Oppgrader

Oppgrader

Together. Free your energies Anders Sveen – JavaZone 2009

Pakking

• Én pakke, ZIP med Jetty embedded• Miljøuavhengig

• Lages av – Maven Assembly plugin

• Repo dir og bin script

– Maven Appassembler plugin• Pakking til zip med config og ekstra scripts

• mvn clean install deploy:deploy

Together. Free your energies Anders Sveen – JavaZone 2009

Pakking

Server

Server kode

Avhengigheter

Spring

Together. Free your energies Anders Sveen – JavaZone 2009

Pakking

Together. Free your energies Anders Sveen – JavaZone 2009

Inne i ZIP

Scripts

• src/main/scripts

Config

• src/main/config/*.properties• src/main/config/test/*.properties• src/main/config/prod/*.properties

Database

• src/main/db/migrations/*.sql

Together. Free your energies Anders Sveen – JavaZone 2009

UtrullingLaster ned

Kopierer config dersom den ikke eksisterer

config/<env>/*.propertiesconfig/*.properties

Oppgraderer databasen

Together. Free your energies Anders Sveen – JavaZone 2009

Utrullinganderssv@beast:~/bin$ java -jar deployer-0.1-SNAPSHOT.jar test no.f12 bikestatus-poller 0.1-SNAPSHOT

INFO | y.deployer.CommandLineDeployer | Launched deploy at Sat Aug 29 13:16:01 CEST 2009INFO | y.deployer.CommandLineDeployer | Starting deploy: no.f12:bikestatus-poller:0.1-SNAPSHOTINFO | oy.deployer.RepositoryRepoImpl | Downloading package from

http://mrepo.f12.no/snap/no/f12/bikestatus-poller/0.1-SNAPSHOT/maven-metadata.xmlINFO | oy.deployer.RepositoryRepoImpl | Downloading package from

http://mrepo.f12.no/snap/no/f12/bikestatus-poller/0.1-SNAPSHOT/bikestatus-poller-0.1-20090818.212830-7.zip

INFO | y.deployer.UnpackerServiceImpl | Unpacking ./bikestatus-poller-0.1-20090818.212830-7.zip into ./bikestatus-poller/test/current

INFO | loyer.ConfigurationServiceImpl | Updating configurationINFO | loyer.ConfigurationServiceImpl | Creating linksINFO | loyer.ConfigurationServiceImpl | Created link for ./bikestatus-poller/test/data at

./bikestatus-poller/test/current/dataINFO | loyer.ConfigurationServiceImpl | Created link for ./bikestatus-poller/test/log4j.properties

at ./bikestatus-poller/test/current/log4j.propertiesdbdeploy 3.0M1INFO | loy.deployer.DeployServiceImpl | Could not inspect database for upgrade details, skipping.

Increase logging for no.f12.agiledeploy.deployer.DataBaseServiceImpl to see details.INFO | y.deployer.CommandLineDeployer | Deploy ended at Sat Aug 29 13:16:09 CEST 2009

Together. Free your energies Anders Sveen – JavaZone 2009

Kode og database

• Hører sammen!• Migrations• En commit inneholder både kode- og database-

endringer.src/main/java/no/javazone/Participant.java src/test/java/no/javazone/ParticipantTest.java src/db/migrations/078_add_enabled_flag_to_participant.sql

Together. Free your energies Anders Sveen – JavaZone 2009

SQL

078_add_enabled_flag_to_participant.sql

ALTER TABLE participant ADD enabled varchar;

UPDATE participant SET enabled='y';

ALTER TABLE participant ALTER COLUMN enabled varchar NOT NULL;

Together. Free your energies Anders Sveen – JavaZone 2009

SQL

079_change_enum_of_participant_type.sql

ALTER TABLE participants DISABLE participant_type_fk;

UPDATE participants SET type='VIP' WHERE type='ACCREDITED';

UPDATE participant_type SET type='VIP' WHERE type='ACCREDITED';

ALTER TABLE participants ENABLE participant_type_fk;

Together. Free your energies Anders Sveen – JavaZone 2009

Tracking

CREATE TABLE changelog ( change_number INTEGER NOT NULL, delta_set VARCHAR2(10) NOT NULL, complete_dt TIMESTAMP NOT NULL, applied_by VARCHAR2(100) NOT NULL, description VARCHAR2(500) NOT NULL);

ALTER TABLE changelog ADD CONSTRAINT Pkchangelog PRIMARY KEY (change_number, delta_set);

Together. Free your energies Anders Sveen – JavaZone 2009

Dbdeploy

dbdeploy 3.0M1

Reading change scripts from directory C:\data\users\Anders\source\agile-deploy\deployer\target\temp\project\test\current\db\migrations...

Changes currently applied to database:

1...77

Scripts available:

1...79

To be applied:

78, 79

Together. Free your energies Anders Sveen – JavaZone 2009

Refactoring

Together. Free your energies Anders Sveen – JavaZone 2009

Verktøy

• DBDeploy - http://dbdeploy.com/• DbMaintain -

http://dbmaintain.sourceforge.net/• C5-db-migration -

http://code.google.com/p/c5-db-migration/• Scala-migrations -

http://code.google.com/p/scala-migrations/

Together. Free your energies Anders Sveen – JavaZone 2009

Eksempelet

• http://github.com/anderssv/agile-deploy

• Maven prosjekt– War– Server (Jetty embedded)

• Deployer

Together. Free your energies Anders Sveen – JavaZone 2009

Alternativer

• Deploy– Applikasjonen oppgraderer databasen ved oppstart– Deployer legger ut war på applikasjonsserver– Maven deployer– Maven oppgraderer databasen

• Pakking– RPM– JAR– WAR– EAR

• Automatiser hele veien fra utvikler til database

Together. Free your energies Anders Sveen – JavaZone 2009

Spørsmål?

Together. Free your energies Anders Sveen – JavaZone 2009

Oppsummering

• Skap kultur for forbedring• Automatiser• Reduser kompleksitet i systemet• Lag/bruk verktøy som fungerer• Rull ut ofte!• Start tidlig

Together. Free your energies Anders Sveen – JavaZone 2009

Til sluttanders.sveen@capgemini.com

http://www.no.capgemini.com/teknologiblogg

http://blog.f12.no

http://twitter.com/anderssv

http://smidig2009.no