Руководство. Развертывание в службе приложение Azure с помощью Jenkins и Azure CLI

Важно!

Многие службы Azure используют подключаемые модули Jenkins. Поддержка некоторых таких подключаемых модулей будет прекращена 29 февраля 2024 г. В настоящее время для интеграции Jenkins со службами Azure рекомендуется использовать Azure CLI. Дополнительные сведения см. в статье Подключаемые модули Jenkins для Azure.

Для развертывания веб-приложения Java в Azure можно использовать Azure CLI в конвейере Jenkins. В этом учебнике описано, как выполнять такие задачи:

  • Создание виртуальной машины Jenkins
  • Настройка Jenkins
  • Создание веб-приложения в Azure
  • Подготовка репозитория GitHub
  • Создание конвейера Jenkins
  • Запуск конвейера и проверка веб-приложения

Необходимые компоненты

Настройка Jenkins

Ниже показано, как установить необходимые компоненты JDK Java и Maven на контроллере Jenkins:

  1. Войдите в контроллер Jenkins с помощью SSH.

  2. Скачайте и установите сборку Azul Zulu OpenJDK для Azure из репозитория apt-get:

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
    sudo apt-add-repository "deb http://repos.azul.com/azure-only/zulu/apt stable main"
    sudo apt-get -q update
    sudo apt-get -y install zulu-8-azure-jdk
    
  3. Выполните следующую команду, чтобы установить Maven:

    sudo apt-get install -y maven
    

Добавление субъекта-службы Azure в учетные данные Jenkins

Ниже показано, как указать учетные данные Azure:

  1. Убедитесь, что подключаемый модуль учетных данных установлен.

  2. На панели мониторинга Jenkins выберите "Учетные данные" —> "Система".>

  3. Выберите элемент Global credentials (unrestricted) (Глобальные учетные данные (неограниченные)).

  4. Чтобы добавить субъект-службу Microsoft Azure, выберите элемент Add Credentials (Добавить учетные данные). Убедитесь, что выбран тип учетных данных Username with password (Имя пользователя с паролем), и введите следующие данные:

    • Имя пользователя: appId субъекта-службы.
    • Пароль: субъект-служба password
    • Идентификатор: идентификатор учетных данных (например AzureServicePrincipal)

Создание службы приложений Azure для развертывания веб-приложения Java

Создайте план службы приложений Azure с ценовой категорией Бесплатный с помощью команды az appservice plan create:

az appservice plan create \
    --name <app_service_plan> \ 
    --resource-group <resource_group> \
    --sku FREE

Основные моменты:

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

Создание веб-приложения Azure

Создайте определение веб-приложения в плане службы приложений myAppServicePlan с помощью команды az webapp create.

az webapp create \
    --name <app_name> \ 
    --resource-group <resource_group> \
    --plan <app_service_plan>

Основные моменты:

  • Определение веб-приложения предоставляет URL-адрес для доступа к приложению и настраивает несколько параметров для развертывания кода в Azure.
  • Замените заполнитель <app_name> уникальным именем приложения.
  • Имя приложения является частью доменного имени по умолчанию для веб-приложения. Следовательно, оно должно быть глобально уникальным среди всех приложений Azure.
  • Позже можно сопоставить запись личного доменного имени с веб-приложением, прежде чем предоставлять его пользователям.

Настройка Java

Настройте конфигурацию среды выполнения Java для приложения с помощью команды az appservice web config update:

az webapp config set \ 
    --name <app_name> \
    --resource-group <resource_group> \ 
    --java-version 1.8 \ 
    --java-container Tomcat \
    --java-container-version 8.0

Подготовка репозитория GitHub

  1. Откройте репозиторий Simple Java Web App for Azure (Простое веб-приложение Java для Azure).

  2. Чтобы создать вилку репозитория для своей учетной записи GitHub, нажмите кнопку Fork (Вилка).

  3. Откройте файл Jenkinsfile, щелкнув имя файла.

  4. Чтобы изменить файл, щелкните значок карандаша.

  5. Обновите идентификатор подписки и идентификатор арендатора.

      withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>',
            'AZURE_TENANT_ID=<tenant_id>']) 
    
  6. Обновите группу ресурсов и имя веб-приложения в строках 22 и 23 соответственно.

    def resourceGroup = '<resource_group>'
    def webAppName = '<app_name>'
    
  7. Обновление идентификатора учетных данных в экземпляре Jenkins

    withCredentials([usernamePassword(credentialsId: '<service_princial>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
    

Создание конвейера Jenkins

Чтобы создать конвейер Jenkins:

  1. Откройте Jenkins в веб-браузере.

  2. Выберите New Item (Создать элемент).

  3. Введите имя должности.

  4. Выберите Конвейер.

  5. Нажмите ОК.

  6. Выберите Конвейер.

  7. Для параметра Definition (Определение) выберите значение Pipeline script from SCM (Сценарий конвейера из SCM).

  8. Для параметра SCM выберите значение Git.

  9. Введите URL-адрес GitHub для вилки репозитория: https:\<forked_repo\>.git.

  10. Выберите Сохранить

Тестирование конвейера

  1. Перейдите к созданному конвейеру.

  2. Выберите элемент Build now (Выполнить сборку).

  3. После компиляции щелкните Console Output (Выходные данные консоли), чтобы просмотреть сведения о компиляции.

Проверка веб-приложения

Чтобы проверить, успешно ли развернут WAR-файл в веб-приложении:

  1. Перейдите по следующему URL-адресу: http://&lt;app_name>.azurewebsites.net/api/calculator/ping.

  2. Должен отобразиться текст, аналогичный приведенному ниже.

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  3. Перейдите по следующему URL-адресу (замените x и y двумя значениями, которые нужно суммировать): http://< app_name.azurewebsites.net/api/calculator/add?x>=<x>&y=<y>.><><

    Example of running the demo add

Развертывание в Службу приложений Azure в Linux

Служба приложений также позволяет клиентам размещать веб-приложения из поддерживаемых стеков приложений изначально в Linux. Кроме того, она может запускать пользовательские контейнеры Linux (также известные как Веб-приложения для контейнеров).

Вы можете изменить скрипт для развертывания в Службе приложений Azure в Linux. Служба приложений в Linux поддерживает Docker. Таким образом, необходимо предоставить Dockerfile для упаковки веб-приложения со средой выполнения службы в образ Docker. Затем подключаемый модуль создаст образ, отправит его в реестр Docker и развернет в веб-приложении.

  1. См. статью Перенос пользовательского программного обеспечения в Службу приложений Azure с помощью пользовательского контейнера, чтобы создать Службу приложений Azure в Linux и Реестр контейнеров Azure.

        az group create --name myResourceGroup2 --location westus2
        az acr create --name myACRName --resource-group myResourceGroup2 --sku Basic --admin-enabled true
        az appservice plan create --name myAppServicePlan --resource-group  myResourceGroup2 --is-linux
        az webapp create --resource-group myResourceGroup2 --plan myAppServicePlan --name myApp --deployment-container-image-name myACRName.azurecr.io/calculator:latest
    
  2. Установите Docker в Jenkins.

  3. Убедитесь, что подключаемый модуль конвейера Docker установлен.

  4. В той же вилке репозитория простого веб-приложения Java для Azure измените файл Jenkinsfile2 следующим образом:

    1. Обновите идентификатор подписки и идентификатор арендатора.

       withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>',
              'AZURE_TENANT_ID=<myTenantId>']) {
      
    2. Вместо заполнителей укажите имена группы ресурсов, веб-приложения и реестра ACR.

      def webAppResourceGroup = '<resource_group>'
      def webAppName = '<app_name>'
      def acrName = '<registry>'
      
    3. Замените <azsrvprincipal\> идентификатором учетных данных.

      withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
      
  5. Создайте конвейер Jenkins, как вы делали это при развертывании в веб-приложении Azure в Windows с помощью Jenkinsfile2.

  6. Запустите новое задание.

  7. Для проверки выполните следующую команду в Azure CLI:

    az acr repository list -n <myRegistry> -o json
    

    Должен отобразиться примерно такой результат:

    [
    "calculator"
    ]
    
  8. Перейдите по ссылке http://<app_name>.azurewebsites.net/api/calculator/ping (замените заполнитель). Должен отобразиться примерно такой результат:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  9. Перейдите по ссылке http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (замените заполнители). Отобразится сумма значений, заданных для x и y.

Следующие шаги