Partilhar via


Implantar no Serviço de Aplicativo do Azure usando as Ações do GitHub

Use as Ações do GitHub para automatizar seu fluxo de trabalho e implantar no Serviço de Aplicativo do Azure a partir 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 Create Web App. Defina Implantação contínua como Habilitar na guia Implantação e configure a organização, o repositório e a ramificação escolhidos.

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

Quando você habilita a implantação contínua, o processo Criar Aplicativo Web seleciona 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 de autenticação básica Método de autenticação
Desativar Identidade atribuída pelo usuário (OpenID Connect) (recomendado)
Ativar Autenticação básica

Nota

Ao criar um aplicativo, você pode receber um erro informando que sua conta do Azure não tem determinadas permissões. 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 as Ações do GitHub usando o Centro de Implantação no Serviço de Aplicativo. Este método chave-na-mão gera um ficheiro de fluxo de trabalho do GitHub Actions com base na vossa pilha de aplicações e confirma-o no vosso repositório GitHub.

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

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

Para obter mais informações, consulte Implantação contínua no Azure App Service.

Configurar manualmente um fluxo de trabalho de Ações do GitHub

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

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

Gerar credenciais de implantação

Recomendamos que você use o OpenID Connect para autenticar com o Serviço de Aplicativo do Azure para Ações do GitHub. 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 Microsoft Entra, entidade de serviço e credenciais federadas usando instruções CLI do Azure. Para saber como criar um aplicativo, entidade de serviço e credenciais federadas do Microsoft Entra no portal do Azure, consulte Conectar o GitHub e o Azure.

  1. Caso não tenha uma aplicação existente, registe uma nova aplicação Microsoft Entra e um principal de serviço que possa aceder aos recursos. Crie o aplicativo Microsoft Entra.

    az ad app create --display-name myApp
    

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

    Você usa o valor objectId ao criar credenciais federadas com a API do Graph e faz referência a esse valor como APPLICATION-OBJECT-ID.

  2. Crie um principal de serviço. Substitua o $appID pelo appId da sua saída JSON.

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

    Copie o appOwnerTenantId para usar posteriormente como um segredo do GitHub para AZURE_TENANT_ID.

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

    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. 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 foi gerado durante a criação da aplicação para o seu aplicativo Active Directory.

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

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

      • Para tarefas no seu ambiente de Ações do GitHub, 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 utilizado para acionar 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 acionados por um evento de solicitação 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 Azure/login ação. 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 seu repositório GitHub e vá para Configurações>Segredos de segurança>Novo segredo do repositório.

  2. Crie segredos para AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_SUBSCRIPTION_ID. Use estes valores do seu aplicativo Ative Directory para seus segredos do GitHub:

    Segredo do GitHub Aplicativo Ative Directory
    AZURE_CLIENT_ID ID da aplicação (cliente)
    AZURE_TENANT_ID ID do Diretório (inquilino)
    AZURE_SUBSCRIPTION_ID ID de Subscrição
  3. Selecione Adicionar segredo para salvar cada segredo.

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

Um ficheiro YAML (.yml) no caminho do repositório de GitHub define um fluxo de trabalho. Esta definição contém as várias etapas e 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-se com o Serviço de Aplicativo usando o segredo do GitHub que você criou.
  2. Crie o aplicativo Web.
  3. Implante o aplicativo Web.

Para implantar o seu código numa aplicação do Serviço de Aplicações, use a ação azure/webapps-deploy@v3. A ação requer o nome da sua aplicação web em app-name e, dependendo da sua pilha de idiomas, o caminho de um *.zip, *.war, *.jar ou pasta para ser implantada em package. Para obter uma lista completa de possíveis entradas para a azure/webapps-deploy@v3 ação, consulte action.yml.

Os exemplos a seguir mostram a parte do fluxo de trabalho que cria o aplicativo Web, em diferentes idiomas suportados.

Para implementar com o OpenID Connect utilizando a identidade gerida que 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 faço para implantar um arquivo WAR através do plug-in Maven?

Se você configurou seu projeto Java Tomcat com o plug-in Maven, também poderá implantar no Serviço de Aplicativo do Azure por meio desse plug-in. Se você usar a ação GitHub da CLI do Azure, ela usará 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 Maven, consulte Wiki do plug-in Maven para o Serviço de Aplicativo do Azure.

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

Se preferir usar a CLI do Azure para implantar no Serviço de Aplicativo, você pode usar a Ação do GitHub 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 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 implantar um arquivo de inicialização?

Use a Ação do GitHub 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 faço para implantar em um contêiner?

Com a ação Implantação do Azure Web, pode automatizar o seu fluxo de trabalho para implantar contentores personalizados no Serviço de Aplicações utilizando as Ações do GitHub. Para obter mais informações, consulte Implantar em um contêiner.

Como atualizo a configuração do Tomcat após a implantação?

Se quiser atualizar qualquer uma das configurações de seus aplicativos Web após a implantação, você pode usar a ação 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: