Be
ratu
ng S
oft
wa
re L
ösu
ng
en
Andreas Koop
Consultant
Oracle Technologies
TEAM GmbH
Continuous Integration ist
nicht schwer – Hudson,
Plugins, Skripte umrühren und
fertig
Über mich
Andreas Koop
Diplom-Informatiker
Entwicklung, Projekte, Beratung, Training Oracle Technologien
bei/für TEAM GmbH
Oracle ADF Implementation Specialist
Community
DOAG
Oracle ADF News Session
ADF Enterprise Methodology Group
XING Oracle ADF Community
Blog
http://padora.blogspot.com (TEAM, de)
http://multikoop.blogspot.com (en)
22.09.2011 © TEAM - Ihr Partner für IT 2
TEAM - Ihr Partner für IT
Gründung 1982
Unternehmensgruppe Materna
1.300 Mitarbeiter –
153 Mio. Euro Umsatz in 2009
Geschäftsführung
Michael Baranowski - Heike Käferle
über 50 Mitarbeiter
Zahlen und Fakten
Oracle-Dienstleistungen vom Oracle Platinum Partner
Lizenzierung
Consulting
Schulungen
Busines Intelligence
Individualentwicklungen
Online DBA Support
Agenda
22.09.2011 © TEAM - Ihr Partner für IT 5
Ad Hoc Integration
Continuous Integration mit Hudson
Installation, Jobs
Most Useful Plugins
Best Practice for continuously
Generate Code
Compile / Script Code
Measure code quality
Test Java / PL/SQL Code
Deploy DB Code / EAR / Reports
Release Artefacts
Handling Changes / Patches
Lessons learned
Ad Hoc Integration
22.09.2011 © TEAM - Ihr Partner für IT 6
install
deploy
patch
Pro
d
Te
st
Developer
Ad Hoc Integration im Team
„Von meinem Rechner aus geht es doch“
„Ja, bei dir fehlen noch einige Jars“
„Ist das die richtige Version?“
..
22.09.2011 © TEAM - Ihr Partner für IT 7
install
deploy
patch
Pro
d
Te
st
Development
Team
Auswirkungen
Integrationsprozess ist sehr zeitintensiv
In der Regel nicht vorher getestet
Fehler sind vorprogrammiert
Ungutes Gefühl bei Auslieferung
Unzufriedene Kunden
…
22.09.2011 © TEAM - Ihr Partner für IT 8
Wie kann man es besser machen?
22.09.2011 © TEAM - Ihr Partner für IT 9
DB
IDE
Integrated
App Server
Develo
pm
ent
DB
„CI Tools“
App Server
(C)
Inte
gra
tion S
erv
er
VCS Ticketsystem
DB
IDE
Integrated
App Server
Download-
Server
Notification
Email, IM
Client
Continuous D
eliv
ery
MVN-Repo
Hudson – Installieren / Starten
Installation
java -jar hudson.war
oder Deployment in einem Java WebContainer
Browser: http://localhost:8080
22.09.2011 © TEAM - Ihr Partner für IT 10
Hudson – Build-Jobs
Build-Verfahren
Batch, Shell, Ant, Maven
Versionskontrollsystem (VCS)
CVS, Subversion, Git, ..
Auslöser
Zeitgesteuert (cron expression)
Änderung im VCS
Abhängig von einem anderen Hudson-Job
Abhängig von Maven-Dependency-Änderungen
HTTP-Request
22.09.2011 © TEAM - Ihr Partner für IT 11
Hudson – Erweiterbarkeit
Als zunächst ausreichend
und nützlich haben sich erwiesen
task scanner / dry / PMD / cpd / analysis collector
email ext
log parser
22.09.2011 © TEAM - Ihr Partner für IT 12
Hudson – Plugins Installation
22.09.2011 © TEAM - Ihr Partner für IT 13
Agenda
22.09.2011 © TEAM - Ihr Partner für IT 14
Ad Hoc Integration
Continuous Integration mit Hudson
Installation, Jobs
Most Useful Plugins
Best Practice for continuously
Generate Code
Compile / Script Code
Measure code quality
Test Java / PL/SQL Code
Deploy DB Code / EAR / Reports
Release Artefacts
Handling Changes / Patches
Lessons learned
Build Job(s)
Best Practice: Shell-Skripte!
Master Build-Skript für
generate
compile
test -> (test.sh)
deploy db -> (deploy_db.sh)
deploy app -> (deploy_app.sh)
doc -> (doc.sh)
release -> (release.sh)
=> Parametrierbar, in separate Jobs teilbar, „standalone
ausführbar“.
22.09.2011 © TEAM - Ihr Partner für IT 15
Setup a new project
Master-Build Job, Parametrierbar, Shell Skript
Wiederverwenbarkeit, Modularisierung
svn copy (from project template)
svn:externals
env / master.properties / build_env_scripte.sh
22.09.2011 © TEAM - Ihr Partner für IT 16
Build-Nummer integrieren
Verfügbarkeit
In Shell-Skripten
$BUILD_NUMBER
in Ant-Skripten über
<property environment="env"/>
anschließend ${env.BUILD_NUMBER}
Integration
cd $WORKSPACE/build
ant preprocess.integrate-buildnumber
22.09.2011 © TEAM - Ihr Partner für IT 17
Generate code (clean natürlich;)
Pragmatischer Ansatz
Apache Ant(Buildskript)
Apache Velocity / Texen(Template-/Generator-Engine)
TEAM Database Ant-Task (Bereitstellung der notwendigen Objekte
im Template-Context)
22.09.2011 © TEAM - Ihr Partner für IT 18
Sample: generate trigger
Automatisiert ausführbar ant -f gen.build.xml gen-and-script-trigger-sql
=> einfache Integration in Hudson Master Build Skript!
22.09.2011 © TEAM - Ihr Partner für IT 19
Audit code quality
PMD
Custom Rules
Java
PL/SQL
22.09.2011 © TEAM - Ihr Partner für IT 20
Beispiel Reports: code analysis
Tasks Plugin
22.09.2011 © TEAM - Ihr Partner für IT 21
Unit Testing
Java Unit test: OK
PL /SQL: Hhhmmm
How we do it: Pragmatisch!
22.09.2011 © TEAM - Ihr Partner für IT 22
Sample: PL/SQL Unit Test
Start From
Template
Write test code
22.09.2011 © TEAM - Ihr Partner für IT 23
PL /SQL Test – Integration in Hudson
fail on spool match!
ant test.database (in test.sh)
22.09.2011 © TEAM - Ihr Partner für IT 24
Junit Testreport
22.09.2011 © TEAM - Ihr Partner für IT 25
db export / db script / db patch
db export: TEAM DB Ant Task
db script: shell / sqlplus [email protected]
db patch: current patch dir
nach release wird das current patch
in VCS archiviert.
ein leeres current patch dir wird erzeugt.
22.09.2011 © TEAM - Ihr Partner für IT 26
Dev-DB
TEAM Db Ant Task code.sql
Integration-DB
current patch / rerunnable
22.09.2011 © TEAM - Ihr Partner für IT 27
generate documentation
generate
javadoc
plsqldoc
maven site
testreport
custom doc
package
mvn package
zip *
…
22.09.2011 © TEAM - Ihr Partner für IT 28
Sample: generated doc output
22.09.2011 © TEAM - Ihr Partner für IT 29
Release
release.sh
package artefacts
generate fingerprint
upload to download server
generate client certificate (once)
generate and send email notification to customer
include fixed issue list !
include new features list !
Snapshot
22.09.2011 © TEAM - Ihr Partner für IT 30
Release ist raus, Entwicklung geht weiter
22.09.2011 © TEAM - Ihr Partner für IT 32
Client
Build 737
Betrieb
Test / Produktion Development / Integration
DB
Hudson
myapp-build
App Server
(C)
Inte
gra
tion S
erv
er
(VM
)
Build 744
Build 738
Advanced CI with „Revert To Snapshot“
22.09.2011 © TEAM - Ihr Partner für IT 33
DB
Hudson
myapp-build
App Server
(C)
Inte
gra
tion S
erv
er
(VM
)
Virtualization Host
Hudson
myapp-build-
with-revert-to-
snapshot
revert
DB
Hudson
myapp-build
App Server
http:// …build
2
3
1
Development
Team
notify
Hudson Batch Job („Build with revert to
snapshot)
On Virtualization-Host
=> Patches werden auf diese Weise getestet. Erfolgreiche
Installation beim Kunden ist garantiert!
=> Continuous Build Numbers!
22.09.2011 © TEAM - Ihr Partner für IT 34
Benefits
Es existiert immer eine getestete Version der Artefakte:
app, db patch, doc
Ein Release ist per One-Klick durchführbar! Dadurch
kurze Release-Zyklen.
Durch den Buildprozess „Revert to Snapshot“ können
Patches/Updates getestet werden! Erfolgreiche
Installation beim Kunden ist garantiert!
In besonderen Wartungsfällen kann durch „Revert to
Snapshot“ der ausgelieferte Zustand in Minuten
wiederhergestellt werden.
22.09.2011 © TEAM - Ihr Partner für IT 35
Not Covered (all with Hudson)
UI Tests / Selenium
Continuous Monitoring
Continuous Patching of a distributed environment
Research
Revert eines DB Patches
db diff aus svn historie
22.09.2011 © TEAM - Ihr Partner für IT 36
Lessons learned
CI with Hudson is easy to setup
Simple yet powerful tools around Hudson CI make it
A stable ALM process saves a lot of time, nerves and
finally money
Generate, Automate and Integrate as early as possible
To be improved (At least at TEAM Development Devision)
Integration of Issue management systems
gen test reports for PL/SQL Testcases
=> Agile ALM
22.09.2011 © TEAM - Ihr Partner für IT 37
Be
ratu
ng S
oft
wa
re L
ösu
ng
en
TEAM Partner für Technologie und angewandte Methoden der Informationsverarbeitung
GmbH
Hermann-Löns-Str. 88
33104 Paderborn
Fon +49 5254 8008-0
Fax +49 5254 8008-19
Mail [email protected]
Web www.team-pb.de
Vielen Dank für Ihre
Aufmerksamkeit