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

Rozpocznij pracę z funkcją GitHub Actions, aby zautomatyzować przepływ pracy i wdrożyć go w usłudze aplikacja systemu Azure 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 kreatorem tworzenia aplikacji. Wystarczy ustawić opcję Ciągłe wdrażanie na wartość Włącz na karcie Wdrażanie i skonfigurować odpowiednią organizację, repozytorium i gałąź.

Zrzut ekranu przedstawiający sposób włączania wdrożenia funkcji GitHub Actions w kreatorze tworzenia usługi App Service.

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

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

Uwaga

Jeśli podczas tworzenia aplikacji wystąpi błąd informujący, że twoje konto platformy Azure nie ma pewnych uprawnień, może nie mieć wymaganych uprawnień do tworzenia i konfigurowania tożsamości przypisanej przez użytkownika. Aby uzyskać alternatywę, zobacz Konfigurowanie wdrożenia funkcji GitHub Actions z Centrum wdrażania.

Konfigurowanie wdrożenia funkcji GitHub Actions z Centrum wdrażania

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

Centrum wdrażania umożliwia również łatwe skonfigurowanie bezpieczniejszego uwierzytelniania openID Połączenie przy użyciu opcji tożsamości przypisanej przez użytkownika.

Jeśli twoje konto platformy Azure ma wymagane uprawnienia, możesz wybrać opcję utworzenia tożsamości przypisanej przez użytkownika. W przeciwnym razie możesz wybrać istniejącą tożsamość zarządzaną przypisaną przez użytkownika na liście rozwijanej Tożsamość . Możesz pracować z administratorem platformy Azure, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika z rolą Współautor witryny internetowej.

Aby uzyskać więcej informacji, zobacz Ciągłe wdrażanie w usłudze aplikacja systemu Azure Service.

Ręczne konfigurowanie przepływu pracy funkcji GitHub Actions

Przepływ pracy można również wdrożyć bez korzystania z Centrum wdrażania. W takim przypadku należy wykonać 3 kroki:

  1. Generowanie poświadczeń wdrożenia
  2. Konfigurowanie wpisu tajnego usługi GitHub
  3. Dodawanie pliku przepływu pracy do repozytorium GitHub

1. Generowanie poświadczeń wdrożenia

Zalecanym sposobem uwierzytelniania za pomocą usług aplikacja systemu Azure Services for GitHub Actions jest użycie Połączenie OpenID. Jest to metoda uwierzytelniania, która używa tokenów krótkotrwałych. Konfigurowanie Połączenie OpenID za pomocą funkcji GitHub Actions jest bardziej złożone, ale oferuje zabezpieczenia ze wzmocnionymi zabezpieczeniami.

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

Poniżej przedstawiono procedurę tworzenia aplikacji usługi Active Directory, jednostki usługi i poświadczeń federacyjnych przy użyciu instrukcji interfejsu wiersza polecenia platformy Azure. Aby dowiedzieć się, jak utworzyć aplikację usługi Active Directory, jednostkę usługi i poświadczenia federacyjne w witrynie Azure Portal, zobacz Połączenie GitHub i Azure.

  1. Jeśli nie masz istniejącej aplikacji, zarejestruj nową aplikację usługi Active Directory i jednostkę usługi, która może uzyskiwać dostęp do zasobów. Utwórz aplikację usługi Active Directory.

    az ad app create --display-name myApp
    

    To polecenie zwraca kod JSON z identyfikatorem , który jest twoim client-idelementem appId . Zapisz wartość do użycia jako AZURE_CLIENT_ID wpis tajny usługi GitHub później.

    Użyjesz objectId wartości podczas tworzenia poświadczeń federacyjnych przy użyciu interfejsu APPLICATION-OBJECT-IDAPI programu Graph i odwołujesz się do niej jako .

  2. Tworzenie jednostki usługi. Zastąp element $appID identyfikatorem appId z danych wyjściowych JSON.

    To polecenie generuje dane wyjściowe JSON z inną objectId wartością i będzie używane w następnym kroku. objectId Nowy element to assignee-object-id.

    Skopiuj element appOwnerTenantId , aby użyć go jako wpisu tajnego usługi GitHub do AZURE_TENANT_ID późniejszego użycia.

     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 ciąg identyfikatorem subskrypcji nazwą $resourceGroupName grupy zasobów, $webappName nazwą aplikacji internetowej i $assigneeObjectId wygenerowaną idwartością . Dowiedz się , jak zarządzać subskrypcjami platformy Azure przy użyciu interfejsu wiersza polecenia platformy 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. Uruchom następujące polecenie, aby utworzyć nowe poświadczenia tożsamości federacyjnej dla aplikacji usługi Active Directory.

    • Zastąp APPLICATION-OBJECT-ID ciąg wartością appId (wygenerowaną podczas tworzenia aplikacji) dla aplikacji usługi Active Directory.
    • Ustaw wartość dla elementu , CREDENTIAL-NAME aby odwoływać się później.
    • Ustaw wartość subject. Jego wartość jest definiowana przez usługę GitHub w zależności od przepływu pracy:
      • Zadania w środowisku funkcji GitHub Actions: 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 żądania ściągnięcia: 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. Konfigurowanie wpisu tajnego usługi GitHub

Musisz podać identyfikator klienta aplikacji, identyfikator dzierżawy i identyfikator subskrypcji do akcji Azure/login. 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 wpisów tajnych usługi GitHub jest bezpieczniejszą opcją.

  1. Otwórz repozytorium GitHub i przejdź do pozycji Ustawienia > Wpisy tajne zabezpieczeń > i zmienne > Akcje > Nowy wpis tajny repozytorium.

  2. Utwórz wpisy tajne dla , AZURE_CLIENT_IDAZURE_TENANT_IDi AZURE_SUBSCRIPTION_ID. Użyj tych wartości z aplikacji usługi Active Directory dla wpisów tajnych usługi GitHub:

    Wpis tajny usługi GitHub Aplikacja usługi Active Directory
    AZURE_CLIENT_ID Identyfikator aplikacji (klient)
    AZURE_TENANT_ID Identyfikator katalogu (dzierżawcy)
    AZURE_SUBSCRIPTION_ID Identyfikator subskrypcji
  3. Zapisz każdy wpis tajny, wybierając pozycję Dodaj wpis tajny.

3. Dodawanie pliku przepływu pracy do repozytorium GitHub

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

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

  1. Uwierzytelnianie w usłudze App Service przy użyciu utworzonego wpisu tajnego usługi GitHub.
  2. Skompiluj aplikację internetową.
  3. Wdróż aplikację internetową.

Aby wdrożyć kod w aplikacji usługi App Service, użyj akcji azure/webapps-deploy@v3 . Akcja wymaga nazwy aplikacji internetowej w app-name pliku i, w zależności od stosu języka, ścieżki *.zip, *.war, *.jar lub folderu do wdrożenia w programie package. Aby uzyskać pełną listę możliwych danych wejściowych dla azure/webapps-deploy@v3 akcji, zobacz definicję 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ć przy użyciu identyfikatora OpenID Połączenie przy użyciu skonfigurowanej tożsamości zarządzanej, użyj azure/login@v1 akcji z kluczami client-id, tenant-idi subscription-id odwołaj się do utworzonych wcześniej wpisów tajnych usługi GitHub.

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

Często zadawane pytania

Jak mogę wdrożyć plik WAR za pomocą wtyczki Maven i Połączenie OpenID

Jeśli skonfigurowano projekt Java Tomcat za pomocą wtyczki Maven, możesz również wdrożyć go w usłudze aplikacja systemu Azure za pomocą tej wtyczki. Jeśli używasz akcji GitHub interfejsu wiersza polecenia platformy Azure, użyjesz poświadczeń logowania platformy Azure.

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

Więcej informacji na temat wtyczki Maven oraz sposobu jej używania i konfigurowania można znaleźć w witrynie typu wiki wtyczki Maven dla usługi aplikacja systemu Azure Service.

Jak mogę wdrożyć plik WAR za pomocą interfejsu wiersza polecenia Az i Połączenie OpenID

Jeśli wolisz wdrożyć interfejs wiersza polecenia platformy Azure w usłudze App Service, możesz użyć akcji usługi GitHub dla interfejsu wiersza polecenia.

    - 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

Więcej informacji na temat akcji usługi GitHub dla interfejsu wiersza polecenia oraz sposobu jej używania i konfigurowania można znaleźć w akcji GitHub interfejsu wiersza polecenia platformy Azure. Więcej informacji na temat polecenia az webapp deploy, how to use i szczegóły parametru można znaleźć w dokumentacji az webapp deploy.

Jak mogę wdrażanie 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. Szczegółowe informacje na temat kroków wdrażania przy użyciu funkcji GitHub Actions można znaleźć w temacie 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

Więcej informacji na temat tej akcji oraz sposobu jej używania i konfigurowania można znaleźć w repozytorium usługi App Service Ustawienia.

Następne kroki

Zapoznaj się z odwołaniami do funkcji Azure GitHub Actions i przepływów pracy: