Развертывание в Службе приложений с помощью GitHub Actions

Начните работу с функцией GitHub Actions, которая позволит автоматизировать рабочий процесс и развертывать приложения в Службе приложений Azure из GitHub.

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

Настройка развертывания GitHub Actions при создании приложения

Развертывание GitHub Actions интегрировано в мастер создания приложений по умолчанию. Вам просто нужно настроить непрерывное развертывание, чтобы включить на вкладке "Развертывание" и настроить нужную организацию, репозиторий и ветвь.

Снимок экрана: включение развертывания GitHub Actions в мастере создания Служба приложений.

При включении непрерывного развертывания мастер создания приложения автоматически выбирает метод проверки подлинности на основе базового выбора проверки подлинности и настраивает приложение и репозиторий GitHub соответствующим образом:

Выбор базовой проверки подлинности Authentication method
Отключить Назначаемое пользователем удостоверение (OpenID Подключение) (рекомендуется)
Включить Обычная проверка подлинности

Примечание.

Если при создании приложения возникает ошибка, указывающая, что у вашей учетной записи Azure нет определенных разрешений, у нее могут быть не необходимые разрешения для создания и настройки удостоверения, назначаемого пользователем. Дополнительные сведения см. в статье "Настройка развертывания GitHub Actions" из Центра развертывания.

Настройка развертывания GitHub Actions из Центра развертывания

Для существующего приложения вы можете быстро приступить к работе с GitHub Actions с помощью центра развертывания Служба приложений. Этот метод поворачивающего ключа автоматически создает файл рабочего процесса GitHub Actions на основе стека приложения и фиксирует его в репозитории GitHub.

Центр развертывания также позволяет легко настроить более безопасную проверку подлинности OpenID Подключение с помощью параметра удостоверения, назначаемого пользователем.

Если у вашей учетной записи Azure есть необходимые разрешения, можно выбрать для создания удостоверения, назначаемого пользователем. В противном случае можно выбрать существующее управляемое удостоверение, назначаемое пользователем, в раскрывающемся списке "Удостоверение ". Вы можете работать с администратором Azure, чтобы создать управляемое удостоверение, назначаемое пользователем, с ролью участника веб-сайта.

Дополнительные сведения см. в статье "Непрерывное развертывание в службе приложение Azure".

Настройка рабочего процесса GitHub Actions вручную

Вы также можете развернуть рабочий процесс без использования центра развертывания. В этом случае необходимо выполнить 3 действия.

  1. Создание учетных данных развертывания
  2. Настройка секрета GitHub
  3. Добавление файла рабочего процесса в репозиторий GitHub

1. Создание учетных данных развертывания

Рекомендуемый способ проверки подлинности с помощью служб приложение Azure для GitHub Actions — с помощью openID Подключение. Это метод проверки подлинности, использующий кратковременные маркеры. Настройка OpenID Подключение с помощью GitHub Actions является более сложной, но обеспечивает защищенное обеспечение безопасности.

Кроме того, вы можете пройти проверку подлинности с помощью управляемого удостоверения, назначаемого пользователем, субъекта-службы или профиля публикации.

Ниже описаны действия по созданию приложения Active Directory, субъекта-службы и федеративных учетных данных с помощью инструкций Azure CLI. Сведения о создании приложения Active Directory, субъекта-службы и федеративных учетных данных в портал Azure см. в статье Подключение GitHub и Azure.

  1. Если у вас нет существующего приложения, зарегистрируйте новое приложение Active Directory и субъект-службу, который может обращаться к ресурсам. Создайте приложение Azure Active Directory.

    az ad app create --display-name myApp
    

    Эта команда выводит JSON с вашим идентификатором appIdclient-id. Сохраните это значение, чтобы позднее применить в качестве секрета GitHub AZURE_CLIENT_ID.

    Значение objectId вы примените при создании федеративных учетных данных с помощью API Graph, создав для них ссылку APPLICATION-OBJECT-ID.

  2. Создание субъекта-службы. Замените $appID значением appId из выходных данных в формате JSON.

    Эта команда создает выходные данные в формате JSON с другим значением objectId, которое вы примените на следующем шаге. Новое значение objectId представляет assignee-object-id.

    Скопируйте appOwnerTenantId, чтобы позднее применить в качестве секрета GitHub AZURE_TENANT_ID.

     az ad sp create --id $appId
    
  3. Создайте назначение ролей для подписки и объекта. По умолчанию назначение роли привязано к вашей подписке по умолчанию. Замените $subscriptionId идентификатором подписки, $resourceGroupName именем группы ресурсов, $webappName именем веб-приложения и $assigneeObjectId созданным id. Узнайте, как управлять подписками Azure с помощью Azure CLI.

    az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
    
  4. Выполните следующую команду, чтобы создать федеративные учетные данные удостоверения для своего приложения Active Directory.

    • Замените APPLICATION-OBJECT-ID идентификатор appId (созданный при создании приложения) для приложения Active Directory.
    • Задайте значение для CREDENTIAL-NAME, оно понадобится позже.
    • Задайте subject. Его значение определяется GitHub в зависимости от рабочего процесса:
      • Задания в среде GitHub Actions: repo:< Organization/Repository >:environment:< Name >.
      • Если задания не привязаны к среде, включите путь ссылки для ветви или тега с учетом пути, используемого для запуска рабочего процесса: repo:< Organization/Repository >:ref:< ref path>. Например, repo:n-username/ node_express:ref:refs/heads/my-branch или repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Для рабочих процессов, запускаемых событием запроса на вытягивание: repo:< Organization/Repository >:pull_request.
    az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
    ("credential.json" contains the following content)
    {
        "name": "<CREDENTIAL-NAME>",
        "issuer": "https://token.actions.githubusercontent.com",
        "subject": "repo:organization/repository:ref:refs/heads/main",
        "description": "Testing",
        "audiences": [
            "api://AzureADTokenExchange"
        ]
    }     
    

2. Настройка секрета GitHub

Необходимо указать идентификатор клиента приложения, идентификатор клиента и идентификатор подписки для действия Azure/login. Эти значения могут быть указаны непосредственно в рабочем процессе или храниться в секретах GitHub с указанием ссылок на них в рабочем процессе. Сохранение значений в виде секретов GitHub является более безопасным вариантом.

  1. Откройте репозиторий GitHub и перейдите к разделу Параметры Секреты безопасности > и переменные > Actions > New репозиторий. >

  2. Создайте секреты для AZURE_CLIENT_ID, AZURE_TENANT_ID и AZURE_SUBSCRIPTION_ID. Используйте эти значения из приложения Active Directory для секретов GitHub:

    Секрет Github Приложение Active Directory
    AZURE_CLIENT_ID Идентификатор приложения (клиент)
    AZURE_TENANT_ID Идентификатор каталога (клиента)
    AZURE_SUBSCRIPTION_ID ИД подписки
  3. Сохраните каждый секрет, выбрав Добавить секрет.

3. Добавьте файл рабочего процесса в репозиторий GitHub

Рабочий процесс определяется файлом YAML (.yml) в /.github/workflows/ пути в репозитории GitHub. Это определение содержит разные шаги и параметры рабочего процесса.

Как минимум, файл рабочего процесса будет иметь следующие различные шаги:

  1. Проверка подлинности с помощью Служба приложений с помощью созданного секрета GitHub.
  2. Создайте веб-приложение.
  3. Разверните веб-приложение.

Чтобы развернуть код в приложении Служба приложений, используйте действие azure/webapps-deploy@v3. Для действия требуется имя веб-приложения и app-name в зависимости от стека языка путь *.zip, *.war, *.jar или папки для развертывания.package Полный список возможных входных данных для azure/webapps-deploy@v3 действия см . в определении action.yml .

В следующих примерах показана часть рабочего процесса, которая создает веб-приложение на разных поддерживаемых языках.

Чтобы развернуть с помощью OpenID Подключение с помощью настроенного управляемого удостоверения, используйте azure/login@v1 действие с client-idtenant-idключами и ключами и subscription-id ссылайтесь на созданные ранее секреты GitHub.

name: .NET Core

on: [push]

permissions:
      id-token: write
      contents: read

env:
  AZURE_WEBAPP_NAME: my-app    # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repo
      - uses: actions/checkout@main
      - uses: azure/login@v1
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v3
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
      
      - name: logout
        run: |
          az logout

Вопросы и ответы

Разделы справки развернуть WAR-файл с помощью подключаемого модуля Maven и OpenID Подключение

Если вы настроили проект Java Tomcat с подключаемым модулем Maven, можно также развернуть в приложение Azure service с помощью этого подключаемого модуля. Если вы используете действие Azure CLI GitHub, оно будет использовать учетные данные для входа Azure.

    - name: Azure CLI script file
      uses: azure/cli@v2
      with:
        inlineScript: |
          mvn package azure-webapp:deploy

Дополнительные сведения о подключаемом модуле Maven и его настройке можно найти в вики-сайте подключаемого модуля Maven для службы приложение Azure.

Разделы справки развернуть WAR-файл с помощью Az CLI и OpenID Подключение

Если вы предпочитаете использовать Azure CLI для развертывания в Служба приложений, можно использовать действие GitHub для CLI.

    - name: Azure CLI script
      uses: azure/cli@v2
      with:
        inlineScript: |
          az webapp deploy --src-path '${{ github.workspace }}/target/yourpackage.war' --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }}  --async true --type war

Дополнительные сведения о действии GitHub для ИНТЕРФЕЙСА командной строки и его настройке можно найти в действии GitHub Azure CLI. Дополнительные сведения о команде az webapp deploy, о том, как использовать и сведения о параметрах, см. в документации по развертыванию az webapp.

Разделы справки развертывание в контейнере

Действие веб-развертывания Azure позволяет автоматизировать рабочий процесс, чтобы развернуть настраиваемые контейнеры в Службе приложений с помощью GitHub Actions. Подробные сведения о действиях по развертыванию с помощью GitHub Actions см. в разделе "Развертывание в контейнере".

Разделы справки обновить конфигурацию Tomcat после развертывания

Если вы хотите обновить любой из параметров веб-приложений после развертывания, можно использовать действие Служба приложений Параметры.

    - uses: azure/appservice-settings@v1
      with:
        app-name: 'my-app'
        slot-name: 'staging'  # Optional and needed only if the settings have to be configured on the specific deployment slot
        app-settings-json: '[{ "name": "CATALINA_OPTS", "value": "-Dfoo=bar" }]' 
        connection-strings-json: '${{ secrets.CONNECTION_STRINGS }}'
        general-settings-json: '{"alwaysOn": "false", "webSocketsEnabled": "true"}' #'General configuration settings as Key Value pairs'
      id: settings

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

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

Ознакомьтесь со ссылками на действия и рабочие процессы Azure GitHub: