Programmering

Kontinuerlig integration med Hudson

Kontinuerlig integration er blevet almindelig praksis for hold med fokus på at sikre kodekvalitet gennem softwareudviklingslivscyklussen. I denne artikel introducerer Nicholas Whitehead Hudson, en populær open source CI-server. Lær hvordan du opretter en Hudson-server i dit applikationsudviklingsmiljø (eksempler gives til Windows XP med Tomcat 6 eller Ubuntu Linux med JBoss AS), få ​​et overblik over de mange konfigurationsmuligheder, som Hudson tilbyder, og implementer derefter en automatisk build, test, og rapporteringsproces for et eksempel på et projekt. Niveau: Begynder

Kontinuerlig integration (CI) er et sæt praksis, der har til formål at lette og stabilisere processen med at oprette softwarebygninger. CI hjælper udviklingshold med følgende udfordringer:

  • Software build automatisering: Med CI kan du starte byggeprocessen for en softwareartefakt ved at trykke på en knap, på en foruddefineret tidsplan eller som svar på en bestemt begivenhed. Hvis du vil oprette en softwareartifakt fra kilden, er din byggeproces ikke bundet til en bestemt IDE, computer eller person.
  • Kontinuerlig automatiseret build-verifikation: Et CI-system kan konfigureres til konstant at udføre builds, når ny eller ændret kildekode er tjekket ind. Dette betyder, at mens et team af softwareudviklere periodisk kontrollerer ny eller modificeret kode, verificerer CI-systemet løbende, at build ikke brydes ved den nye kode. Dette reducerer behovet for udviklere at kontrollere med hinanden om ændringer i indbyrdes afhængige komponenter.
  • Kontinuerlig automatiseret test af byggeri: En udvidelse af buildbekræftelse, denne proces sikrer, at ny eller ændret kode ikke får en række foruddefinerede tests på de byggede artefakter til at mislykkes. I både build-verifikation og test kan fejl udløse meddelelser til interesserede parter, hvilket indikerer, at en build eller nogle tests er mislykkedes.
  • Automatisering efter procedure: Bygningens livscyklus for en softwareartefakt kan også kræve yderligere opgaver, der kan automatiseres, når bygverifikation og test er færdig, såsom generering af dokumentation, emballering af softwaren og implementering af artefakter til et kørende miljø eller til et softwarelager. På denne måde kan artefakter hurtigt gøres tilgængelige for brugerne.

For at implementere en CI-server har du som minimum brug for et tilgængeligt kildekodelager (og kildekoden i det), et sæt build-scripts og procedurer og en række tests, der skal udføres mod de byggede artefakter. Figur 1 skitserer den grundlæggende struktur for et CI-system.

Systemkomponenterne kommer i spil i følgende rækkefølge:

  1. Udviklere tjekker ny og ændret kode i kildekodedepotet.
  2. CI-serveren opretter et dedikeret arbejdsområde til hvert projekt. Når en ny build er anmodet om eller planlagt, hentes kilden fra lageret til dette arbejdsområde, hvor bygningen derefter udføres.
  3. CI-serveren udfører byggeprocessen på det nyoprettede eller opdaterede arbejdsområde.
  4. Når build er afsluttet, kan CI-serveren eventuelt påberåbe den definerede testpakke på de nye artefakter. Hvis build mislykkes, kan registrerede personer underrettes via e-mail, instant messaging eller en anden metode.
  5. Hvis bygningen er vellykket, pakkes artefakterne og transmitteres til et implementeringsmål (såsom en applikationsserver) og / eller gemmes som en ny artefakt med versionversion i et softwarelager. Dette lager kan være en del af CI-serveren eller være et eksternt lager, såsom en filserver eller et softwaredistributionssted som Java.net eller SourceForge. Kildekodelageret og artefaktlageret kan være adskilte, og det er faktisk muligt at bruge nogle CI-servere uden noget formelt kildekontrolsystem overhovedet.
  6. CI-servere har normalt en slags konsol, hvor projekter kan konfigureres og debugges, og hvor anmodninger kan udstedes til operationer som ad hoc-øjeblikkelig builds, rapportgenerering eller hentning af indbyggede artefakter.

Hudson: En kontinuerlig integrationsserver

Kontinuerlig integration er vokset i popularitet gennem de sidste mange år, og i dag har du en hel række CI-servere at vælge imellem, både kommercielle og gratis. Jeg havde personligt brugt fire CI-servere, før en kollega anbefalede, at jeg kiggede på Hudson. Jeg blev straks imponeret over det. Mens jeg oprindeligt antog, at Hudson ikke var kendt, viser en undersøgelse på Java Power Tools-webstedet, at den var den mest anvendte CI-server blandt respondenterne, idet han (på tidspunktet for denne skrivning) fik 37,8 procent af alle stemmer.

Understøttede SCM'er

Hudson har integreret understøttelse af Subversion lige ud af kassen, og der kræves kun en lille mængde konfiguration for at integrere med CVS, forudsat at CVS-klienten er installeret på Hudson-værten. Flere andre kildekodestyringsløsninger (SCM) understøttes i form af Hudson-plugins. På tidspunktet for denne skrivning understøttes følgende SCM'er:

  • Accurev
  • BitKeeper
  • ClearCase
  • Git
  • Mercurial
  • Perforce
  • StartTeam
  • Team Foundation Server
  • Visuel SourceSafe
  • URL SCM (et specielt SCM-plugin, der tillader brug af URL'er til SCM)

I denne artikel bruger jeg Subversion og kildelageret på Java.net, så du behøver ikke installere nogen af ​​disse plugins. (Som en side, kender jeg nogen, der arbejder på et MKS SourceIntegrity Hudson-plugin. Hvis du er interesseret i det, skal du sende mig en e-mail.)

Hudson er et gratis og open source-produkt, der hostes på Java.net. Det blev oprindeligt skrevet af Kohsuke Kawaguchi, en personaletekniker hos Sun Microsystems, der annoncerede sin frigivelse på sin blog i februar 2005. Hudson har siden haft cirka 154 udgivelser.

Her er nogle af grundene til, at jeg kan lide Hudson, og hvorfor jeg vil anbefale det til dig uden nogen usædvanlige krav:

  • Af alle de CI-produkter, jeg har brugt, er det langt den nemmeste at installere og konfigurere.
  • Dens webbaserede brugergrænseflader er meget venlige, intuitive og lydhøre og giver i mange tilfælde øjeblikkelig Ajax-aktiveret feedback om individuelle konfigurationsfelter.
  • Hudson er Java-baseret (hvilket er nyttigt, hvis du er en Java-udvikler), men er ikke begrænset til at opbygge Java-baseret software.
  • Hudson er ren komponent og tilbyder en veldefineret og dokumenteret udvidelses-API i form af Hudson-plugins. Dette har igen ført til et stort bibliotek med Hudson-plugins, der udvider serverens funktionalitet; disse er frit tilgængelige og kan installeres fra Hudson-konsollen.

Installation af Hudson: Windows XP eller Ubuntu Linux

For at bruge Hudson skal du bruge et tilgængeligt og understøttet kildekontrolsystem (se sidebjælken "Understøttede SCM'er" for en liste), kilde, der kan indbygges i en artefakt, og et fungerende build-script. Ud over det er alt hvad du virkelig har brug for for at installere og konfigurere en fungerende Hudson-server en installation af Java, version 1.5 eller nyere, og Hudson-installationsfilen, der kommer i form af et Java EE-webarkiv (WAR). Du kan starte serveren meget enkelt ved hjælp af følgende kommandolinje:

C: \ hudson> java -jar hudson.war

Det er sandsynligvis mere almindeligt dog at implementere Hudson på en Java-servletcontainer, der er baseret på Servlet 2.4- og JSP 2.0-specifikationerne, såsom GlassFish, Tomcat, JBoss eller Jetty. I de næste sektioner vil jeg lede dig gennem to Hudson-installationsscenarier: en ved hjælp af Tomcat 6 på Windows XP og en anden ved hjælp af JBoss 4.2.3 på Ubuntu Linux. (JBoss AS 5.0 blev frigivet efter denne artikels indsendelsesdato.)

Installation af Hudson: Tomcat 6 og Windows XP

Jeg antager, at du allerede har version 1.5 eller nyere af Java installeret på din Windows XP-maskine. Ved at følge nedenstående trin installeres Tomcat 6.0.18 ved hjælp af Windows Service Installer, så Hudson starter straks efter opstart af Windows XP og kører i baggrunden, selv når ingen bruger er logget ind. Downloadfilen til Tomcat er apache-tomcat- 6.0.18.exe, som du skal udføre for at starte Tomcat-installationen.

Tomcat-installationen beder dig om at vælge installationsindstillinger. Sørg for at vælge Brugerdefinerede indstillinger og derefter Service, som vist i figur 2, så Tomcat kører som en tjeneste.

Vælg derefter et bibliotek, hvor du vil installere Tomcat, som vist i figur 3. Jeg anbefaler stærkt, at du vælger et bibliotek uden mellemrum. Du kan takke mig senere.

Nu spørger installationsprogrammet dig, hvilken port du vil lytte til. Standard er port 8080, hvilket sandsynligvis er fint; bare sørg for, at du ikke har et andet program, der bruger den port. Hvis du gør det, starter Tomcat ikke korrekt. Du bliver også bedt om at angive et brugernavn og en adgangskode til Tomcat-administrator. Alt dette er vist i figur 4.

Installationsprogrammet beder dig derefter om at angive placeringen af ​​den Java JRE, du har installeret. Som du kan se i figur 5, brugte jeg Sun Java 1.6.0_07.

Når du klikker Installere, skal installationen køre til afslutning, og tjenesten begynder at køre. Du kan sikre dig, at Tomcat fungerer korrekt ved at pege din webbrowser til // localhost: 8080 (erstatte localhost med det rette navn eller IP-adresse, hvis du ikke bruger en webbrowser, der kører på den computer, hvor Tomcat er installeret). Den viste webside skal se ud som skærmbilledet i figur 6.

For at installere Hudson skal du nu kopiere filen hudson.war til webapps-underkataloget til din Tomcat-installationsmappe. Hvis du brugte den samme installationsmappe som vist i figur 3, ville dette være C: \ Tomcat6 \ webapps. Tomcat distribuerer WAR-filer varmt, men den nemmeste ting at gøre nu er at genstarte Tomcat. Der er to måder at gøre dette på. Den første er at åbne en DOS-skal og indtaste følgende kommandoer:

 C: \ Tomcat6> net stop Tomcat6 C: \ Tomcat6> net start Tomcat6

Den anden mulighed er at åbne Services-appleten. Denne applet kan findes i gruppen Administrative værktøjer i kontrolpanelet, som kan findes ved at klikke på Start-knappen på Windows-værktøjslinjen og derefter vælge Indstillinger og så Kontrolpanel. Find den navngivne service i appleten Services Apache Tomcat og klik derefter på Genstart knap. Dette er illustreret i figur 7.

Hudson skal nu installeres. Du kan bekræfte dette ved at pege din webbrowser til // localhost: 8080 / hudson. Hovedsonens hovedskærm er vist i figur 8.

Det er alt der er til det! Hvis du er fortrolig med et applikationsudviklingsmiljø baseret på Windows XP og Tomcat, er du klar. Hvis du foretrækker et system, der kører JBoss og Ubuntu Linux, skal du læse videre.

Installation af Hudson: JBoss 4.2.3 på Ubuntu Linux 8.04 (Hardy Heron)

For at installere Sun Java 1.6 på Ubuntu skal du åbne en shell og udføre følgende kommando:

 sudo apt-get install sun-java6-jdk

Ved udstedelse af en sudo kommando, bliver du bedt om at indtaste din adgangskode.

Bemærk, at der er flere måder at installere JBoss på; i den teknik, der er skitseret her, opretter du en dedikeret jboss bruger. Dette betragtes som en bedste praksis og foretrækkes frem for at installere JBoss i dit eget hjemmekatalog. Proceduren, der er skitseret her, er blevet kondenseret ud fra en nyttig beskrivelse på Ubuntu-fora.

Først skal du downloade JBoss 4.2.3.GA-pakken. Kig efter filen med navnet jboss-4.2.3.GA.zip.

Derefter skal du oprette en bruger, en hjemmekatalog og en gruppe, alle navngivet jboss. Gruppen er en bekvemmelighed, der ikke udforskes i denne artikel; det giver dig mulighed for at udvide JBoss-rettigheder til andre brugere på din Ubuntu-server.

Liste 1 viser de kommenterede kommandoer, der skal oprettes jboss hjemmekatalog, bruger og gruppe, og installer derefter JBoss-serveren. Nogle kommandoer er forud for sudo fordi de er rod-privilegerede kommandoer.

Fortegnelse 1. Oprettelse af jboss-kontoen og installation af serveren

ekko Opret jboss-gruppen sudo groupadd jboss echo Opret jboss-brugeren, definer bash som brugerens standardskal og / home / jboss som hjemmekatalog echo og gør brugeren jboss til en del af gruppen jboss sudo useradd -s / bin / bash - d / home / jboss -m -g jboss jboss echo Kopier jboss-4.2.3.GA filen til / home / jboss eller download direkte til den mappe sudo mv jboss-4.2.3.GA / home / jboss echo Skift ejer af filen til jboss sudo chown jboss: jboss /home/jboss/jboss-4.2.3.GA echo Log ind på jboss-kontoen sudo su jboss echo Gå til jboss-hjemmekataloget cd ~ echo Udpak filen jboss-4.2.3. GA unzip jboss-4.2.3.GA echo Opret et symbolsk link "jboss" til "jboss-4.2.3.GA". echo Dette giver dig mulighed for at ændre JBoss-versioner med minimale ændringer ln -s jboss-4.2.3.GA jboss

Hvis udpakkekommandoen ikke allerede er installeret, skal du indtaste følgende kommando (mens du er logget ind som en sudo-aktiveret bruger) for at installere den:

Sudo apt-get install unzip

JBoss-serveren er nu grundlæggende installeret. Du kan starte serveren ved hjælp af følgende kommando:

/home/jboss/jboss/bin/run.sh

I dette eksempel installerer du i stedet et automatisk opstarts script, så tjenesten starter automatisk, når værten starter. JBoss-download leveres med tre forskellige int.d-scripts, men hver skal tweakes; du kan downloade scriptet jboss-init.sh, som aktiverer automatisk start og stop af serveren. Kør derefter de kommandoer, der er vist i Listing 2.