Nasazení do App Service funkcí GitHub Actions

Začněte používat GitHub Actions k automatizaci pracovního postupu a nasazení do služby Aplikace Azure Service z GitHubu.

Požadavky

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

Nasazení GitHub Actions je integrované do výchozího průvodce vytvořením aplikace. Stačí nastavit průběžné nasazování na kartě Nasazení a nakonfigurovat požadovanou organizaci, úložiště a větev.

Snímek obrazovky znázorňující povolení nasazení GitHub Actions v průvodci vytvořením služby App Service

Když povolíte průběžné nasazování, průvodce vytvořením 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ího 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:

Pokud při vytváření aplikace dojde k chybě s informací, že váš účet Azure nemá určitá oprávnění, nemusí mít požadovaná oprávnění k vytvoření a konfiguraci identity přiřazené uživatelem. Alternativu najdete v tématu Nastavení nasazení GitHub Actions z Centra nasazení.

Nastavení nasazení GitHub Actions z Centra nasazení

Pro existující aplikaci můžete rychle začít s GitHub Actions pomocí Centra nasazení služby App Service. Tato metoda turn-key automaticky vygeneruje soubor pracovního postupu GitHub Actions na základě zásobníku vaší aplikace a potvrdí ho do úložiště GitHub.

Centrum nasazení také umožňuje snadno nakonfigurovat bezpečnější ověřování OpenID Connect pomocí možnosti identity přiřazené uživatelem.

Pokud má váš účet Azure potřebná oprávnění, můžete vybrat vytvoření identity přiřazené uživatelem. V opačném případě můžete v rozevíracím seznamu Identita vybrat existující spravovanou identitu přiřazenou uživatelem. Se správcem Azure můžete vytvořit spravovanou identitu přiřazenou uživatelem 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 i bez použití Centra nasazení. V takovém případě potřebujete provést 3 kroky:

  1. Generování přihlašovacích údajů pro nasazení
  2. Konfigurace tajného kódu GitHubu
  3. Přidání souboru pracovního postupu do úložiště GitHub

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

Doporučený způsob ověřování pomocí Aplikace Azure Services pro GitHub Actions je OpenID Connect. Jedná se o metodu ověřování, která používá krátkodobé tokeny. Nastavení OpenID Connect pomocí GitHub Actions je složitější, ale nabízí posílené zabezpečení.

Případně se můžete ověřit pomocí spravované identity přiřazené uživatelem, instančního objektu nebo profilu publikování.

Následující kroky vás provedou postupem vytvoření aplikace active directory, instančního objektu a federovaných přihlašovacích údajů pomocí příkazů Azure CLI. Informace o vytvoření aplikace active directory, 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 Active Directory a instanční objekt, který má přístup k prostředkům. Vytvořte aplikaci Active Directory.

    az ad app create --display-name myApp
    

    Tento příkaz vypíše JSON s vaším kódem appId client-id. Uložte hodnotu, kterou chcete použít jako tajný kód GitHubu AZURE_CLIENT_ID později.

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

  2. Vytvořte instanční objekt. $appID Nahraďte id aplikace z výstupu JSON.

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

    Zkopírujte soubor, který appOwnerTenantId chcete použít jako tajný kód GitHubu pro AZURE_TENANT_ID pozdější použití.

     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 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 služby Active Directory nové přihlašovací údaje federované identity.

    • Nahraďte APPLICATION-OBJECT-ID id aplikace (vygenerované při vytváření aplikace) pro vaši aplikaci Active Directory.
    • Nastavte hodnotu pro CREDENTIAL-NAME pozdější odkaz.
    • Nastavte .subject Jeho hodnota je definována GitHubem v závislosti na vašem pracovním postupu:
      • Úlohy v prostředí GitHub Actions: repo:< Organization/Repository >:environment:< Name >
      • Pro úlohy, které nejsou svázané s prostředím, zahrňte cestu odkaz pro větev nebo značku na základě cesty odkazu použité k 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í žádosti o přijetí změn: 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. Konfigurace tajného kódu GitHubu

Musíte zadat ID klienta, ID tenanta a ID předplatného vaší aplikace pro akci Azure/přihlášení. 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 části Nastavení > tajných kódů zabezpečení > a proměnných > Actions > New repository secret.

  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 služby Active Directory
    AZURE_CLIENT_ID ID aplikace (klienta)
    AZURE_TENANT_ID ID adresáře (klienta)
    AZURE_SUBSCRIPTION_ID Subscription ID
  3. Uložte každý tajný kód výběrem možnosti Přidat tajný kód.

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

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

Soubor pracovního postupu by měl 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.

K nasazení kódu do aplikace App Service použijete akci azure/webapps-deploy@v3 . Akce vyžaduje název vaší webové aplikace a app-name v závislosti na zásobníku jazyků, cestu *.zip, *.war, *.jar nebo složku, do packagekteré se má nasadit . Úplný seznam možných vstupů pro azure/webapps-deploy@v3 akci najdete v definici 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 s OpenID Connect pomocí spravované identity, kterou jste nakonfigurovali, použijte azure/login@v1 akci s tenant-idclient-idklíči a klíči 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:
      # 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

Nejčastější dotazy

Návody nasazení souboru WAR prostřednictvím modulu plug-in Maven?

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

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

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

Návody nasazení souboru WAR prostřednictvím Az CLI?

Pokud dáváte přednost azure CLI k nasazení do služby App Service, 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 akci GitHubu pro rozhraní příkazového řádku a o tom, jak ji použít a nakonfigurovat, najdete v akci Azure CLI na GitHubu. Další informace o příkazu az webapp deploy, použití a podrobnosti o parametrech najdete v dokumentaci az webapp deploy.

Návody nasadit spouštěcí soubor?

Použijte akci GitHubu pro rozhraní příkazového řádku. 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

Návody nasazení do kontejneru?

Pomocí akce Nasazení webu Azure můžete pracovní postup automatizovat a nasadit vlastní kontejnery do služby App Service pomocí GitHub Actions. Podrobné informace o krocích nasazení pomocí GitHub Actions najdete v části Nasazení do kontejneru.

Návody po nasazení aktualizovat konfiguraci Tomcat?

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 této akci a o tom, jak ji použít a nakonfigurovat, najdete v úložišti Nastavení služby App Service.

Další kroky

Projděte si reference na Azure GitHub Actions a pracovní postupy: