В этом посте будет показано, как автоматизировать процесс развертывания веб-приложения Java (приложение для регистрации учащихся, разработанное с использованием базы данных MYSQL с Hibernate ORM в среде Jersey2 Spring на основе REST) с использованием непрерывной интеграции Jenkins — для создания проекта, запуска модульных тестов, загрузки встроенные артефакты в репозиторий Sonatype Snapshot, запуск отчетов Cooveura Code Coverage и развертывание приложения в Amazon EC2. Детали реального приложения объясняются в предыдущем посте, приведенном по ссылке Создание веб-приложения Java с использованием Jersey REST With Spring .
1. Установите Jenkins в качестве службы Windows
Перейдите на веб-сайт jenkins-ci.org с помощью интернет-браузера и загрузите собственный пакет Windows (ссылка подчеркнута для упрощения идентификации), как показано на правой боковой панели вкладки «Загрузить Jenkins».
После завершения загрузки разархивируйте zip-файл и щелкните файл jenkins-1.xxx.msi. Выполните шаги по настройке, чтобы установить Jenkins как службу Windows.
2. Изменить порт Jenkins по умолчанию
По умолчанию Jenkins работает на порте 8080. Чтобы избежать конфликта с другими приложениями, порт по умолчанию можно изменить, отредактировав файл jenkins.xml, находящийся в C: \ Program Files (x86) \ Jenkins location. Как показано ниже, измените httpPort на 8082.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
< service > < id >jenkins</ id > < name >Jenkins</ name > < description >This service runs Jenkins continuous integration system.</ description > < env name = "JENKINS_HOME" value = "%BASE%" /> <!-- if you'd like to run Jenkins with a specific version of Java, specify a full path to java.exe. The following value assumes that you have java in your PATH. --> < executable >%BASE%\jre\bin\java</ executable > < arguments >-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8082</ arguments > <!-- interactive flag causes the empty black Java window to be displayed. I'm still debugging this. <interactive /> --> < logmode >rotate</ logmode > < onfailure action = "restart" /> </ service > |
Как только изменение будет сохранено в файле jenkins.xml, перезапустите службу Jenkins из диспетчера задач Windows -> Службы, щелкните правой кнопкой мыши службу Jenkins и выберите «Остановить службу», чтобы остановить службу, как показано ниже.
Как только статус службы изменится на остановленный, перезапустите службу, щелкнув правой кнопкой мыши службу Jenkins и выберите «Запустить службу», чтобы снова запустить службу.
Перейдите к localhost: 8082, чтобы проверить, был ли перезапуск Jenkins успешным, как показано ниже — будет отображаться панель управления Jenkins. Обратите внимание, что требуется некоторое время, прежде чем сервис Jenkins станет доступным.
3. Установите плагины
На панели управления Jenkins перейдите к разделу «Управление Jenkins -> Управление плагинами», как показано на снимке ниже.
Установите следующие плагины и перезапустите Jenkins, чтобы изменения вступили в силу.
- Плагин GitHub (для интеграции Github с Jenkins)
- Плагин Jenkins Cobertura (для поддержки Cobertura)
- Плагин Deploy to Container (для развертывания WAR на контейнере Tomcat в экземпляре EC2)
- Плагин Jenkins Artifactory (для развертывания встроенных артефактов Maven в хранилище Snapshot)
4. Настройте систему
На панели управления Jenkins перейдите к разделу «Управление Jenkins -> Настройка системы», как показано на снимке ниже.
Перейдите в раздел JDK и нажмите «Добавить JDK», чтобы добавить установку JDK, как показано на снимке ниже. Укажите имя JDK, выберите версию JDK для установки и следуйте инструкциям на экране, чтобы сохранить учетные данные для входа в Oracle. Сохраните изменения.
Затем перейдите к разделу Git и нажмите «Добавить Git», чтобы добавить установку Git, как показано на снимке ниже. Укажите Git Name, укажите путь к исполняемому файлу Git и сохраните изменения.
Затем перейдите к разделу Maven и нажмите «Добавить Maven», чтобы добавить установку Maven, как показано на снимке ниже. Укажите Maven Name, выберите Maven Version для установки и сохраните изменения.
Перейдите в раздел плагинов Git и введите значения для имени пользователя и адреса электронной почты Github в качестве учетных данных, как показано ниже. Сохраните изменения.
Перейдите в раздел Artifactory и нажмите «Add», чтобы добавить информацию о серверах артефактов. Укажите URL-адрес для репозитория моментальных снимков и укажите учетные данные для развертывания, созданные на веб-сайте сервера Artifactory, как показано ниже. Нажмите «Проверить подключение», чтобы проверить, подходят ли параметры подключения для сохранения, и сохраните изменения.
Затем перейдите к разделу «Уведомление по электронной почте» и введите сведения о SMTP-сервере, как показано ниже. Нажмите кнопку «Дополнительно», чтобы добавить необходимые дополнительные сведения и сохранить изменения. Нажмите «Тестовая конфигурация путем отправки тестового электронного письма», введите получателя тестового электронного письма и нажмите «Тестовая конфигурация», чтобы увидеть, успешно ли отправлено электронное письмо.
5. Создать новую работу Дженкинс
На панели инструментов Jenkins нажмите «Новая работа», чтобы создать новую работу. Введите имя для работы и выберите «Построить проект maven2 / 3» в качестве опции и нажмите OK, как показано ниже.
На экране «Конфигурация нового задания» перейдите в раздел «Управление исходным кодом» и укажите URL-адрес хранилища Git для проекта, как показано ниже. Сохраните изменения.
Затем в разделе «Построение триггеров» выберите нужные параметры, как показано ниже, и сохраните изменения.
Перейдите в раздел «Построение», введите maven цели для создания снимка, как показано ниже, и сохраните изменения.
Перейдите в раздел «Настройки сборки». Выберите опцию для уведомления по электронной почте и введите значения для получателей электронной почты, как показано ниже. Сохраните изменения.
В разделе Действия после сборки нажмите кнопку «Добавить действие после сборки» и выберите «Развернуть войну / ухо в контейнере». В Amazon EC2 экземпляр Tomcat Manager (manager как имя пользователя) должен быть настроен с ролями manager-gui и manager-script, чтобы разрешить удаленное развертывание WAR / EAR в контейнере Tomcat. Шаги настройки можно найти по ссылке https://help.ubuntu.com/13.04/serverguide/tomcat.html в разделе «Веб-приложения администрирования Tomcat».
После завершения настройки веб-приложения Tomcat Manager в экземпляре Amazon EC2 введите сведения, необходимые для развертывания, как показано ниже. Сохраните изменения.
Аналогично, в действиях после сборки нажмите кнопку «Добавить действие после сборки» и выберите «Опубликовать отчет об охвате Cobertura». Введите шаблон отчета Cobertura XML, как показано ниже, и сохраните изменения.
6. Настройте settings.xml
Чтобы загрузить встроенные артефакты Maven на сервер артефактов, настройте файл Jenkins settings.xml, находящийся в папке C: \ Program Files (x86) \ Jenkins \ tools \ hudson.tasks.Maven_MavenInstallation \ Maven_3.1 \ conf с теми же параметрами. как указано в файле settings.xml по умолчанию (обычно находится в C: \ Program Files \ Apache Software Foundation \ apache-maven-3.1.0 \ conf для компьютера с Windows) установки Maven в системе.
Как правило, раздел сервера должен быть настроен в файле settings.xml для Jenkins в соответствии с данными сервера Artifactory.
01
02
03
04
05
06
07
08
09
10
11
12
|
< servers > < server > < id >sonatype-nexus-snapshots</ id > < username >username</ username > < password >password</ password > </ server > < server > < id >sonatype-nexus-staging</ id > < username >username</ username > < password >password</ password > </ server > </ servers > |
7. Обновите pom.xml
Файл pom.xml для проекта необходимо настроить с помощью следующих плагинов в разделе сборки для развертывания в репозиторий моментальных снимков и для запуска отчета Cobertura Coverage.
- Maven-составитель-плагин
- Maven-плагин-развернуть
- Cobertura-Maven-плагин
Также добавьте раздел parent, scm и developer, чтобы соответствовать требованиям, предъявляемым руководством сервера Artifactory, как показано ниже.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
< parent > < groupId >org.sonatype.oss</ groupId > < artifactId >oss-parent</ artifactId > < version >7</ version > </ parent > < scm > < developerConnection >scm:git:[email protected]:elizabetht/StudentEnrollmentWithREST.git</ developerConnection > < tag >StudentEnrollmentWithREST-1.3</ tag > </ scm > < developers > < developer > < id >elizabetht</ id > < name >Elizabeth Thomas</ name > </ developer > </ developers > < build > < finalName >StudentEnrollmentWithREST</ finalName > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-compiler-plugin</ artifactId > < version >2.5.1</ version > < inherited >true</ inherited > < configuration > < source >1.6</ source > < target >1.6</ target > </ configuration > </ plugin > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-deploy-plugin</ artifactId > < version >2.8.1</ version > < executions > < execution > < id >default-deploy</ id > < phase >deploy</ phase > < goals > < goal >deploy</ goal > </ goals > </ execution > </ executions > </ plugin > < plugin > < groupId >org.codehaus.mojo</ groupId > < artifactId >cobertura-maven-plugin</ artifactId > < version >2.6</ version > < configuration > < formats > < format >html</ format > < format >xml</ format > </ formats > </ configuration > < executions > < execution > < phase >package</ phase > < goals > < goal >cobertura</ goal > </ goals > </ execution > </ executions > </ plugin > </ plugins > </ build > |
8. Построить сейчас
После завершения вышеуказанных шагов настройки нажмите «Build Now» в Jenkins -> Upload REST Snapshot Artifacts (или соответствующее имя задания), чтобы построить проект на основе конфигурации.
Вывод на консоль содержит подробные журналы того, какие шаги были инициированы конфигурацией и результатом всей сборки.
Временную метку WAR, развернутого в экземпляре Amazon EC2, можно проверить, чтобы убедиться, что развертывание прошло успешно. Таким же образом можно проверить репозиторий снимков, чтобы убедиться, что загрузка артефактов прошла успешно.
Таким образом, весь процесс построения проекта вместе с модульными тестами всякий раз, когда инициируется изменение SCM или при других условиях, запускает отчеты о покрытии кода, загружает артефакты, созданные в хранилище артефактов моментальных снимков, развертывает WAR-файл в контейнере удаленного сервера и вызывает электронные письма для Получатели могут быть автоматизированы одним нажатием кнопки через Jenkins.