Neprekidna integracija s Hudsonom

Neprekidna integracija postala je uobičajena praksa za timove usmjerene na osiguravanje kvalitete koda tijekom životnog ciklusa razvoja softvera. U ovom članku Nicholas Whitehead predstavlja Hudson, popularni CI poslužitelj otvorenog koda. Naučite kako postaviti Hudson poslužitelj u vašem razvojnom okruženju aplikacija (primjeri su dati za Windows XP s Tomcat 6 ili Ubuntu Linux s JBoss AS), dobijte pregled mnogih opcija konfiguracije koje nudi Hudson, a zatim implementirajte automatiziranu izradu, testiranje, i postupak izvještavanja za primjer projekta. Razina: početnik

Kontinuirana integracija (CI) skup je praksi namijenjenih olakšavanju i stabiliziranju procesa stvaranja softverskih izrada. CI pomaže razvojnim timovima u sljedećim izazovima:

  • Automatizacija izrade softvera : s CI-jem možete pokrenuti postupak izrade softverskog artefakta pritiskom na gumb, prema unaprijed definiranom rasporedu ili kao odgovor na određeni događaj. Ako želite graditi softverski artefakt iz izvora, vaš postupak izrade nije vezan za određeni IDE, računalo ili osobu.
  • Kontinuirana automatizirana provjera gradnje : CI sustav može se konfigurirati da neprestano izvršava gradnje kako se prijavljuje novi ili modificirani izvorni kod. To znači da dok tim programera povremeno provjerava novi ili modificirani kôd, CI sustav kontinuirano provjerava da li je gradnja nije slomljen novim kodom. To smanjuje potrebu programera da međusobno provjeravaju promjene međuovisnih komponenata.
  • Kontinuirano automatizirano testiranje gradnje : produženje provjere gradnje, ovaj postupak osigurava da novi ili modificirani kod ne uzrokuje neuspjeh niza unaprijed definiranih testova na izgrađenim artefaktima. I u provjeri i u testiranju verzije, kvarovi mogu pokrenuti obavijesti zainteresiranim stranama, ukazujući na to da su građevine ili neki testovi propali.
  • Automatizacija postupaka nakon izrade : Životni ciklus izrade softverskog artefakta također može zahtijevati dodatne zadatke koji se mogu automatizirati nakon što se završe provjera i testiranje gradnje, poput generiranja dokumentacije, pakiranja softvera i raspoređivanja artefakata u pokrenuto okruženje ili u spremište softvera. Na taj se način artefakti mogu brzo učiniti dostupnim korisnicima.

Da biste implementirali CI poslužitelj, trebaju vam najmanje dostupno spremište izvornog koda (i izvorni kôd u njemu), skup skripti i procedura za izgradnju i niz testova za izvršavanje protiv izgrađenih artefakata. Slika 1 daje osnovnu strukturu CI sustava.

Komponente sustava dolaze u obzir u sljedećem slijedu:

  1. Programeri provjeravaju novi i izmijenjeni kôd u spremištu izvornog koda.
  2. CI poslužitelj stvara namjenski radni prostor za svaki projekt. Kada se zatraži ili zakaže nova gradnja, izvor se preuzima iz spremišta u ovaj radni prostor, gdje se zatim izvršava gradnja.
  3. CI poslužitelj izvršava postupak izrade na novostvorenom ili osvježenom radnom prostoru.
  4. Nakon završetka gradnje, CI poslužitelj može po želji pozvati definirani testni paket na novim artefaktima. Ako izrada ne uspije, registrirane osobe mogu se obavijestiti e-poštom, trenutnim porukama ili nekim drugim načinom.
  5. Ako je izrada uspješna, artefakti se pakiraju i prenose na cilj implementacije (kao što je aplikacijski poslužitelj) i / ili pohranjuju kao novi verzijski artefakt u spremište softvera. Ovo spremište može biti dio CI poslužitelja ili može biti vanjsko spremište, poput poslužitelja datoteka ili web mjesta za distribuciju softvera poput Java.net ili SourceForge. Spremište izvornog koda i spremište artefakata mogu biti odvojeni, a zapravo je moguće koristiti neke CI poslužitelje bez ikakvog formalnog sustava kontrole izvora.
  6. CI poslužitelji obično imaju neku vrstu konzole na kojoj se projekti mogu konfigurirati i otkloniti pogreške i gdje se mogu izdati zahtjevi za operacije kao što su ad hoc neposredne gradnje, generiranje izvješća ili pronalaženje izgrađenih artefakata.

Hudson: Poslužitelj za kontinuiranu integraciju

Kontinuirana integracija je porasla u popularnosti tijekom posljednjih nekoliko godina i danas imate na raspolaganju nekoliko CI poslužitelja, komercijalnih i besplatnih. Osobno sam koristio četiri CI poslužitelja prije nego što mi je kolega preporučio da pogledam Hudsona. Odmah me se to dojmilo. Iako sam u početku pretpostavljao da Hudson nije dobro poznat, istraživanje na web mjestu Java Power Tools pokazuje ga kao najčešće korišten CI poslužitelj među ispitanicima, sakupivši (u vrijeme pisanja ovog članka) 37,8 posto svih glasova.

Podržani SCM-ovi

Hudson je odmah iz kutije integrirao podršku za Subverziju, a za integriranje s CVS-om potrebna je samo mala količina konfiguracije, pod pretpostavkom da je CVS klijent instaliran na Hudson računalu. Podržano je nekoliko drugih rješenja za upravljanje izvornim kodom (SCM) u obliku dodataka Hudson. U vrijeme pisanja ovog članka podržani su sljedeći SCM-ovi:

  • Accurev
  • BitKeeper
  • ClearCase
  • Git
  • Živa
  • Silom
  • StartTeam
  • Team Foundation Server
  • Vizualni izvor sigurnosti
  • URL SCM (poseban dodatak za SCM koji omogućuje upotrebu URL-ova za SCM)

U ovom članku koristit ću Subverziju i izvorno spremište na Java.net, tako da nećete morati instalirati nijedan od ovih dodataka. (Osim toga, znam nekoga tko radi na dodatku MKS SourceIntegrity Hudson. Ako ste zainteresirani za to, pošaljite mi e-poštu.)

Hudson je besplatan proizvod s otvorenim kodom koji se hostira na Javi.net. Izvorno ga je napisao Kohsuke Kawaguchi, osobni inženjer u tvrtki Sun Microsystems, koji je objavio na svom blogu u veljači 2005. Hudson je od tada imao otprilike 154 izdanja.

Evo nekoliko razloga zbog kojih mi se sviđa Hudson i zašto bih vam ga preporučio, izuzimajući bilo kakve neobične zahtjeve:

  • Od svih CI proizvoda koje sam koristio, daleko je najlakše ih je instalirati i konfigurirati.
  • Njegova korisnička sučelja zasnovana na Internetu vrlo su prijateljska, intuitivna i brzo reagiraju, u mnogim slučajevima pružajući trenutne povratne informacije o pojedinačnim konfiguracijskim poljima omogućene Ajaxom.
  • Hudson se temelji na Javi (što je korisno ako ste Java programer), ali nije ograničen na izgradnju softvera zasnovan na Javi.
  • Hudson je čisto komponentiziran i nudi dobro definiran i dokumentiran API proširivosti u obliku dodataka Hudson. To je zauzvrat dovelo do velike biblioteke dodataka Hudson koji proširuju funkcionalnost poslužitelja; oni su slobodno dostupni i mogu se instalirati s Hudsonove konzole.

Instaliranje Hudsona: Windows XP ili Ubuntu Linux

Da biste koristili Hudson, trebat će vam dostupan i podržan sustav kontrole izvora (popis potražite na bočnoj traci "Podržani SCM-ovi"), izvor koji se može ugraditi u artefakt i radna skripta za izgradnju. Osim toga, sve što vam stvarno treba za instaliranje i konfiguriranje radnog Hudsonovog poslužitelja je instalacija Jave, verzije 1.5 ili novije, i instalacijske datoteke Hudson, koja dolazi u obliku Java EE web arhive (WAR). Poslužitelj možete pokrenuti vrlo jednostavno pomoću sljedećeg naredbenog retka:

C:\hudson> java -jar hudson.war

Međutim, vjerojatno je češće raspoređivanje Hudsona na spremnik Java servleta koji se temelji na specifikacijama Servlet 2.4 i JSP 2.0, poput GlassFish, Tomcat, JBoss ili Jetty. U sljedećim odjeljcima provest ću vas kroz dva scenarija instalacije Hudsona: jedan koji koristi Tomcat 6 u sustavu Windows XP i drugi koji koristi JBoss 4.2.3 na Ubuntu Linuxu. (JBoss AS 5.0 objavljen je nakon datuma podnošenja članka.)

Instaliranje Hudsona: Tomcat 6 i Windows XP

Pretpostavit ću da na vašem Windows XP računalu već imate instaliranu verziju Jave 1.5 ili noviju. Slijedeći korake u nastavku instalirat će Tomcat 6.0.18 pomoću programa Windows Service Installer, tako da se Hudson pokreće odmah nakon pokretanja sustava Windows XP i pokrenut će se u pozadini čak i kada nije prijavljen niti jedan korisnik. 6.0.18.exe, koji biste trebali izvršiti da biste započeli instalaciju Tomcata.

Tomcat instalacija zatražit će od vas da odaberete opcije instalacije. Obavezno odaberite Prilagođene opcije, a zatim Usluga , kao što je prikazano na slici 2, tako da će Tomcat raditi kao usluga.

Zatim odaberite direktorij u koji želite instalirati Tomcat, kao što je prikazano na slici 3. Toplo preporučujem da odaberete direktorij bez razmaka. Možete mi zahvaliti kasnije.

Sada će vas instalacijski program pitati na kojem priključku želite preslušati. Zadani je port 8080, što je vjerojatno u redu; samo se pobrinite da nemate drugu aplikaciju koja koristi taj port. Ako to učinite, Tomcat se neće pravilno pokrenuti. Također ćete zatražiti da navedete korisničko ime i lozinku za Tomcat administratora. Sve je to prikazano na slici 4.

Zatim će vas instalacijski program tražiti da navedete mjesto Java JRE-a koji ste instalirali. Kao što možete vidjeti na slici 5, koristio sam Sun Java 1.6.0_07.

Nakon što kliknete Instaliraj , instalacija bi se trebala izvoditi do kraja i usluga će se pokrenuti. Možete se uvjeriti da Tomcat ispravno radi usmjeravanjem vašeg web preglednika na // localhost: 8080 (zamjenom odgovarajućeg imena ili IP adrese za localhost ako ne koristite web preglednik pokrenut na računalu na kojem je instaliran Tomcat). Prikazana web stranica trebala bi izgledati otprilike kao snimka zaslona na slici 6.

Sada, da biste instalirali Hudson, kopirajte datoteku hudson.war u poddirektorij webapps vašeg instalacijskog direktorija Tomcat. Ako ste koristili isti direktorij za instalaciju prikazan na slici 3, ovo bi bio C: \ Tomcat6 \ webapps. Tomcat će WAR datoteke instalirati vruće, ali najlakše je sada ponovno pokrenuti Tomcat. Postoje dva načina za to. Prvo je otvoriti DOS ljusku i unijeti sljedeće naredbe:

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

The second option is to open the Services applet. This applet can be found in the Administrative Tools group in the Control Panel, which can be located by clicking the Start button on the Windows toolbar, then selecting Settings and then Control Panel. In the Services applet, locate the service named Apache Tomcat and then click the Restart button. This is illustrated in Figure 7.

Hudson should now be installed. You can verify this by pointing your Web browser to //localhost:8080/hudson. The main Hudson screen is shown in Figure 8.

That's all there is to it! If you're comfortable with an application development environment based on Windows XP and Tomcat, you're all set. If you prefer a system running JBoss and Ubuntu Linux, read on.

Installing Hudson: JBoss 4.2.3 on Ubuntu Linux 8.04 (Hardy Heron)

To install Sun Java 1.6 on Ubuntu, open a shell and execute the following command:

 sudo apt-get install sun-java6-jdk

When issuing a sudo command, you will be prompted to enter your password.

Note that there are several ways to install JBoss; in the technique outlined here, you'll create a dedicated jboss user. This is considered a best practice, and is preferable to installing JBoss in your own home directory. The procedure outlined here has been condensed from a useful description at the Ubuntu forums.

First, you need to download the JBoss 4.2.3.GA package. Look for the file named jboss-4.2.3.GA.zip.

Next, you will need to create a user, a home directory, and a group, all named jboss. The group is a convenience not explored in this article; it will allow you to extend JBoss privileges to other users on your Ubuntu server.

Listing 1 shows the commented commands to create the jboss home directory, user, and group, and then install the JBoss server. Some commands are prefixed with sudo because they are root-privileged commands.

Listing 1. Creating the jboss account and installing the server

echo Create the jboss group sudo groupadd jboss echo Create the jboss user, define bash as the user's default shell and /home/jboss as the home directory echo and make the user jboss part of the group jboss sudo useradd -s /bin/bash -d /home/jboss -m -g jboss jboss echo Copy the jboss-4.2.3.GA file to /home/jboss or download directly into that directory sudo mv jboss-4.2.3.GA /home/jboss echo Change the owner of the file to jboss sudo chown jboss:jboss /home/jboss/jboss-4.2.3.GA echo Log into the jboss account sudo su jboss echo Go to the jboss home directory cd ~ echo Unzip the file jboss-4.2.3.GA unzip jboss-4.2.3.GA echo Create a symbolic link "jboss" for "jboss-4.2.3.GA". echo This allows you to change JBoss versions with minimal changes ln -s jboss-4.2.3.GA jboss

If the unzip command is not already installed, enter the following command (while logged in as a sudo-enabled user) to install it:

Sudo apt-get install unzip

The JBoss server is now basically installed. You could start the server using the following command:

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

U ovom ćete primjeru, međutim, umjesto toga instalirati skriptu za automatsko pokretanje tako da se usluga automatski pokreće kada se domaćin pokrene. Preuzimanje JBossa dolazi s tri različite int.d skripte, ali svaku treba doraditi; možete preuzeti skriptu jboss-init.sh koja će omogućiti automatsko pokretanje i zaustavljanje poslužitelja. Zatim pokrenite naredbe prikazane na popisu 2.