Статьи

Создание собственных приложений для облачной среды в Spring — часть 7

В последнем посте блога мы настроили репозиторий Git и создали конвейер для нашего сервера Eureka и развернули его в Bluemix. Теперь, когда наш сервер Eureka развернут в облаке, мы можем развернуть сервисы, использующие Eureka. В этой записи блога я расскажу, как это сделать для службы «Участники», но процесс будет таким же и для других служб. После успешного развертывания службы участников просто выполните те же действия для других служб (Races, Web и Hystrix).

Сначала давайте создадим Git-репо в IBM DevOps Services для нашего участника. Перейдите на сайт jazzhub.net , войдите в систему и нажмите кнопку « Создать проект» . Выберите опцию «Создать новый репозиторий» и выберите опцию «Git-репозиторий» в Bluemix или GitHub. Единственный другой вариант, который необходимо выбрать, — это сделать проект Bluemix . Когда вы выбираете эту опцию, убедитесь, что вы выбрали ту же организацию и пространство, в котором вы развернули свой сервер Eureka. Если вы хотите, вы можете выбрать / отменить выбор других параметров на этой странице в зависимости от того, что вы хотите сделать. Наконец, нажмите кнопку «Создать», чтобы создать хранилище.

Перед тем, как поместить код в репозиторий Git, нам нужно создать файл .gitignore, чтобы игнорировать файлы, которые нам не нужны в репо. Откройте окно терминала и перейдите в корневой каталог службы «Участники» (папка, содержащая POM). Откройте ваш любимый текстовый редактор, создайте новый файл с именем .gitignore и добавьте следующий контент.

.settings
target
.classpath
.project

После сохранения файла .gitignore выполните следующий набор команд.

$ git init
$ git add .
$ git commit -m "initial commit"
$ git remote add origin <url to git repo on Bluemix>
$ git push origin master

Все, что мы делаем выше, — это инициализация локального репозитория Git, добавление в него всего нашего кода, его фиксация, добавление нашего нового удаленного репозитория Git и затем передача всего кода, который мы зафиксировали локально, в наше удаленное репозиторий Git в Bluemix. В этом не должно быть ничего нового, если вы знакомы с Git. Как только код будет передан в удаленное хранилище Git в Bluemix, вы можете обновить страницу репозитория в IBM DevOps Services и увидеть весь свой код.

Снимок экрана 2015-10-28 в 11.02.09

Настройка службы для запуска в облаке

Сейчас все наши сервисы настроены на поиск сервера Eureka по адресу  http: // localhost: 8761 / eureka / . Нам нужно будет изменить этот URL, чтобы он указывал на наш сервер Eureka в облаке. Мы могли бы жестко закодировать URL в application.yml,  но, будучи хорошими разработчиками Cloud Foundry, мы собираемся использовать предоставляемый пользователем сервис, который мы создали для Eureka в конце предыдущего урока .

Помимо изменения местоположения сервера Eureka в файле application.yml, мы должны предоставить Eureka больше информации об услуге участников. Eureka нужно будет знать правильное имя хоста службы, когда служба регистрируется в Eureka, и нам также нужно предоставить Eureka уникальный идентификатор экземпляра для каждого отдельного экземпляра службы. Уникальный идентификатор экземпляра особенно важен, когда мы масштабируем сервисы по горизонтали, т.е. у нас запущены 2 экземпляра сервиса участников.

Наконец, нам нужно специально настроить порт, на котором мы работаем, в облаке. По умолчанию Spring Cloud использует порт, на котором запускается сервер. Когда мы работаем в Bluemix и Cloud Foundry, порт, на котором работает приложение за маршрутизатором Cloud Foundry, является случайным портом. Однако маршрутизатор Cloud Foundry обслуживает приложение через порты 80 и 443, поэтому мы должны сообщить Eureka, что служба работает в поте 80 вместо порта, на котором работает контейнер приложения за маршрутизатором Cloud Foundry. Чтобы решить эту проблему, мы добавляем Spring Profile в наш файл application.yml, который активируется только при развертывании приложения в облаке.

Откройте файл application.yml для вашей службы Участников и измените раздел Eureka, чтобы иметь следующие свойства.

eureka:
  client:
    serviceUrl:
      defaultZone: ${vcap.services.ocr-eureka.credentials.uri:http://localhost:8761/eureka/}
  instance:
    hostname: ${vcap.application.uris[0]:localhost}
    metadataMap:
      instanceId: ${vcap.application.instance_id:${spring.application.name}:${spring.application.instance_id:${server.port}}}

---
spring:
  profiles: cloud
eureka:
  instance:
    nonSecurePort: 80

Перед продолжением убедитесь, что вы зафиксировали и передали изменения, внесенные в файл application.yml, в Bluemix.

Настройка сборки и развертывания конвейера

Теперь давайте настроим этапы сборки и развертывания для нашего сервиса участников в Bluemix. Вернувшись в проект на IBM DevOps Services, нажмите кнопку Build and Deploy. Нажмите кнопку Добавить этап, чтобы добавить новый этап. Дайте сцене название Build . Для Типа входа выберите Репозиторий SCM , это должно автоматически заполнить поле Git URL. Убедитесь, что мастер выбран в раскрывающемся списке. В разделе Stage Trigger выберите «Запускать задания каждый раз, когда изменения передаются в Git» .

Снимок экрана 2015-10-16 в 16.10.46

 

Затем нажмите на вкладку Jobs. Нажмите кнопку ADD JOB и выберите Build . Под Типом Строителя выберите Maven . Значения по умолчанию для сборки должны быть хорошими, нам просто нужно внести небольшое изменение в сценарий оболочки. Наш код использует Java 1.8, но по умолчанию сборка будет использовать Java 1.7. Чтобы исправить это изменение проблемы, нам нужно изменить переменную среды JAVA_HOME, чтобы она указала на Java 1.8.

#!/bin/bash
export JAVA_HOME=~/java8
mvn -B package

Снимок экрана 2015-10-16 в 4.37.47 вечера

Нажмите Сохранить, чтобы сохранить этап сборки.

Вернувшись на страницу «Сборка и развертывание», нажмите кнопку «Добавить этап» еще раз, чтобы добавить еще один этап. Дайте сцене имя Deploy . В поле «Тип ввода» выберите « Построить артефакты».   При выборе Артефактов сборки для Типа ввода на этом этапе будут предоставлены артефакты сборки из другого этапа. В выпадающих меню Stage и Job выберите Build . Под триггером этапа выберите « Запускать задания после завершения предыдущего этапа», чтобы наш этап развертывания запускался автоматически после завершения этапа сборки.

Снимок экрана 2015-10-16 в 16:9.27 вечера

Затем нажмите на вкладку JOBS. Нажмите ADD JOB и выберите Deploy. Под Типом развертывания выберите Cloud Foundry . Под Target выберите центр обработки данных, в котором вы хотите развернуть. Затем выберите организацию и пространство, в котором вы хотите развернуть приложение. Нам нужно будет немного изменить сценарий развертывания, чтобы он указывал на файл Jar, который мы хотим развернуть. В дополнение к добавлению Jar для развертывания вы, вероятно, также захотите настроить имя хоста для службы участников. Если вы этого не сделаете, вы можете столкнуться с ошибками при развертывании приложения, если имя хоста уже используется.

После того, как мы нажали на файл jar, мы установили переменную окружения с именем SPRING_PROFILES_ACTIVE в облаке . Это активирует облачный профиль в нашем приложении, поэтому наша облачная конфигурация в файле application.yml станет активной. Наконец, мы привязываемся к нашему сервису ocr-eureka, который мы создали в предыдущем сообщении в блоге . Этот сервис ocr-eureka предоставляет нашему приложению URL-адрес нашего сервера Eureka.

Измените сценарий развертывания следующим образом.

#!/bin/bash
cf push "${CF_APP}" -p ocr-participants-0.0.1-SNAPSHOT.jar -n ocr-participants -m 512M --no-start
cf set-env "${CF_APP}" SPRING_PROFILES_ACTIVE cloud
cf bind-service "${CF_APP}" ocr-eureka
cf start "${CF_APP}"

Вы захотите изменить значение параметра  -n в своем скрипте, чтобы оно было уникальным по вашему выбору.

Снимок экрана 2015-10-29 в 10.21.45

Нажмите «Сохранить», чтобы вернуться на экран «Сборка и развертывание».

Теперь вы можете проверить все, нажав кнопку воспроизведения на этапе сборки. Это преформирует сборку, а затем выполняет развертывание в Bluemix. Если вы хотите просмотреть этапы сборки и развертывания, вы можете щелкнуть ссылки Просмотр журналов и истории, чтобы просмотреть журналы в реальном времени о том, что происходит на каждом этапе. После завершения развертывания этап развертывания будет содержать ссылку на работающую службу «Участники». Нажмите на ссылку, и она должна открыть новую вкладку и вернуть JSON для всех участников службы «Участники». Кроме того, сервис Участники должны зарегистрироваться в Eureka в облаке. Если вы откроете сервер Eureka, работающий в облаке, вы должны увидеть зарегистрированную услугу «Участники».

Снимок экрана 2015-10-28 в 12.33.23 вечера

Развертывание других сервисов

Теперь, когда мы настроили и развернули службу участников, следуйте тому же процессу для других служб (Races, Web и Hystrix). После того, как все настроено и развернуто, у вас должно быть запущенное веб-приложение, развернутое в облаке.

Тестирование вашего приложения

Если вы перейдете по URL-адресу, привязанному к вашему ocr-веб-приложению в Bluemix, вы должны увидеть список гонок и выбрать их, чтобы увидеть участников. Если вы это сделаете, вы успешно развернули свое первое облачное нативное приложение! Кроме того, Eureka должна содержать список всех сервисов, которые мы используем в облаке.

Снимок экрана 2015-11-02 в 15.15.51

Наконец, теперь вы сможете перейти на свою панель управления Hystrix, работающую в облаке, и просмотреть данные о ваших автоматических выключателях. Откройте URL-адрес, связанный с вашим приложением Hystrix (не забудьте добавить / hystrix в конец его) и введите URL-адрес вашей турбины (обратитесь к этому сообщению,  если вы не помните, как его сконструировать). Вы должны увидеть свои автоматические выключатели, отображаемые на панели инструментов Hystrix!