Sdílet prostřednictvím


Nasazení do služby Azure App Service pomocí GitHub Actions

Pomocí GitHub Actions můžete automatizovat pracovní postup a nasadit ho do služby Azure App Service z GitHubu.

Požadavky

Nastavení nasazení GitHub Actions při vytváření aplikace

Nasazení GitHub Actions je integrované do výchozího procesu vytvoření webové aplikace. Nastavte průběžné nasazování na Povolit na kartě Nasazení a nakonfigurujte vybranou organizaci, úložiště a větev.

Snímek obrazovky, který ukazuje, jak povolit nasazení GitHub Actions na kartě Nasazení služby App Service

Když povolíte průběžné nasazování, proces Vytvoření webové aplikace automaticky vybere metodu ověřování na základě základního výběru ověřování a odpovídajícím způsobem nakonfiguruje vaši aplikaci a úložiště GitHub:

Výběr základní metody ověřování Metoda ověřování
Zakázat Identita přiřazená uživatelem (OpenID Connect) (doporučeno)
Povolit Základní ověřování

Poznámka:

Při vytváření aplikace se může zobrazit chyba s informacemi o tom, že váš účet Azure nemá určitá oprávnění. Váš účet může potřebovat požadovaná oprávnění k vytvoření a konfiguraci identity přiřazené uživatelem. Alternativu najdete v následující části.

Nastavení nasazení GitHub Actions z Centra nasazení

U existující aplikace můžete rychle začít s GitHub Actions pomocí Centra nasazení ve službě App Service. Tato metoda na klíč vygeneruje soubor pracovního postupu GitHub Actions na základě technologického zásobníku vaší aplikace a uloží ho do úložiště GitHub.

Pomocí služby Deployment Center můžete také snadno nakonfigurovat bezpečnější ověřování OpenID Connect pomocí identity přiřazené uživatelem. Další informace najdete v možnosti identity přiřazené uživatelem.

Pokud má váš účet Azure potřebná oprávnění, můžete vytvořit identitu přiřazenou uživatelem. V opačném případě můžete v rozevírací nabídce Identita vybrat existující spravovanou identitu přiřazenou uživatelem. Můžete spolu se správcem Azure vytvořit uživatelsky přiřazenou spravovanou identitu s rolí Přispěvatel webu.

Další informace najdete v tématu Průběžné nasazování do služby Aplikace Azure Service.

Ruční nastavení pracovního postupu GitHub Actions

Pracovní postup můžete nasadit bez použití Centra nasazení. Proveďte tyto tři kroky:

  1. Vygenerujte přihlašovací údaje pro nasazení.
  2. Nakonfigurujte tajný kód GitHubu.
  3. Přidejte soubor pracovního postupu do úložiště GitHub.

Generování přihlašovacích údajů pro nasazení

K ověřování pomocí Azure App Service pro GitHub Actions doporučujeme použít OpenID Connect. Tato metoda ověřování používá krátkodobé tokeny. Nastavení OpenID Connect pomocí GitHub Actions je složitější, ale nabízí posílené zabezpečení.

Můžete se také ověřit pomocí uživatelsky přiřazené spravované identity, služebního principálu nebo profilu publikování.

Následující postup popisuje postup vytvoření aplikace Microsoft Entra, instančního objektu a federovaných přihlašovacích údajů pomocí příkazů Azure CLI. Informace o vytvoření aplikace Microsoft Entra, instančního objektu a federovaných přihlašovacích údajů na webu Azure Portal najdete v tématu Připojení GitHubu a Azure.

  1. Pokud nemáte existující aplikaci, zaregistrujte novou aplikaci Microsoft Entra a služební principál, který může přistupovat k prostředkům. Vytvořte aplikaci Microsoft Entra.

    az ad app create --display-name myApp
    

    Tento příkaz vrátí JSON výstup obsahující appId, který je vaším client-id. Uložte hodnotu, kterou chcete použít jako tajný kód GitHubu AZURE_CLIENT_ID později.

    Hodnotu objectId použijete při vytváření federovaných přihlašovacích údajů pomocí rozhraní Graph API a odkážete na ni jako na APPLICATION-OBJECT-ID.

  2. Vytvořte service principal. Nahraďte $appID pomocí appId z vašeho JSON výstupu.

    Tento příkaz vygeneruje výstup JSON s jiným objectId, který se použije v dalším kroku. Nový objectId je assignee-object-id.

    Zkopírujte appOwnerTenantId k pozdějšímu použití jako GitHub tajemství pro AZURE_TENANT_ID.

    az ad sp create --id $appId
    
  3. Vytvořte nové přiřazení role podle předplatného a objektu. Ve výchozím nastavení je přiřazení role svázané s vaším výchozím předplatným. Nahraďte $subscriptionId svým ID předplatného, $resourceGroupName názvem vaší skupiny prostředků, $webappName názvem vaší webové aplikace a $assigneeObjectId vygenerovaným id. Zjistěte , jak spravovat předplatná Azure pomocí 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. Spuštěním následujícího příkazu vytvořte pro aplikaci Microsoft Entra nové přihlašovací údaje federované identity .

    • Nahraďte APPLICATION-OBJECT-ID tím appId, které jste vygenerovali během vytváření aplikace pro váš Active Directory.

    • Nastavte hodnotu pro CREDENTIAL-NAME, kterou můžete později použít jako odkaz.

    • Nastavte subject. GitHub definuje jeho hodnotu v závislosti na vašem pracovním postupu:

      • Pro úlohy v prostředí GitHub Actions použijte: repo:< Organization/Repository >:environment:< Name >
      • Pro úlohy, které nejsou vázané na prostředí, zahrňte cestu pro ref pro větev nebo značku podle cesty ref použité pro aktivaci pracovního postupu: repo:< Organization/Repository >:ref:< ref path>. Například repo:n-username/ node_express:ref:refs/heads/my-branch nebo repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Pro pracovní postupy aktivované událostí pull requestu použijte: 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"
        ]
    }     
    

Konfigurace tajného kódu GitHubu

K akci musíte zadat ID klienta, ID tenanta a IDAzure/login předplatného vaší aplikace. Tyto hodnoty je možné zadat buď přímo v pracovním postupu, nebo je můžete uložit v tajných kódech GitHubu a odkazovat na je ve vašem pracovním postupu. Uložením hodnot jako tajných kódů GitHubu je bezpečnější možnost.

  1. Otevřete úložiště GitHub a přejděte do Nastavení>Zabezpečení>Tajnosti a proměnné>Akce>Nový tajný kód úložiště.

  2. Vytváření tajných kódů pro AZURE_CLIENT_ID, AZURE_TENANT_IDa AZURE_SUBSCRIPTION_ID. Pro tajné kódy GitHubu použijte tyto hodnoty z aplikace Active Directory:

    Tajný kód GitHubu Aplikace Active Directory
    AZURE_CLIENT_ID ID aplikace (klienta)
    AZURE_TENANT_ID ID adresáře (klienta)
    AZURE_SUBSCRIPTION_ID Identifikátor předplatného
  3. Vyberte Přidat tajný kód a uložte každý tajný kód.

Přidání souboru pracovního postupu do úložiště GitHub

Soubor YAML (.yml) v /.github/workflows/ cestě v úložišti GitHub definuje pracovní postup. Tato definice obsahuje různé kroky a parametry, které tvoří pracovní postup.

Soubor pracovního postupu má minimálně následující různé kroky:

  1. Ověřte se pomocí služby App Service pomocí tajného kódu GitHubu, který jste vytvořili.
  2. Sestavte webovou aplikaci.
  3. Nasaďte webovou aplikaci.

Pokud chcete nasadit kód do aplikace App Service, použijte akci azure/webapps-deploy@v3. Akce vyžaduje název vaší webové aplikace v app-name a, v závislosti na vašem zásobníku jazyků, cestu k *.zip, *.war, *.jar nebo složce, kam se má nasadit, do package. Úplný seznam možných vstupů pro azure/webapps-deploy@v3 akci najdete v tématu action.yml.

Následující příklady ukazují část pracovního postupu, která vytváří webovou aplikaci v různých podporovaných jazycích.

Pokud chcete nasadit pomocí OpenID Connect a spravované identity, kterou jste nakonfigurovali, použijte akci azure/login@v2 s klíči client-id, tenant-id a subscription-id. Odkazujte na tajné kódy GitHubu, které jste vytvořili dříve.

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

Nejčastější dotazy

Jak můžu nasadit soubor WAR prostřednictvím modulu plug-in Maven?

Pokud jste nakonfigurovali projekt Java Tomcat s modulem plug-in Maven, můžete prostřednictvím tohoto modulu plug-in nasadit také službu Azure App Service. Pokud použijete akci GitHubu v Azure CLI, použije se vaše přihlašovací údaje Azure.

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

Další informace o tom, jak používat a konfigurovat modul plug-in Maven, najdete na wikiwebu modulu plug-in Maven pro Azure App Service.

Jak můžu nasadit soubor WAR prostřednictvím Azure CLI?

Pokud dáváte přednost nasazení do služby App Service pomocí Azure CLI, můžete použít akci GitHubu pro Azure 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

Další informace o použití a konfiguraci akce GitHubu pro Azure CLI najdete v akci GitHubu v Azure CLI.

Další informace o az webapp deploy příkazu, včetně způsobu jeho použití a podrobností o parametrech, najdete az webapp deploy v dokumentaci.

Jak nasadím spouštěcí soubor?

Použijte akci GitHubu pro Azure CLI. Příklad:

- 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

Jak se nasadím do kontejneru?

Pomocí akce Nasazení webu Azure můžete pracovní postup automatizovat a nasadit vlastní kontejnery do služby App Service pomocí GitHub Actions. Další informace najdete v tématu Nasazení do kontejneru.

Jak aktualizovat konfiguraci Tomcat po nasazení?

Pokud chcete po nasazení aktualizovat některá nastavení webových aplikací, můžete použít akci nastavení služby App Service .

    - 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

Další informace o použití a konfiguraci této akce najdete v úložišti nastavení služby App Service .

Projděte si následující odkazy na Azure GitHub Actions a pracovní postupy: