Compartilhar via


Implantar no Serviço de Aplicativo do Azure usando o GitHub Actions

Use o GitHub Actions para automatizar seu fluxo de trabalho e implantar no Serviço de Aplicativo do Azure do GitHub.

Pré-requisitos

Configurar a implantação do GitHub Actions ao criar um aplicativo

A implantação do GitHub Actions é integrada ao processo padrão de criação de aplicativo Web. Defina a implantação contínua para 'Habilitar' na guia Implantação e configure a organização, repositório e branch de sua escolha.

Captura de tela que mostra como habilitar a implantação do GitHub Actions na guia Implantação do Serviço de Aplicativo.

Quando você habilita a implantação contínua, o processo Criar Aplicativo Web escolhe automaticamente o método de autenticação com base na seleção de autenticação básica e configura seu aplicativo e seu repositório GitHub de acordo:

Seleção básica de autenticação Método de autenticação
Desabilitar Identidade atribuída pelo usuário (OpenID Connect) (recomendado)
Habilitar Autenticação Básica

Observação

Ao criar um aplicativo, você pode receber um erro informando que sua conta do Azure não tem determinadas permissões. A sua conta pode precisar das permissões necessárias para criar e configurar a identidade atribuída pelo usuário. Para obter uma alternativa, consulte a seção a seguir.

Configurar a implantação do GitHub Actions a partir do Centro de Implantação

Para um aplicativo existente, você pode começar rapidamente com o GitHub Actions usando o Centro de Implantação no Serviço de Aplicativo. Esse método turnkey gera um arquivo de fluxo de trabalho do GitHub Actions com base na pilha de aplicativos e faz commit dele no repositório do GitHub.

Usando o Centro de Implantação, você também pode configurar facilmente a autenticação mais segura do OpenID Connect com uma identidade atribuída pelo usuário. Para obter mais informações, confira a opção de identidade atribuída pelo usuário.

Se a sua conta do Azure tiver as permissões necessárias, você poderá criar uma identidade atribuída pelo usuário. Caso contrário, você poderá selecionar uma identidade gerenciada atribuída pelo usuário existente no menu suspenso Identidade. Você pode trabalhar com o administrador do Azure para criar uma identidade gerenciada atribuída pelo usuário com a função Colaborador do Site.

Para obter mais informações, consulte Implantação contínua no Serviço de Aplicativo do Azure.

Configurar manualmente um fluxo de trabalho do GitHub Actions

Você pode implantar um fluxo de trabalho sem usar o Centro de Implantação. Execute estas três etapas:

  1. Gerar credenciais de implantação.
  2. Configure o secreto do GitHub.
  3. Adicione o arquivo de fluxo de trabalho ao repositório GitHub.

Gerar as credenciais de implantação

Recomendamos que você use o OpenID Connect para autenticar com o Serviço de Aplicativo do Azure para GitHub Actions. Esse método de autenticação usa tokens de curta duração. Configurar o OpenID Connect com o GitHub Actions é mais complexo, mas oferece segurança reforçada.

Você também pode se autenticar com uma identidade gerenciada atribuída pelo usuário, uma entidade de serviço ou um perfil de publicação.

O procedimento a seguir descreve as etapas para criar um aplicativo do Microsoft Entra, um principal do serviço e credenciais federadas usando comandos do Azure CLI. Para saber como criar um aplicativo do Microsoft Entra, um principal de serviço e credenciais federadas no portal do Azure, consulte Conectar o GitHub e o Azure.

  1. Se você não tiver um aplicativo existente, registre um novo aplicativo do Microsoft Entra e uma entidade de serviço que possa acessar os recursos. Criar um aplicativo Microsoft Entra.

    az ad app create --display-name myApp
    

    Esse comando retorna uma saída JSON com uma appId que é a sua client-id. Salve o valor para usar mais tarde como o segredo AZURE_CLIENT_ID do GitHub.

    Use o objectId valor ao criar credenciais federadas com a API do Graph e referenciá-lo como .APPLICATION-OBJECT-ID

  2. Crie uma entidade de serviço. Substitua o $appID pelo appId da saída JSON.

    Esse comando gera uma saída JSON com uma diferente objectId para usar na próxima etapa. O novo objectId é o assignee-object-id.

    Copie o appOwnerTenantId para uso posterior como um segredo do GitHub para AZURE_TENANT_ID.

    az ad sp create --id $appId
    
  3. Crie uma atribuição de função por assinatura e objeto. Por padrão, a atribuição de função é vinculada à sua assinatura padrão. Substitua $subscriptionId pela ID da assinatura, $resourceGroupName pelo nome do grupo de recursos, $webappName pelo nome do aplicativo Web e $assigneeObjectId pelo id gerado. Saiba como gerenciar as assinaturas do Azure com a CLI do Azure.

    az role assignment create --role "Website Contributor" --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
    
  4. Execute o comando a seguir para criar uma nova credencial de identidade federada para seu aplicativo Microsoft Entra.

    • Substitua APPLICATION-OBJECT-ID pelo appId que você gerou durante a criação do seu aplicativo do Active Directory.

    • Defina um valor de CREDENTIAL-NAME para referência posterior.

    • Defina o subject. O GitHub define o seu valor dependendo do fluxo de trabalho:

      • Para tarefas em seu ambiente do GitHub Actions, use: repo:< Organization/Repository >:environment:< Name >
      • Para trabalhos não vinculados a um ambiente, inclua o caminho de referência para branch/tag com base no caminho de referência usado para disparar o fluxo de trabalho: repo:< Organization/Repository >:ref:< ref path>. Por exemplo, repo:n-username/ node_express:ref:refs/heads/my-branch ou repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Para fluxos de trabalho disparados por um evento de solicitação de pull, use: 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"
        ]
    }     
    

Configurar o segredo do GitHub

Você precisa fornecer a ID do cliente, a ID do locatário e a ID da assinatura do aplicativo para a ação.Azure/login Esses valores podem ser fornecidos diretamente no fluxo de trabalho ou podem ser armazenados em segredos do GitHub e referenciados em seu fluxo de trabalho. Salvar os valores como segredos do GitHub é a opção mais segura.

  1. Abra o repositório do GitHub e vá para Configurações>Segurança>Segredos e variáveis>Ações>Novo segredo de repositório.

  2. Crie segredos para AZURE_CLIENT_ID, AZURE_TENANT_ID e AZURE_SUBSCRIPTION_ID. Use esses valores do seu aplicativo do Active Directory para seus segredos do GitHub:

    Segredo do GitHub Aplicativo do Active Directory
    AZURE_CLIENT_ID ID do aplicativo (do cliente)
    AZURE_TENANT_ID ID do diretório (locatário)
    AZURE_SUBSCRIPTION_ID ID da assinatura
  3. Selecione Adicionar segredo para salvar cada segredo.

Adicionar o arquivo de fluxo de trabalho ao repositório GitHub

Um arquivo YAML (.yml) no caminho /.github/workflows/ em seu repositório do GitHub define um fluxo de trabalho. Essa definição contém as várias etapas e os parâmetros que compõem o fluxo de trabalho.

No mínimo, o arquivo de fluxo de trabalho tem as seguintes etapas distintas:

  1. Autentique com o Serviço de Aplicativo usando o segredo do GitHub que você criou.
  2. Criar o aplicativo Web.
  3. Implantar o aplicativo Web.

Para implantar seu código em um aplicativo do Serviço de Aplicativo, use a ação azure/webapps-deploy@v3 . A ação exige o nome do aplicativo Web em app-name e, dependendo da pilha de linguagem, o caminho de um *.zip, *.war, *.jar ou uma pasta para implantação em package. Para obter uma lista completa de possíveis entradas para a ação azure/webapps-deploy@v3, confira action.yml.

Os exemplos a seguir mostram a parte do fluxo de trabalho que cria o aplicativo Web, nos diferentes idiomas compatíveis.

Para implantar com o OpenID Connect usando a identidade gerenciada que você configurou, use a ação azure/login@v2 com as chaves client-id, tenant-id e subscription-id. Faça referência aos segredos do GitHub que você criou anteriormente.

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:
      # Check out the repo
      - uses: actions/checkout@main
      - uses: azure/login@v2
        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

Perguntas frequentes

Como implantar um arquivo WAR por meio do plug-in do Maven?

Se você configurou seu projeto Java Tomcat com o plug-in do Maven, também poderá implantar no Serviço de Aplicativo do Azure por meio desse plug-in. Se você usar a Ação do GitHub da CLI do Azure, ela usará as suas credenciais do Azure.

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

Para obter mais informações sobre como usar e configurar o plug-in do Maven, consulte o wiki do plug-in do Maven para o Serviço de Aplicativo do Azure.

Como implantar um arquivo WAR por meio da CLI do Azure?

Se você preferir usar a CLI do Azure para implantar no Serviço de Aplicativo, poderá usar o GitHub Action para a CLI do Azure.

- 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

Para obter mais informações sobre como usar e configurar a ação do GitHub para a CLI do Azure, consulte a ação gitHub da CLI do Azure.

Para obter mais informações sobre o az webapp deploy comando, incluindo como usá-lo e os detalhes do parâmetro, consulte az webapp deploy a documentação.

Como fazer para implantar um arquivo de inicialização?

Use o GitHub Action para a CLI do Azure. Por exemplo:

- name: Deploy startup script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path ${{ github.workspace }}/src/main/azure/createPasswordlessDataSource.sh --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --type startup --track-status false

Como fazer para implantar em um contêiner?

Com a ação de Implantação da Web do Azure , você pode automatizar seu fluxo de trabalho para implantar contêineres personalizados no Serviço de Aplicativo usando o GitHub Actions. Para obter mais informações, consulte Implantar em um contêiner.

Como faço para implantar em um slot de implantação?

É possível implantar em um slot de implantação em vez do slot de produção usando o parâmetro slot-name na ação azure/webapps-deploy@v3. Para implantar em um slot, adicione o parâmetro slot-name à etapa de implantação em seu fluxo de trabalho:

- name: Deploy to Azure Web App
  uses: azure/webapps-deploy@v3
  with:
    app-name: 'my-app-name'
    slot-name: 'staging'  # Deploy to the 'staging' slot instead of production
    package: './output'

Observação

Ao usar o OpenID Connect ou a autenticação de entidade de serviço, certifique-se que a identidade tem a função Colaborador do Site tanto no aplicativo quanto no slot de implantação. Para a autenticação de perfil de publicação, baixe o perfil de publicação para o slot específico no portal do Azure (Implantação>Slots de implantação> selecione o slot >Baixar perfil de publicação).

Como fazer para atualizar a configuração do Tomcat após a implantação?

Se você quiser atualizar qualquer uma de suas configurações de aplicativos Web após a implantação, poderá usar a ação de configurações do Serviço de Aplicativo .

    - 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

Para obter mais informações sobre como usar e configurar essa ação, consulte o repositório de configurações do Serviço de Aplicativo .

Confira as seguintes referências em ações e fluxos de trabalho do GitHub do Azure: