Udostępnij za pośrednictwem


Wdrażanie w usłudze Azure App Service przy użyciu funkcji GitHub Actions

Użyj funkcji GitHub Actions , aby zautomatyzować przepływ pracy i wdrożyć go w usłudze Azure App Service z usługi GitHub.

Wymagania wstępne

Konfigurowanie wdrożenia funkcji GitHub Actions podczas tworzenia aplikacji

Wdrożenie funkcji GitHub Actions jest zintegrowane z domyślnym procesem Tworzenie aplikacji internetowej. Ustaw pozycję Ciągłe wdrażanie na wartość Włącz na karcie Wdrażanie i skonfiguruj wybraną organizację, repozytorium i gałąź.

Zrzut ekranu przedstawiający sposób włączania wdrożenia funkcji GitHub Actions na karcie Wdrażanie usługi App Service.

Po włączeniu ciągłego wdrażania proces Tworzenia aplikacji internetowej automatycznie wybiera metodę uwierzytelniania na podstawie wyboru podstawowego uwierzytelniania i odpowiednio konfiguruje aplikację i repozytorium GitHub:

Wybór uwierzytelniania podstawowego Metoda uwierzytelniania
Wyłącz Tożsamość przypisana przez użytkownika (OpenID Connect) (zalecane)
Włącz Uwierzytelnianie podstawowe

Uwaga

Podczas tworzenia aplikacji może zostać wyświetlony błąd z informacją, że twoje konto platformy Azure nie ma pewnych uprawnień. Twoje konto może wymagać wymaganych uprawnień do utworzenia i skonfigurowania tożsamości przypisanej przez użytkownika. Aby uzyskać alternatywę, zobacz następującą sekcję.

Skonfiguruj wdrożenie GitHub Actions w Centrum wdrażania

W przypadku istniejącej aplikacji możesz szybko rozpocząć pracę z funkcją GitHub Actions przy użyciu Centrum wdrażania w usłudze App Service. Ta gotowa do użycia metoda generuje plik przepływu pracy funkcji GitHub Actions na podstawie stosu aplikacji i zatwierdza go w repozytorium GitHub.

Za pomocą Centrum wdrażania można również łatwo skonfigurować bezpieczniejsze uwierzytelnianie OpenID Connect przy użyciu tożsamości przypisanej przez użytkownika. Aby uzyskać więcej informacji, zobacz opcję tożsamości przypisanej przez użytkownika.

Jeśli twoje konto platformy Azure ma wymagane uprawnienia, możesz utworzyć tożsamość przypisaną przez użytkownika. W przeciwnym razie możesz wybrać istniejącą przypisaną przez użytkownika tożsamość zarządzaną w menu rozwijanym Tożsamość. Możesz współpracować z administratorem platformy Azure, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika z rolą Twórca witryny.

Aby uzyskać więcej informacji, zobacz Ciągłe wdrażanie do usługi Azure App Service.

Ręczne konfigurowanie przepływu pracy funkcji GitHub Actions

Przepływ pracy można wdrożyć bez korzystania z Centrum wdrażania. Wykonaj następujące trzy kroki:

  1. Generowanie poświadczeń wdrożenia.
  2. Skonfiguruj tajny wpis GitHub.
  3. Dodaj plik przepływu pracy do repozytorium GitHub.

Generowanie poświadczeń wdrożenia

Zalecamy użycie narzędzia OpenID Connect do uwierzytelniania za pomocą usługi Azure App Service for GitHub Actions. Ta metoda uwierzytelniania używa tokenów krótkotrwałych. Konfigurowanie narzędzi OpenID Connect za pomocą GitHub Actions jest bardziej złożone, ale oferuje wzmocnione zabezpieczenia.

Można również uwierzytelnić się przy użyciu tożsamości zarządzanej przypisanej przez użytkownika, jednostki usługi lub profilu publikowania.

Poniższa procedura zawiera opis kroków tworzenia aplikacji Microsoft Entra, jednostki usługi i poświadczeń federacyjnych za pomocą poleceń Azure CLI. Aby dowiedzieć się, jak utworzyć aplikację Microsoft Entra, jednostkę usługi i poświadczenia federacyjne w portalu Azure, zobacz Łączenie GitHub i Azure.

  1. Jeśli nie masz istniejącej aplikacji, zarejestruj nową aplikację Microsoft Entra oraz usługę główną, która może uzyskiwać dostęp do zasobów. Utwórz aplikację Microsoft Entra.

    az ad app create --display-name myApp
    

    To polecenie zwraca dane wyjściowe JSON z appId, które jest twoim client-id. Zapisz wartość do późniejszego użycia jako tajny klucz GitHub AZURE_CLIENT_ID.

    Użyj wartości objectId podczas tworzenia poświadczeń federacyjnych za pomocą interfejsu API Graph i odwołuj się do niej jako APPLICATION-OBJECT-ID.

  2. Utwórz jednostkę usługi. Zastąp $appID elementem appId z danych wyjściowych JSON.

    To polecenie generuje dane wyjściowe JSON z różnym objectId, które należy użyć w następnym kroku. Nowy objectId to assignee-object-id.

    Skopiuj appOwnerTenantId do późniejszego użycia jako tajny klucz GitHub dla AZURE_TENANT_ID.

    az ad sp create --id $appId
    
  3. Utwórz nowe przypisanie roli według subskrypcji i obiektu. Domyślnie przypisanie roli jest powiązane z domyślną subskrypcją. Zastąp $subscriptionId swoim identyfikatorem subskrypcji, $resourceGroupName nazwą swojej grupy zasobów, $webappName nazwą swojej aplikacji internetowej, a $assigneeObjectId wygenerowaną wartością id. Dowiedz się , jak zarządzać subskrypcjami platformy Azure przy użyciu interfejsu wiersza polecenia (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. Uruchom następujące polecenie, aby utworzyć nowe poświadczenia tożsamości federacyjnej dla aplikacji Microsoft Entra.

    • Zastąp APPLICATION-OBJECT-ID wartością appId wygenerowaną podczas tworzenia swojej aplikacji Active Directory.

    • Ustaw wartość dla elementu CREDENTIAL-NAME, aby odwoływać się do niej później.

    • Ustaw wartość subject. Usługa GitHub definiuje jego wartość w zależności od przepływu pracy:

      • W przypadku zadań w środowisku funkcji GitHub Actions użyj: repo:< Organization/Repository >:environment:< Name >
      • W przypadku zadań, które nie są powiązane ze środowiskiem, dołącz ścieżkę ref dla gałęzi/tagu na podstawie ścieżki ref używanej do wyzwalania przepływu pracy: repo:< Organization/Repository >:ref:< ref path>. Na przykład: repo:n-username/ node_express:ref:refs/heads/my-branch lub repo:n-username/ node_express:ref:refs/tags/my-tag.
      • W przypadku przepływów pracy wyzwalanych przez zdarzenie pull request, użyj: 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"
        ]
    }     
    

Konfiguruj tajne dane GitHub

Musisz podać identyfikator klienta aplikacji, identyfikator dzierżawy i identyfikator subskrypcji do Azure/login akcji. Te wartości można podać bezpośrednio w przepływie pracy lub przechowywać w wpisach tajnych usługi GitHub i odwoływać się do nich w przepływie pracy. Zapisanie wartości jako sekretów GitHub jest bezpieczniejszą opcją.

  1. Otwórz repozytorium GitHub i przejdź do Ustawienia>Zabezpieczenia>Tajne i zmienne>Akcje>Nowy tajny element repozytorium.

  2. Utwórz wpisy tajne dla AZURE_CLIENT_ID, AZURE_TENANT_ID i AZURE_SUBSCRIPTION_ID. Użyj tych wartości z aplikacji Active Directory dla sekretów GitHub.

    Sekret GitHub Aplikacja usługi Active Directory
    AZURE_CLIENT_ID Identyfikator aplikacji (klient)
    AZURE_TENANT_ID Identyfikator katalogu (najemcy)
    AZURE_SUBSCRIPTION_ID Identyfikator subskrypcji
  3. Wybierz pozycję Dodaj wpis tajny , aby zapisać każdy wpis tajny.

Dodawanie pliku przepływu pracy do repozytorium GitHub

Plik YAML (.yml) w /.github/workflows/ ścieżce w repozytorium GitHub definiuje przepływ pracy. Ta definicja zawiera różne kroki i parametry tworzące przepływ pracy.

Plik przepływu pracy ma co najmniej następujące odrębne kroki:

  1. Uwierzytelnij się w usłudze App Service przy użyciu utworzonego sekretu GitHub.
  2. Skompiluj aplikację internetową.
  3. Wdróż aplikację internetową.

Aby wdróż kod w aplikacji App Service, użyj akcji azure/webapps-deploy@v3. Akcja wymaga nazwy aplikacji internetowej w app-name, a w zależności od stosu języka, ścieżkę *.zip, *.war, *.jar lub folderu do wdrożenia w package. Aby uzyskać pełną listę możliwych danych wejściowych dla azure/webapps-deploy@v3 akcji, zobacz action.yml.

W poniższych przykładach przedstawiono część przepływu pracy, który kompiluje aplikację internetową w różnych obsługiwanych językach.

Aby wdrożyć OpenID Connect, używając skonfigurowanej tożsamości zarządzanej, użyj akcji azure/login@v2 wraz z kluczami client-id, tenant-id i subscription-id. Użyj tajemnic GitHub, które utworzyłeś wcześniej.

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

Najczęściej zadawane pytania

Jak wdrożyć plik WAR za pośrednictwem wtyczki Maven?

Jeśli skonfigurowano projekt Java Tomcat za pomocą wtyczki Maven, możesz również wdrożyć w usłudze Azure App Service za pomocą tej wtyczki. Jeśli używasz akcji GitHub dla interfejsu wiersza polecenia Azure (Azure CLI), korzysta ona z Twoich poświadczeń platformy Azure.

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

Aby uzyskać więcej informacji na temat używania i konfigurowania wtyczki Maven, zobacz witrynę typu wiki wtyczki Maven dla usługi Azure App Service.

Jak wdrożyć plik WAR za pomocą interfejsu wiersza polecenia platformy Azure?

Jeśli wolisz użyć Azure CLI do wdrożenia w usłudze App Service, możesz użyć akcji GitHub dla 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

Aby uzyskać więcej informacji na temat używania i konfigurowania akcji usługi GitHub dla interfejsu wiersza polecenia platformy Azure, zobacz akcję GitHub interfejsu wiersza polecenia platformy Azure.

Aby uzyskać więcej informacji na az webapp deploy temat polecenia, w tym jak go używać oraz szczegółowe informacje o parametrach, zobacz az webapp deploy dokumentację.

Jak mogę wdrożyć plik startowy?

Użyj akcji usługi GitHub dla interfejsu wiersza polecenia platformy Azure. Na przykład:

- 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 wdrożyć w kontenerze?

Za pomocą akcji Azure Web Deploy możesz zautomatyzować przepływ pracy, aby wdrożyć niestandardowe kontenery w usłudze App Service przy użyciu funkcji GitHub Actions. Aby uzyskać więcej informacji, zobacz Wdrażanie w kontenerze.

Jak mogę zaktualizować konfigurację serwera Tomcat po wdrożeniu?

Jeśli chcesz zaktualizować dowolne ustawienia aplikacji internetowych po wdrożeniu, możesz użyć akcji Ustawienia usługi 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

Aby uzyskać więcej informacji na temat używania i konfigurowania tej akcji, zobacz repozytorium ustawień usługi App Service .

Zapoznaj się z następującymi materiałami dotyczącymi GitHub Actions i przepływów pracy w Azure: