Synchronizowanie repozytorium GitHub z App Configuration

Zespoły, które chcą nadal korzystać z istniejących praktyk kontroli źródła, mogą używać GitHub Actions do automatycznego synchronizowania repozytorium GitHub z magazynem App Configuration. Dzięki temu można wprowadzać zmiany w plikach konfiguracji, tak jak zwykle, przy jednoczesnym uzyskaniu App Configuration korzyści, takich jak:
    • Scentralizowana konfiguracja poza kodem
    • Aktualizowanie konfiguracji bez ponownego wdrażania całej aplikacji
    • Integracja z usługami, takimi jak Azure App Service i Functions.

Przepływ pracy GitHub Actions definiuje zautomatyzowany proces w repozytorium GitHub. Akcja synchronizacji Azure App Configuration wyzwala aktualizacje wystąpienia App Configuration po wprowadzeniu zmian w repozytorium źródłowym. Używa on pliku YAML (yml) znalezionego w ścieżce repozytorium w /.github/workflows/ celu zdefiniowania kroków i parametrów. Aktualizacje konfiguracji można wyzwalać podczas wypychania, przeglądania lub rozgałęziania plików konfiguracji aplikacji tak samo jak w przypadku kodu aplikacji.

Dokumentacja usługi GitHub zawiera szczegółowy widok przepływów pracy i akcji usługi GitHub.

Włączanie GitHub Actions w repozytorium

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 samodzielnie skonfiguruj przepływ pracy. Na koniec wyszukaj w witrynie Marketplace frazę "Azure App Configuration Sync".

Wybierz kartę Akcja

Wybieranie akcji synchronizacji konfiguracji aplikacji

Synchronizowanie plików konfiguracji po wypychaniu

Ta akcja synchronizuje pliki Azure App Configuration po wypchnięciu zmiany do appsettings.jsonelementu . Gdy deweloper wypchnie zmianę do appsettings.json, akcja App Configuration Sync aktualizuje wystąpienie App Configuration przy użyciu nowych wartości.

Pierwsza sekcja tego przepływu pracy określa, że akcja jest wyzwalana wwypychaniu zawierającym appsettings.json gałąź główną . Druga sekcja zawiera listę zadań uruchamianych po wyzwoleniu akcji. Akcja sprawdza odpowiednie pliki i aktualizuje wystąpienie App Configuration przy użyciu parametrów połączenia przechowywanych jako wpis tajny w repozytorium. Aby uzyskać więcej informacji na temat używania wpisów tajnych w usłudze GitHub, zobacz artykuł GitHub dotyczący tworzenia i używania zaszyfrowanych wpisów tajnych.

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json' 
 
jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/appconfiguration-sync@v1 
        with: 
          configurationFile: 'appsettings.json' 
          format: 'json' 
          # Replace <ConnectionString> with the name of the secret in your                        
          # repository 
          connectionString: ${{ secrets.<ConnectionString> }} 
          separator: ':' 

Używanie ścisłej synchronizacji

Domyślnie akcja usługi GitHub nie włącza trybu ścisłego, co oznacza, że synchronizacja doda tylko wartości klucza z pliku konfiguracji do wystąpienia App Configuration (nie zostaną usunięte żadne pary klucz-wartość). Włączenie trybu ścisłego oznacza pary klucz-wartość, które nie znajdują się w pliku konfiguracji, są usuwane z wystąpienia App Configuration, tak aby był zgodny z plikiem konfiguracji. Jeśli synchronizujesz się z wielu źródeł lub korzystasz z usługi Azure Key Vault z App Configuration, użyj różnych prefiksów lub etykiet z ścisłą synchronizacją, aby uniknąć czyszczenia ustawień konfiguracji z innych plików (zobacz przykłady poniżej).

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json' 
 
jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/appconfiguration-sync@v1 
        with: 
          configurationFile: 'appsettings.json' 
          format: 'json' 
          # Replace <ConnectionString> with the name of the secret in your 
          # repository 
          connectionString: ${{ secrets.<ConnectionString> }}  
          separator: ':' 
          label: 'Label' 
          prefix: 'Prefix:' 
          strict: true 

Synchronizowanie wielu plików w jednej akcji

Jeśli konfiguracja znajduje się w wielu plikach, możesz użyć poniższego wzorca, aby wyzwolić synchronizację po zmodyfikowaniu dowolnego pliku. Ten wzorzec używa biblioteki glob .https://www.npmjs.com/package/glob Pamiętaj, że jeśli nazwa pliku konfiguracji zawiera przecinek, możesz użyć ukośnika odwrotnego, aby uniknąć przecinka.

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

jobs:
  syncconfig:
    runs-on: ubuntu-latest
    steps:
      # checkout done so that files in the repo can be read by the sync
      - uses: actions/checkout@v1
      - uses: azure/appconfiguration-sync@v1
        with:
          configurationFile: '{appsettings.json,appsettings2.json}'
          format: 'json'
          # Replace <ConnectionString> with the name of the secret in your repository
          connectionString: ${{ secrets.<ConnectionString> }}
          separator: ':'

Synchronizacja według prefiksu lub etykiety

Określanie prefiksów lub etykiet w akcji synchronizacji spowoduje zsynchronizowanie tylko tego określonego zestawu. Jest to ważne w przypadku używania ścisłej synchronizacji z wieloma plikami. W zależności od sposobu konfigurowania konfiguracji można skojarzyć prefiks lub etykietę z każdym plikiem, a następnie każdy prefiks lub etykietę można zsynchronizować oddzielnie, aby nic nie zostało zastąpione. Zazwyczaj prefiksy są używane dla różnych aplikacji lub usług i etykiet są używane w różnych środowiskach.

Synchronizuj według prefiksu:

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

jobs:
  syncconfig:
    runs-on: ubuntu-latest
    steps:
      # checkout done so that files in the repo can be read by the sync
      - uses: actions/checkout@v1
      - uses: azure/appconfiguration-sync@v1
        with:
          configurationFile: 'appsettings.json'
          format: 'json'
          # Replace <ConnectionString> with the name of the secret in your repository
          connectionString: ${{ secrets.<ConnectionString> }}
          separator: ':'
          prefix: 'Prefix::'

Synchronizuj według etykiety:

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

jobs:
  syncconfig:
    runs-on: ubuntu-latest
    steps:
      # checkout done so that files in the repo can be read by the sync
      - uses: actions/checkout@v1
      - uses: azure/appconfiguration-sync@v1
        with:
          configurationFile: 'appsettings.json'
          format: 'json'
          # Replace <ConnectionString> with the name of the secret in your repository
          connectionString: ${{ secrets.<ConnectionString> }}
          separator: ':'
          label: 'Label'

Używanie etykiety dynamicznej podczas synchronizacji

Poniższa akcja wstawia etykietę dynamiczną w każdej synchronizacji, zapewniając, że każda synchronizacja może być jednoznacznie zidentyfikowana i zezwalająca na mapowanie zmian w kodzie na zmiany konfiguracji.

Pierwsza sekcja tego przepływu pracy określa, że akcja jest wyzwalana wwypychaniu zawierającym appsettings.json gałąź główną . Druga sekcja uruchamia zadanie, które tworzy unikatową etykietę aktualizacji konfiguracji na podstawie skrótu zatwierdzenia. Następnie zadanie aktualizuje wystąpienie App Configuration nowymi wartościami i unikatową etykietą dla tej aktualizacji.

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json' 
 
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/appconfiguration-sync@v1 
        with: 
          configurationFile: 'appsettings.json' 
          format: 'json' 
          # Replace <ConnectionString> with the name of the secret in your 
          # repository 
          connectionString: ${{ secrets.<ConnectionString> }}  
          separator: ':' 
          label: ${{ steps.determine_label.outputs.LABEL }} 

Korzystanie z usługi Azure Key Vault z akcją usługi GitHub

Deweloperzy korzystający z usługi Azure Key Vault z aplikacją AppConfiguration powinni używać dwóch oddzielnych plików, zazwyczaj appsettings.json i secretreferences.json. Plik secretreferences.json będzie zawierać adres URL wpisu tajnego magazynu kluczy.

{ "mySecret": "{"uri":"https://myKeyVault.vault.azure.net/secrets/mySecret"}" }

Następnie można skonfigurować akcję usługi GitHub w celu przeprowadzenia ścisłej synchronizacji w pliku appsettings.json, a następnie synchronizacji innej niż ścisła w pliku secretreferences.json. W poniższym przykładzie zostanie wyzwolona synchronizacja po zaktualizowaniu dowolnego pliku:

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

jobs:
  syncconfig:
    runs-on: ubuntu-latest
    steps:
      # checkout done so that files in the repo can be read by the sync
      - uses: actions/checkout@v1
      - uses: azure/appconfiguration-sync@v1
        with:
          configurationFile: 'appsettings.json'
          format: 'json'
          # Replace <ConnectionString> with the name of the secret in your repository
          connectionString: ${{ secrets.<ConnectionString> }}
          separator: ':'
          strict: true
      - uses: azure/appconfiguration-sync@v1
        with:
          configurationFile: 'secretreferences.json'
          format: 'json'
          # Replace <ConnectionString> with the name of the secret in your repository
          connectionString: ${{ secrets.<ConnectionString> }}
          separator: ':'
          contentType: 'application/vnd.microsoft.appconfig.keyvaultref+json;charset=utf-8'

Używanie maksymalnej głębokości w celu ograniczenia akcji usługi GitHub

Domyślnym zachowaniem zagnieżdżonych atrybutów JSON jest spłaszczenie całego obiektu. Poniższy kod JSON definiuje tę parę klucz-wartość:

Klucz Wartość
Object:Inner:InnerKey InnerValue
{ "Object": 
    { "Inner":
        {
        "InnerKey": "InnerValue"
        }
    }
}

Jeśli obiekt zagnieżdżony ma być wartością wypchniętą do wystąpienia konfiguracji, możesz użyć wartości głębokości , aby zatrzymać spłaszczanie w odpowiedniej głębokości.

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json' 
 
jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/appconfiguration-sync@v1 
        with: 
          configurationFile: 'appsettings.json' 
          format: 'json' 
          # Replace <ConnectionString> with the name of the secret in your 
          # repository 
          connectionString: ${{ secrets.<ConnectionString> }}  
          separator: ':' 
          depth: 2 

Biorąc pod uwagę głębokość 2, powyższy przykład zwraca teraz następującą parę klucz-wartość:

Klucz Wartość
Object:Inner {"InnerKey":"InnerValue"}

Omówienie danych wejściowych akcji

Parametry wejściowe określają dane używane przez akcję podczas wykonywania. Poniższa tabela zawiera parametry wejściowe akceptowane przez usługę App Configuration Sync i oczekiwane wartości dla każdego z nich. Aby uzyskać więcej informacji na temat danych wejściowych akcji dla GitHub Actions, zobacz dokumentację usługi GitHub.

Uwaga

Identyfikatory wejściowe są bez uwzględniania wielkości liter.

Nazwa danych wejściowych Wymagane? Wartość
Configurationfile Tak Ścieżka względna do pliku konfiguracji w repozytorium. Wzorce globu są obsługiwane i mogą zawierać wiele plików.
format Tak Format pliku konfiguracji. Prawidłowe formaty to: JSON, YAML, properties.
Parametry połączenia Tak Parametry połączenia odczytu i zapisu dla wystąpienia App Configuration. Parametry połączenia powinny być przechowywane jako wpis tajny w repozytorium GitHub, a tylko nazwa wpisu tajnego powinna być używana w przepływie pracy.
Separator Tak Separator używany podczas spłaszczania pliku konfiguracji do par klucz-wartość. Prawidłowe wartości to: . , ; : - _ __ /
Prefiks Nie Prefiks do dodania do początku kluczy.
label Nie Etykieta używana podczas ustawiania par klucz-wartość. Jeśli nie zostanie określona, zostanie użyta etykieta o wartości null.
ściśle Nie Wartość logiczna określająca, czy tryb ścisły jest włączony. Wartość domyślna to false.
Głębokość Nie Maksymalna głębokość spłaszczania pliku konfiguracji. Głębokość musi być liczbą dodatnią. Wartość domyślna nie będzie miała maksymalnej głębokości.
tags Nie Określa tag ustawiony dla par klucz-wartość. Oczekiwany format jest ciągowym formularzem obiektu JSON o następującym kształcie: { [propertyName: string]: string; } Każda nazwa-wartość właściwości staje się tagiem.

Następne kroki

W tym artykule przedstawiono informacje o akcji usługi GitHub synchronizacji App Configuration oraz o tym, jak można jej użyć do automatyzowania aktualizacji wystąpienia App Configuration. Aby dowiedzieć się, jak Azure App Configuration reaguje na zmiany par klucz-wartość, przejdź do następnego artykułu.