Руководство по Настройка среды Jenkins для включения непрерывной интеграции и непрерывного развертывания для приложения Java в Service Fabric

Это руководство представляет собой пятую часть цикла. В нем показано, как развернуть обновления в приложении с помощью Jenkins. В этом руководстве приложение Voting развертывается в кластере с помощью подключаемого модуля Jenkins для Service Fabric в сочетании с репозиторием GitHub, в котором размещено это приложение.

В пятой части цикла вы узнаете, как выполнять такие задачи:

  • Развертывание контейнера Jenkins для Service Fabric на компьютере.
  • Настройка среды Jenkins для развертывания в Service Fabric.
  • Обновление приложения.

Из этого цикла руководств вы узнаете, как выполнять следующие задачи:

Предварительные требования

  • Необходимо установить Git на локальный компьютер, используя страницу загрузки Git. Дополнительные сведения о Git см. в документации по Git.
  • Необходимо иметь опыт работы с Jenkins.
  • Необходимо создать учетную запись GitHub и уметь использовать GitHub.
  • Необходимо установить Docker на компьютер.

Получение и развертывание образа контейнера Jenkins для Service Fabric

Jenkins можно настроить внутри или за пределами кластера Service Fabric. Ниже показано, как с помощью предоставленного образа Docker настроить его за пределами кластера. Тем не менее также можно использовать предварительно настроенную среду сборки Jenkins. Текущий образ контейнера поставляется вместе с установленным подключаемым модулем Service Fabric, готовым к работе с Service Fabric.

Примечание

В следующем примере вытягивается общедоступный образ контейнера из Docker Hub. Мы рекомендуем выполнить проверку подлинности с учетной записью Docker Hub (docker login) вместо выполнения анонимного запроса на вытягивание. Чтобы повысить надежность при использовании общедоступного содержимого, импортируйте образ и управляйте им в частном реестре контейнеров Azure. Узнайте больше о работе с общедоступными образами.

  1. Получите образ контейнера Jenkins для Service Fabric: docker pull rapatchi/jenkins:v10. Этот образ предварительно установлен в подключаемом модуле Jenkins Service Fabric.

  2. Запустите образ контейнера из расположения, в котором хранятся сертификаты Azure, на подключенном локальном компьютере.

    docker run -itd -p 8080:8080 -v /service-fabric-java-quickstart/AzureCluster rapatchi/jenkins:v10
    
  3. Получите идентификатор экземпляра образа контейнера. Вы можете вывести список всех контейнеров Docker с помощью команды docker ps –a.

  4. Получите пароль своего экземпляра Jenkins, выполнив следующую команду:

    docker exec [first-four-digits-of-container-ID] cat /var/jenkins_home/secrets/initialAdminPassword
    

    Если идентификатор контейнера имеет значение 2d24a73b5964, используйте 2d24.

    • Этот пароль необходим для входа на панель мониторинга Jenkins с портала http://<HOST-IP>:8080.
    • После первого входа можно создать учетную запись пользователя или пользоваться учетной записью администратора.
  5. Настройте GitHub для работы с Jenkins, выполнив шаги, описанные в статье Generating a new SSH key and adding it to the ssh-agent (Создание ключа SSH и его добавление в агент SSH). Так как команды запускаются из контейнера Docker, необходимо следовать инструкциям для среды Linux.

    • Для создания SSH-ключа используйте инструкции, предоставленные GitHub. Затем добавьте SSH-ключ в учетную запись GitHub, в которой находится репозиторий.

    • В оболочке Jenkins или Docker (а не на узле) выполните команды, перечисленные в приведенной выше статье.

    • Чтобы войти в оболочку Jenkins с вашего узла, выполните следующие команды:

      docker exec -t -i [first-four-digits-of-container-ID] /bin/bash
      

      Убедитесь, что кластер или компьютер, где размещен образ контейнера Jenkins, имеет общедоступный IP-адрес, Наличие общедоступного IP-адреса позволяет экземпляру Jenkins получать уведомления от GitHub.

Создание и настройка задания Jenkins

  1. Сначала необходимо создать репозиторий, который можно использовать для размещения проекта Voting на GitHub (если у вас его еще нет). До завершения работы с руководством репозиторий будет называться dev_test.

  2. Создайте элемент на панели мониторинга Jenkins по адресу http://<HOST-IP>:8080.

  3. Введите имя элемента, например MyJob. Выберите проект в свободной форме и нажмите кнопку ОК.

  4. Перейдите на страницу задания и щелкните Configure (Настройка).

    а. В разделе общих сведений установите флажок напротив проекта GitHub и укажите URL-адрес этого проекта. Это URL-адрес, где размещено приложение Service Fabric на Java, в которое необходимо интегрировать процесс непрерывной интеграции и доставки Jenkins (например, https://github.com/testaccount/dev_test).

    b. В разделе Source Code Management (Управление исходным кодом) выберите Git. Укажите URL-адрес репозитория, где размещено приложение Service Fabric на Java, в которое необходимо интегрировать процесс непрерывной интеграции и доставки Jenkins (например, https://github.com/testaccount/dev_test.git). Также здесь можно указать, какую ветвь необходимо создать (например, /master).

  5. Настройте свой Github (где размещен репозиторий), чтобы он мог обмениваться данными с Jenkins. Выполните указанные ниже действия.

    а. Перейдите на страницу репозитория GitHub. Последовательно выберите пункты Settings (Параметры)>Integrations and Services (Интеграции и службы).

    b. Выберите Add Service (Добавить службу), введите Jenkins и выберите Jenkins-Github plugin (Модуль Jenkins-Github).

    c. Введите URL-адрес webhook для Jenkins (по умолчанию это должен быть http://<PublicIPorFQDN>:8081/github-webhook/). Добавьте или обновите службу.

    d. В ваш экземпляр Jenkins будет отправлено событие проверки. Рядом с веб-перехватчиком в GitHub должен появиться зеленый флажок. Это означает, что проект создается.

    Настройка Jenkins для Service Fabric

  6. В разделе Build Triggers (Создание триггеров) выберите требуемый параметр сборки. В этом примере мы планируем инициировать создание сборки каждый раз, когда будет происходить отправка в репозиторий, поэтому выберите параметр GitHub hook trigger for GITScm polling (Обработчик триггера Github для опроса GITScm).

  7. В раскрывающемся списке Add build step (Добавить шаг сборки) раздела Build (Создание) выберите параметр Invoke Gradle Script (Вызов скрипта Gradle). В появившемся мини-приложении откройте расширенное меню и укажите путь к корневому скрипту сборки вашего приложения. Этот скрипт выбирает build.gradle по указанному пути и действует соответствующим образом.

    Действие при сборке Jenkins для Service Fabric

  8. В раскрывающемся списке Post-Build Actions (Действия после сборки) выберите Deploy Service Fabric Project (Развернуть проект Service Fabric). Здесь необходимо предоставить сведения о кластере, где будет развернуто приложение Service Fabric, скомпилированное с помощью Jenkins, Путь к сертификату ведет в расположение, в котором был подключен том (/tmp/myCerts).

    Кроме того, можно предоставить дополнительные сведения, необходимые для развертывания приложения. Ниже приведен снимок экрана с примером дополнительных сведений о приложении.

    Диалоговое окно Post-Build Actions (Действия после сборки) с дополнительными параметрами Deploy Service Fabric Project (Развернуть проект Service Fabric)

    Примечание

    Если образ контейнера Jenkins развертывается с помощью Service Fabric, можно использовать тот же кластер, на котором размещается приложение-контейнер Jenkins.

  9. Выберите команду Сохранить.

Обновление имеющегося приложения

  1. Обновите заголовок HTML в файле VotingApplication/VotingWebPkg/Code/wwwroot/index.html, использовав Service Fabric Voting Sample V2.

    <div ng-app="VotingApp" ng-controller="VotingAppController" ng-init="refresh()">
        <div class="container-fluid">
            <div class="row">
                <div class="col-xs-8 col-xs-offset-2 text-center">
                    <h2>Service Fabric Voting Sample V2</h2>
                </div>
            </div>
        </div>
    </div>
    
  2. Обновите версию ApplicationTypeVersion и ServiceManifestVersion до версии 2.0.0 в файле Voting/VotingApplication/ApplicationManifest.xml.

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <ApplicationManifest xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VotingApplicationType" ApplicationTypeVersion="2.0.0">
      <Description>Voting Application</Description>
      <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="VotingWebPkg" ServiceManifestVersion="2.0.0"/>
      </ServiceManifestImport>
      <ServiceManifestImport>
            <ServiceManifestRef ServiceManifestName="VotingDataServicePkg" ServiceManifestVersion="1.0.0"/>
        </ServiceManifestImport>
        <DefaultServices>
          <Service Name="VotingWeb">
             <StatelessService InstanceCount="1" ServiceTypeName="VotingWebType">
                <SingletonPartition/>
             </StatelessService>
          </Service>
       <Service Name="VotingDataService">
                <StatefulService MinReplicaSetSize="3" ServiceTypeName="VotingDataServiceType" TargetReplicaSetSize="3">
                    <UniformInt64Partition HighKey="9223372036854775807" LowKey="-9223372036854775808" PartitionCount="1"/>
                </StatefulService>
            </Service>
        </DefaultServices>
    </ApplicationManifest>
    
  3. Обновите поле Версия в ServiceManifest и полеВерсия в теге CodePackage в файле Voting/VotingApplication/VotingWebPkg/ServiceManifest.xml до версии 2.0.0.

    <CodePackage Name="Code" Version="2.0.0">
    <EntryPoint>
        <ExeHost>
        <Program>entryPoint.sh</Program>
        </ExeHost>
    </EntryPoint>
    </CodePackage>
    
  4. Чтобы инициализировать задание Jenkins, выполняющее обновление приложения, отправьте новые изменения в репозиторий GitHub.

  5. В Service Fabric Explorer нажмите раскрывающийся список Приложения. Чтобы увидеть состояние обновления, нажмите вкладку Upgrades in Progress (Выполняемые обновления).

    Выполняемые обновления

  6. Теперь при доступе к http://<Host-IP>:8080 приложение Voting со всеми функциями настроено и работает.

    Локальное приложение для голосования

Дальнейшие действия

В этом руководстве вы узнали, как выполнять следующие задачи:

  • Развертывание контейнера Jenkins для Service Fabric на компьютере.
  • Настройка среды Jenkins для развертывания в Service Fabric.
  • Обновление приложения.