Непрекъсната интеграция с Hudson

Непрекъснатата интеграция се превърна в обичайна практика за екипи, фокусирани върху осигуряване на качеството на кода през целия жизнен цикъл на разработката на софтуер. В тази статия Никълъс Уайтхед представя Hudson, популярен CI сървър с отворен код. Научете как да настроите сървър на Hudson във вашата среда за разработка на приложения (дадени са примери за Windows XP с Tomcat 6 или Ubuntu Linux с JBoss AS), да получите общ преглед на многото опции за конфигурация, които Hudson предлага, след това да внедрите автоматизирано изграждане, тестване, и процес на докладване за примерен проект. Ниво: Начинаещ

Непрекъснатата интеграция (CI) е набор от практики, предназначени да улеснят и стабилизират процеса на създаване на софтуерни компилации. CI подпомага екипите за разработка със следните предизвикателства:

  • Автоматизация на изграждането на софтуера: С CI можете да стартирате процеса на изграждане на софтуерен артефакт с едно натискане на бутон, по предварително зададен график или в отговор на определено събитие. Ако искате да изградите софтуерен артефакт от източник, вашият процес на изграждане не е свързан с конкретна IDE, компютър или човек.
  • Непрекъсната автоматизирана проверка на компилацията : CI система може да бъде конфигурирана да изпълнява непрекъснато компилации, когато се проверява нов или модифициран изходен код. Това означава, че докато екип от разработчици на софтуер периодично проверява нов или модифициран код, системата CI непрекъснато проверява дали компилацията не се нарушава от новия код. Това намалява необходимостта разработчиците да проверяват помежду си промените във взаимозависимите компоненти.
  • Непрекъснато автоматизирано тестване на компилация : Разширение на верификацията на компилация, този процес гарантира, че новият или модифициран код не води до неуспех на набор от предварително дефинирани тестове на вградените артефакти. Както при проверката на компилацията, така и при тестването, грешките могат да предизвикат известия до заинтересованите страни, което показва, че компилацията или някои тестове са се провалили.
  • Автоматизация на процедурата след компилация : Жизненият цикъл на софтуерния артефакт може също да изисква допълнителни задачи, които могат да бъдат автоматизирани, след като проверката и тестването на компилацията са завършени, като например генериране на документация, опаковане на софтуера и разполагане на артефактите в работеща среда или в хранилище на софтуер. По този начин артефактите могат бързо да бъдат предоставени на потребителите.

За да внедрите CI сървър, се нуждаете най-малко от достъпно хранилище на изходния код (и изходния код в него), набор от скриптове и процедури за изграждане и набор от тестове за изпълнение срещу вградените артефакти. Фигура 1 очертава основната структура на CI система.

Системните компоненти влизат в действие в следната последователност:

  1. Разработчиците проверяват нов и модифициран код в хранилището на изходния код.
  2. CI сървърът създава специално работно пространство за всеки проект. Когато се поиска или планира нова компилация, източникът се извлича от хранилището в това работно пространство, където компилацията след това се изпълнява.
  3. CI сървърът изпълнява процеса на изграждане на новосъздаденото или обновено работно пространство.
  4. След като компилацията завърши, CI сървърът може по желание да извика дефинирания тестов пакет за новите артефакти. Ако компилацията се провали, регистрираните лица могат да бъдат уведомени по имейл, незабавни съобщения или някакъв друг метод.
  5. Ако компилацията е успешна, артефактите се пакетират и предават на цел за разполагане (като сървър на приложения) и / или се съхраняват като нов версиониран артефакт в софтуерно хранилище. Това хранилище може да бъде част от CI сървъра или може да бъде външно хранилище, като файлов сървър или сайт за разпространение на софтуер като Java.net или SourceForge. Хранилището на изходния код и хранилището на артефакти могат да бъдат отделни и всъщност е възможно да се използват някои CI сървъри без никаква формална система за контрол на източника.
  6. CI сървърите обикновено имат някакъв вид конзола, където проектите могат да се конфигурират и отстраняват грешки и където могат да се издават заявки за операции като ad hoc незабавни компилации, генериране на отчети или извличане на вградени артефакти.

Hudson: Сървър за непрекъсната интеграция

Непрекъснатата интеграция нараства през последните няколко години и днес имате доста CI сървъри, от които можете да избирате, както търговски, така и безплатни. Аз лично бях използвал четири CI сървъра, преди колега да ми препоръча да погледна Hudson. Веднага ми направи впечатление. Докато първоначално предположих, че Хъдсън не е добре известен, проучване на сайта на Java Power Tools го показва като най-широко използвания CI сървър сред респондентите, събрал (към момента на писането) 37,8% от всички гласове.

Поддържани SCM

Hudson има интегрирана поддръжка за Subversion още от самото начало и за интегриране с CVS се изисква само малко количество конфигурация, при условие че клиентът CVS е инсталиран на хоста на Hudson. Поддържат се няколко други решения за управление на изходния код (SCM) под формата на приставки на Hudson. По време на това писане се поддържат следните SCM:

  • Accurev
  • BitKeeper
  • ClearCase
  • Git
  • Жива
  • Изпълнявайте
  • StartTeam
  • Сървър на Team Foundation
  • Visual SourceSafe
  • URL SCM (специален SCM плъгин, който позволява използването на URL адреси за SCM)

В тази статия ще използвам Subversion и хранилището на източника в Java.net, така че няма да е необходимо да инсталирате нито един от тези плъгини. (Освен това знам някой, който работи върху приставката MKS SourceIntegrity Hudson. Ако се интересувате от това, изпратете ми имейл.)

Hudson е безплатен продукт с отворен код, хостван на Java.net. Първоначално е написан от Kohsuke Kawaguchi, персонал инженер в Sun Microsystems, който обяви излизането си в своя блог през февруари 2005 г. Оттогава Hudson има приблизително 154 издания.

Ето някои от причините, поради които харесвам Хъдсън и защо бих ви го препоръчал, като изключвам необичайни изисквания:

  • От всички продукти на CI, които съм използвал, е най-лесният за инсталиране и конфигуриране.
  • Неговите уеб базирани потребителски интерфейси са много приятелски, интуитивни и отзивчиви, като в много случаи осигуряват незабавна обратна връзка с активирани Ajax за отделни полета за конфигурация.
  • Hudson е базиран на Java (което е полезно, ако сте разработчик на Java), но не се ограничава до изграждането на Java-базиран софтуер.
  • Hudson е чисто компонентен и предлага добре дефиниран и документиран API за разширяемост под формата на плъгини Hudson. Това от своя страна доведе до голяма библиотека от плъгини Hudson, които разширяват функционалността на сървъра; те са свободно достъпни и могат да се инсталират от конзолата на Hudson.

Инсталиране на Hudson: Windows XP или Ubuntu Linux

За да използвате Hudson, ще ви е необходима достъпна и поддържана система за контрол на източника (вижте страничната лента "Поддържани SCM" за списък), източник, който може да бъде вграден в артефакт, и работещ скрипт за изграждане. Освен това всичко, от което наистина се нуждаете, за да инсталирате и конфигурирате работещ сървър на Hudson, е инсталиране на Java, версия 1.5 или по-нова, и инсталационния файл на Hudson, който се предлага под формата на уеб архив на Java EE (WAR). Можете да стартирате сървъра много просто, като използвате следния команден ред:

C:\hudson> java -jar hudson.war

Вероятно е по-често обаче да се разполага Hudson върху контейнер за Java сървлети, който се основава на спецификациите Servlet 2.4 и JSP 2.0, като GlassFish, Tomcat, JBoss или Jetty. В следващите раздели ще ви преведа през два сценария за инсталиране на Hudson: един с помощта на Tomcat 6 под Windows XP и друг с помощта на JBoss 4.2.3 на Ubuntu Linux. (JBoss AS 5.0 беше пуснат след датата на подаване на тази статия.)

Инсталиране на Hudson: Tomcat 6 и Windows XP

Предполагам, че вече имате инсталирана версия 1.5 или по-нова на Java на вашата машина с Windows XP. Следвайки стъпките по-долу ще инсталирате Tomcat 6.0.18 с помощта на Windows Service Installer, така че Hudson да се стартира веднага след зареждане на Windows XP и ще работи във фонов режим, дори когато няма влязъл потребител. 6.0.18.exe, който трябва да изпълните, за да започнете инсталирането на Tomcat.

Инсталацията на Tomcat ще ви подкани да изберете опции за инсталиране. Не забравяйте да изберете персонализирани опции и след услуга , както е показано на фигура 2, така че Tomcat ще работи като услуга.

След това изберете директория, в която искате да инсталирате Tomcat, както е показано на Фигура 3. Силно препоръчвам да изберете директория без интервали. Можете да ми благодарите по-късно.

Сега инсталационната програма ще ви попита на кой порт искате да слушате. По подразбиране е порт 8080, което вероятно е добре; просто се уверете, че нямате друго приложение, използващо този порт. Ако го направите, Tomcat няма да стартира правилно. Също така ще бъдете помолени да предоставите потребителско име и парола за администратор на Tomcat. Всичко това е показано на Фигура 4.

След това инсталационната програма ще ви помоли да предоставите местоположението на Java JRE, който сте инсталирали. Както можете да видите на Фигура 5, използвах Sun Java 1.6.0_07.

След като щракнете върху Инсталиране , инсталацията трябва да се изпълни и услугата ще започне да работи. Можете да се уверите, че Tomcat работи правилно, като насочите вашия уеб браузър към // localhost: 8080 (замествайки подходящото име или IP адрес за localhost, ако не използвате уеб браузър, работещ на компютъра, на който е инсталиран Tomcat). Показваната уеб страница трябва да изглежда като екранна снимка на фигура 6.

Сега, за да инсталирате Hudson, копирайте файла hudson.war в поддиректорията webapps на вашата инсталационна директория на Tomcat. Ако сте използвали същата инсталационна директория, показана на Фигура 3, това би било C: \ Tomcat6 \ webapps. Tomcat ще разгърне горещо WAR файлове, но най-лесното нещо, което трябва да направите сега, е да рестартирате Tomcat. Има два начина да направите това. Първият е да отворите DOS черупка и да въведете следните команди:

 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

В този пример обаче вместо това ще инсталирате скрипт за автоматично стартиране, така че услугата да се стартира автоматично при стартиране на хоста. Изтеглянето на JBoss се предлага с три различни int.d скрипта, но всеки трябва да бъде променен; можете да изтеглите скрипта jboss-init.sh, който ще позволи автоматичното стартиране и спиране на сървъра. След това изпълнете командите, показани в Листинг 2.