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".
Synchronizowanie plików konfiguracji po wypychaniu
Ta akcja synchronizuje pliki Azure App Configuration po wypchnięciu zmiany do appsettings.json
elementu . 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.