Рубрики
Без рубрики

Использование конвейеров Azure для создания, тестирования и развертывания приложения Spring Boot и Angular (3/7)

В этой серии сообщений в блоге мы собираемся развернуть приложение с полным стеком в Azure и узнать, как эффективно и с минимальными затратами настроить множество компонентов. Помеченный как spring, angular, azure, java.

Это сообщение в блоге является частью серии “развертывание приложения Spring Boot и Angular в Azure”, вот полный список сообщений:

  • Создание приложения Spring Boot и Angular для Azure (1/7)
  • Создание и настройка веб-приложения Azure и MySQL для размещения приложения Spring Boot (2/7)
  • Использование конвейеров Azure для создания, тестирования и развертывания приложения Spring Boot и Angular (3/7)
  • Использование Azure Application Insights с Spring Boot (4/7)
  • Использование Azure Application Insights с Angular (5/7)
  • Настройка Azure CDN для повышения производительности Angular (6/7)
  • Настройка кэша Azure Redis для повышения производительности Spring Boot (7/7)

Развертывание приложения Spring Boot в Azure

Существует несколько способов развертывания приложения Spring Boot в Azure. Один из самых простых способов – использовать плагин Maven для службы приложений Azure . Для нашего варианта использования мы хотим выйти за рамки простого приложения “Привет, мир”, и поэтому мы собираемся настроить полное решение CI/CD (Непрерывная интеграция/непрерывное развертывание), используя Лазурные конвейеры .

Как всегда, мы здесь экономим на бюджете: Azure Pipelines предоставляет щедрый бесплатный уровень, которого нам должно быть в значительной степени достаточно, поэтому мы ничего не должны платить.

Создание файла azure-pipelines.yml

Чтобы создать и протестировать наше приложение с помощью Azure Pipelines, нам понадобится файл azure-pipelines.yml в корне нашего проекта.

С JHipster нам повезло, нам просто нужно запустить jhipster ci-cd и ответить на пару вопросов, чтобы получить очень полную конфигурацию Azure Pipelines.

Вы можете проверить сгенерированный файл на this commit .

Этот конвейер будет создавать и тестировать приложение (как серверную часть Spring Boot, так и интерфейс Angular), поэтому это конвейер “непрерывной интеграции”. Если вам нужна дополнительная информация о задачах Azure Pipelines, вам следует обратиться к документации Azure Pipelines/| . Создать простую сборку Maven очень просто, тогда для выполнения более сложных конфигураций, как мы делаем с JHipster, может потребоваться немного больше времени.

Автоматическое развертывание с помощью конвейеров Azure в веб-приложение Azure

В предыдущем разделе мы создали файл azure-pipelines.yml : мы собираемся добавить в него новую задачу, чтобы опубликовать производственную сборку, как только все тесты будут пройдены. В результате он больше не будет выполнять только “Непрерывную интеграцию”, но и полное “Непрерывное развертывание”.

Откройте файл azure-pipelines.yml и добавьте в конце его:

      - script: ./mvnw package -Pprod -DskipTests
        displayName: 'BUILD: creating production build'
      - task: CopyFiles@2
        inputs:
          SourceFolder: 'target'
          Contents: '*.jar'
          TargetFolder: '$(Build.ArtifactStagingDirectory)'
      - task: PublishBuildArtifacts@1
        inputs:
          pathtoPublish: '$(Build.ArtifactStagingDirectory)'
          artifactName: bugtracker

На самом деле мы используем 3 задачи:

  • Один для создания производственной сборки с помощью Hipster. Пожалуйста, обратите внимание, что здесь мы пропускаем тесты, которые они должны были пройти раньше.
  • Еще один способ скопировать сгенерированный файл JAR-файла в каталог, где хранятся артефакты.
  • И последний, кто взял этот артефакт и опубликовал его.

Это автоматически опубликует артефакт вашей производственной сборки в Azure Pipelines.

ПРЕДУПРЕЖДЕНИЕ Поскольку веб-приложение Azure использует артефакт, который должен быть назван app.jar , нам нужно будет правильно назвать наш артефакт. Самый простой способ сделать это – создать его непосредственно с правильным именем, используя атрибут final Name в вашем pom.xml :

    
        app
        ...
    

Вы можете проверить изменения, которые мы только что внесли, чтобы настроить “Непрерывное развертывание” в this commit .

Отправьте приложение на GitHub и настройте конвейеры Azure

Если вы еще этого не сделали, отправьте свое приложение на GitHub: если вы не хотите, чтобы ваше приложение было общедоступным, помните, что GitHub предоставляет бесплатные неограниченные частные репозитории.

Как только ваше приложение будет размещено на GitHub, перейдите на GitHub marketplace , чтобы установить и настроить конвейеры Azure.

Затем вы можете войти в Azure Devops для настройки ваших конвейеров Azure:

  • Создайте новый проект.
  • В меню слева выберите “Конвейеры > Сборки” и создайте “новый конвейер”.
  • Выберите “GitHub” и выберите проект GitHub, который вы только что создали, выполнив описанные выше действия.
  • Поскольку мы создали файл azure-pipelines.yml в предыдущем разделе, он будет автоматически подобран, поэтому вам просто нужно “Запустить” его (с помощью кнопки в правом верхнем углу), чтобы посмотреть, как ваше приложение создается с помощью Azure Pipelines.

Поскольку эта сборка является сборкой “полного стека”, она будет компилировать, упаковывать и тестировать весь ваш код Spring Boot и Angular. Как вы можете себе представить, это довольно сложная задача, и на ее выполнение должно уйти чуть больше 5 минут.

Развертывание приложения в Azure Web App

Как только Azure Pipelines создаст ваше приложение в первый раз, оно опубликует артефакт проекта. В правом верхнем углу появится новая кнопка “Релиз”: нажмите на нее, чтобы создать новый релиз.

Вы увидите там свой опубликованный артефакт и сможете добавить к нему новые “этапы”, чтобы автоматически развернуть его в рабочей среде.

Создайте новый “этап” и выберите “Развернуть Java-приложение в службе приложений Azure”. Как только этот этап будет создан, откройте его и:

  • Дайте ему осмысленное название
  • Подключите его к вашей подписке Azure: вам нужно будет нажать на кнопку “Авторизоваться” и следовать инструкциям мастера авторизации
  • Измените тип приложения на “Веб-приложение в Linux”, поскольку это то, что мы создали в предыдущем сообщении в блоге
  • Выберите имя службы вашего приложения

Затем вам нужно изменить 2 задачи, настроенные на этом этапе:

  • Удалите первую задачу, называемую “Развернуть ВОЙНУ в службе приложений Azure”, поскольку мы не развертываем ВОЙНУ.
  • Включите вторую задачу, называемую “Развернуть JAR в службу приложений Azure”.

Теперь вы можете перейти в раздел “Конвейеры > Выпуски” и нажать на кнопку “Создать выпуск”. Это должно использовать ранее созданный артефакт (созданный с помощью azure-pipelines.yml ) и автоматически развернуть его в вашем экземпляре веб-приложения Azure.

Теперь вы можете подключиться к своему приложению и использовать его в рабочей среде. Поскольку это приложение JHipster, вот несколько советов, которые следует запомнить:

  • По умолчанию есть 2 учетные записи, admin (с паролем admin ) и user (с паролем пользователь )
  • Управление схемой базы данных осуществляется с помощью Ликвидная база , поэтому при запуске приложения оно автоматически обновляет схему базы данных. Эта схема была создана в предыдущем сообщении в блоге с использованием MySQL Workbench.
  • Если вы запустили приложение в процессе разработки на своем локальном компьютере, JHipster заполнил вашу базу данных некоторыми фиктивными данными, используя faker.js . В рабочем режиме, поскольку предполагается, что вы используете некоторые реальные данные, в вашей базе данных по умолчанию этих данных не будет.

Теперь каждый раз, когда проходит наша сборка, ваше приложение будет автоматически развертываться в рабочей среде, где оно будет автоматически управляться Azure Web Apps. Больше никаких производственных проблем, просто “git push”, и все готово!

Соображения о времени запуска и бюджетах

Возможно, вы заметили, что приложение запускается немного медленно, это занимает чуть больше 1 минуты. Наш наихудший сценарий составлял 100 секунд, так что это должно быть меньше 2 минут, но все равно это много времени!

У нас здесь два виновника: хипстер и оборудование. Мы действительно можем запустить JHipster примерно за треть этого времени с помощью различных настроек (в основном отключающих такие функции, как Liquibase). Прирост производительности может быть важен, так как здесь мы находимся на пределе памяти JVM, поэтому сборщик мусора работает усердно, и удаление нескольких функций ему очень поможет.

Затем выбранное оборудование оказалось не очень хорошим, так как мы хотели сэкономить и выбрали коробку “B1”: в течение первого месяца она бесплатна, а затем очень недорогая (около 30 долларов в месяц). Вот почему наша память слишком ограничена, а также почему наш процессор ограничен. Azure подсчитывает мощность процессора в “ACU”, что означает вычислительные единицы Azure, а поле B1 составляет всего 100 Acid.

Протестировать более мощный экземпляр на удивление просто: в вашем веб-приложении Azure выберите “Увеличить масштаб” и выберите экземпляр “P2V2”. Обновление выполняется на лету! На этом новом оборудовании, площадь которого составляет 420 акров (то есть более чем в 4 раза превышает вычислительную мощность “B1”), время запуска теперь составляет всего 15 секунд. Конечно, вы можете в любой момент уменьшить масштаб и вернуться к экземпляру “B1”.

Оригинал: “https://dev.to/azure/using-azure-pipelines-to-build-test-and-deploy-a-spring-boot-and-angular-application-3-7-593j”