Importuj pliki konfiguracji z repozytorium w serwisie GitHub do magazynu App Configuration

Jeśli konfiguracja została przyjęta jako kod i zarządzasz konfiguracjami w usłudze GitHub, możesz użyć funkcji GitHub Actions, aby automatycznie zaimportować pliki konfiguracji z repozytorium GitHub do magazynu usługi App Configuration. Dzięki temu można wprowadzać zmiany w plikach konfiguracji w zwykły sposób, jednocześnie uzyskując korzyści ze sklepu App Configuration, takie jak:

  • Scentralizowana konfiguracja poza Twoim kodem.
  • Aktualizowanie konfiguracji bez ponownego wdrażania całej aplikacji.
  • Integracja z usługami, takimi jak Azure App Service i Azure Functions.

Przepływ pracy GitHub Actions definiuje zautomatyzowany proces w repozytorium GitHub. Aby zaimportować plik konfiguracji z repozytorium GitHub do magazynu usługi Azure App Configuration, użyj akcji GitHub Azure CLI, która zapewnia pełną funkcjonalność importowania plików do magazynu usługi App Configuration.

Uwierzytelnianie

Aby zaimportować konfiguracje do magazynu usługi Azure App Configuration, możesz uwierzytelnić się za pomocą jednej z następujących metod:

Korzystanie z identyfikatora Entra firmy Microsoft

Zalecanym sposobem uwierzytelniania jest użycie identyfikatora Entra firmy Microsoft, który umożliwia bezpieczne łączenie się z zasobami platformy Azure. Proces uwierzytelniania można zautomatyzować przy użyciu akcji Azure Login GitHub.

Azure Login umożliwia uwierzytelnianie przy użyciu nazw głównych usług za pomocą kluczy tajnych lub protokołu OpenID Connect przy użyciu poświadczenia tożsamości federacyjnej. W tym przykładzie użyjesz narzędzia OpenID Connect, aby zalogować się do sklepu App Configuration.

Użyj logowania Azure przy użyciu OpenID Connect

Aby użyć usługi Azure Login z usługą OpenID Connect, musisz wykonać następujące kroki:

  1. Skonfiguruj aplikację Microsoft Entra przy użyciu jednostki usługi.
  2. Przypisz aplikacji Microsoft Entra rolę App Configuration Data Owner, aby umożliwić akcji GitHub odczyt i zapis danych w magazynie App Configuration.
  3. Podaj identyfikator klienta aplikacji Microsoft Entra, identyfikator dzierżawy i identyfikator subskrypcji do akcji logowania. Te wartości można podać bezpośrednio w przepływie pracy lub przechowywać jako wpisy tajne usługi GitHub w celu uzyskania lepszych zabezpieczeń. W poniższym przykładzie te wartości ustawiono jako wpisy tajne. Aby uzyskać więcej informacji na temat używania wpisów tajnych w usłudze GitHub, zobacz Używanie wpisów tajnych w funkcji GitHub Actions.

Aby rozpocząć korzystanie z tej akcji usługi GitHub, przejdź do repozytorium i wybierz kartę Akcje . Wybierz pozycję Nowy przepływ pracy, a następnie skonfiguruj przepływ pracy samodzielnie. Na koniec wyszukaj w witrynie Marketplace frazę "Azure Login". Gdy ją znajdziesz, kliknij tę akcję i skopiuj podany fragment kodu do pliku przepływu pracy.

Wybierz kartę Akcja

Wybieranie akcji logowania platformy Azure

Przykład użycia identyfikatora Entra firmy Microsoft

# Set permissions for the workflow. Specify 'id-token: write' to allow OIDC token generation at the workflow level.
permissions: 
  id-token: write
  contents: read
 
jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      - name: Azure login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

Użyj parametrów połączenia

Alternatywnie możesz uwierzytelnić się, przekazując ciąg połączenia bezpośrednio do polecenia interfejsu wiersza poleceń platformy Azure. Ta metoda obejmuje pobranie parametry połączenia z witryny Azure Portal i użycie jej w poleceniach lub skryptach.

Aby rozpocząć, możesz znaleźć parametry połączenia w obszarze Ustawienia dostępu sklepu App Configuration w witrynie Azure Portal.

Następnie ustaw ten ciąg połączenia jako zmienną tajną w swoim repozytorium GitHub. Aby uzyskać więcej informacji na temat używania wpisów tajnych w usłudze GitHub, zobacz Używanie wpisów tajnych w funkcji GitHub Actions.

Przykład użycia ciągu połączenia

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json'
 
jobs: 
  syncconfig: 
    runs-on: ubuntu-latest
    
    # pass the secret variable as an environment variable to access it in your CLI action.
    env:
      CONNECTION_STRING: ${{ secrets.<ConnectionString> }}

Importowanie pliku konfiguracji

Używasz akcji GitHub Azure CLI do zaimportowania pliku konfiguracji do magazynu App Configuration. Aby rozpocząć korzystanie z tej akcji usługi GitHub, przejdź do repozytorium i wybierz kartę Akcje . Wybierz pozycję Nowy przepływ pracy, a następnie skonfiguruj przepływ pracy samodzielnie. Na koniec wyszukaj w serwisie Marketplace „Azure CLI Action”. Gdy ją znajdziesz, kliknij tę akcję i skopiuj podany fragment kodu do pliku przepływu pracy.

Wybierz akcję Azure CLI

W poniższym przykładzie użyjesz akcji Azure CLI, aby zaimportować pliki konfiguracji do magazynu Azure App Configuration, gdy zmiana zostanie wypchnięta do gałęzi appsettings.json. Gdy deweloper wypchnie zmianę do appsettings.json, skrypt przekazany do akcji Azure CLI zaktualizuje magazyn App Configuration o nowe wartości.

Sekcja w tym przepływie pracy określa, że akcja jest wyzwalana nawypchnięciu zawierającym appsettings.json do gałęzi głównej. Sekcja zadań wyświetla zadania uruchamiane po wyzwoleniu akcji. Akcja sprawdza odpowiednie pliki i aktualizuje magazyn App Configuration.

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json'

# Set permissions for the workflow. Specify 'id-token: write' to allow OIDC token generation at the workflow level.
permissions: 
  id-token: write
  contents: read

jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      - name: Azure login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/cli@v2
        with: 
          azcliversion: latest
          inlineScript: |
            az appconfig kv import --endpoint <AppConfigurationEndpoint> --auth-mode login -s file --path appsettings.json --format json --yes

Aby uzyskać więcej informacji na temat poleceń importu interfejsu wiersza polecenia Azure App Configuration, zobacz dokumentację interfejsu wiersza polecenia Azure App Configuration.

Używanie etykiety dynamicznej podczas importowania

Użycie etykiety dynamicznej w każdym importowaniu jest dobrym sposobem na zachowanie jasnej i precyzyjnej kontroli wersji konfiguracji. Umożliwia jednoznaczne zidentyfikowanie każdego importu do magazynu usługi App Configuration, co ułatwia mapowanie zmian w kodzie na aktualizacje konfiguracji.

Przykład użycia etykiety dynamicznej podczas importowania

W poniższym przykładzie wszystkie zaimportowane pary klucz-wartość będą miały unikalną etykietę opartą na hashu commita.

 jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps:      
      # Creates a label based on the branch name and the first 8 characters          
      # of the commit hash 
      - id: determine_label 
        run: echo ::set-output name=LABEL::"${GITHUB_REF#refs/*/}/${GITHUB_SHA:0:8}" 
      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/cli@v2
        with: 
          azcliversion: latest
          inlineScript: |
            az appconfig kv import --endpoint <AppConfigurationEndpoint> --auth-mode login -s file --path appsettings.json --format json --label ${{ steps.determine_label.outputs.LABEL }} --yes

Następne kroki

Aby dowiedzieć się, jak używać poleceń importu w interfejsie wiersza polecenia platformy Azure, zapoznaj się z naszym szczegółowym przewodnikiem Polecenia importu Azure CLI.

Aby dowiedzieć się więcej o różnych profilach zawartości plików, zobacz obsługę plików konfiguracji w usłudze Azure App Configuration.