Share via


Synkronisera din GitHub-lagringsplats för att App Configuration

Team som vill fortsätta använda sina befintliga metoder för källkontroll kan använda GitHub Actions för att automatiskt synkronisera sin GitHub-lagringsplats med sin App Configuration store. På så sätt kan du göra ändringar i dina konfigurationsfiler som vanligt, samtidigt som du får App Configuration fördelar som:
    • Centraliserad konfiguration utanför koden
    • Uppdatera konfigurationen utan att distribuera om hela appen
    • Integrering med tjänster som Azure App Service och Functions.

Ett GitHub Actions arbetsflöde definierar en automatiserad process på en GitHub-lagringsplats. Den Azure App Configuration synkroniseringsåtgärden utlöser uppdateringar av en App Configuration-instans när ändringar görs i källlagringsplatsen. Den använder en YAML-fil (.yml) som finns i /.github/workflows/ sökvägen till lagringsplatsen för att definiera stegen och parametrarna. Du kan utlösa konfigurationsuppdateringar när du push-överför, granskar eller förgrenar appkonfigurationsfiler precis som du gör med appkod.

GitHub-dokumentationen ger en djupgående översikt över GitHub-arbetsflöden och åtgärder.

Aktivera GitHub Actions på lagringsplatsen

Om du vill börja använda den här GitHub-åtgärden går du till din lagringsplats och väljer fliken Åtgärder . Välj Nytt arbetsflöde och sedan Konfigurera ett arbetsflöde själv. Slutligen söker du på Marketplace efter "Azure App Configuration Sync".

Välj fliken Åtgärd

Välj appkonfigurationssynkroniseringsåtgärden

Synkronisera konfigurationsfiler efter en push-överföring

Den här åtgärden synkroniserar Azure App Configuration filer när en ändring skickas till appsettings.json. När en utvecklare skickar en ändring till appsettings.jsonuppdaterar åtgärden App Configuration Sync den App Configuration instansen med de nya värdena.

Det första avsnittet i det här arbetsflödet anger att åtgärden utlöses en push som innehåller appsettings.jsontill huvudgrenen . I det andra avsnittet visas jobben som körs när åtgärden har utlösts. Åtgärden checkar ut relevanta filer och uppdaterar App Configuration-instansen med hjälp av anslutningssträngen som lagras som en hemlighet på lagringsplatsen. Mer information om hur du använder hemligheter i GitHub finns i GitHubs artikel om att skapa och använda krypterade hemligheter.

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: ':' 

Använda strikt synkronisering

Som standard aktiverar Inte GitHub-åtgärden strikt läge, vilket innebär att synkroniseringen endast lägger till nyckelvärden från konfigurationsfilen till App Configuration instans (inga nyckel/värde-par tas bort). Om du aktiverar strikt läge innebär det att nyckel/värde-par som inte finns i konfigurationsfilen tas bort från App Configuration-instansen, så att den matchar konfigurationsfilen. Om du synkroniserar från flera källor eller använder Azure Key Vault med App Configuration vill du använda olika prefix eller etiketter med strikt synkronisering för att undvika att rensa konfigurationsinställningar från andra filer (se exempel nedan).

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 

Synkronisera flera filer i en åtgärd

Om konfigurationen finns i flera filer kan du använda mönstret nedan för att utlösa en synkronisering när någon av filerna ändras. Det här mönstret använder globbiblioteket https://www.npmjs.com/package/glob . Observera att om konfigurationsfilnamnet innehåller ett kommatecken kan du använda ett omvänt snedstreck för att kommatecken.

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: ':'

Synkronisera med prefix eller etikett

Om du anger prefix eller etiketter i synkroniseringsåtgärden synkroniseras endast den specifika uppsättningen. Detta är viktigt för att använda strikt synkronisering med flera filer. Beroende på hur konfigurationen konfigureras kan antingen ett prefix eller en etikett associeras med varje fil och sedan kan varje prefix eller etikett synkroniseras separat så att ingenting skrivs över. Prefix används vanligtvis för olika program eller tjänster och etiketter används för olika miljöer.

Synkronisera efter prefix:

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::'

Synkronisera efter etikett:

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'

Använda en dynamisk etikett vid synkronisering

Följande åtgärd infogar en dynamisk etikett för varje synkronisering, vilket säkerställer att varje synkronisering kan identifieras unikt och tillåter att kodändringar mappas till konfigurationsändringar.

Det första avsnittet i det här arbetsflödet anger att åtgärden utlöses en push som innehåller appsettings.jsontill huvudgrenen . Det andra avsnittet kör ett jobb som skapar en unik etikett för konfigurationsuppdateringen baserat på incheckningshash. Jobbet uppdaterar sedan App Configuration-instansen med de nya värdena och den unika etiketten för den här uppdateringen.

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 }} 

Använda Azure Key Vault med GitHub Action

Utvecklare som använder Azure Key Vault med AppConfiguration bör använda två separata filer, vanligtvis en appsettings.json och en secretreferences.json. Secretreferences.json innehåller url:en till nyckelvalvets hemlighet.

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

GitHub-åtgärden kan sedan konfigureras för att utföra en strikt synkronisering på appsettings.json, följt av en icke-strikt synkronisering av secretreferences.json. Följande exempel utlöser en synkronisering när någon av filerna uppdateras:

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'

Använd maximalt djup för att begränsa GitHub Action

Standardbeteendet för kapslade JSON-attribut är att platta ut hela objektet. JSON nedan definierar det här nyckel/värde-paret:

Tangent Värde
Objekt:Inre:InnerKey InnerValue
{ "Object": 
    { "Inner":
        {
        "InnerKey": "InnerValue"
        }
    }
}

Om det kapslade objektet är avsett att vara det värde som skickas till konfigurationsinstansen kan du använda djupvärdet för att stoppa utplattade objekt på lämpligt djup.

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 

Med ett djup på 2 returnerar exemplet ovan nu följande nyckel/värde-par:

Tangent Värde
Objekt:Inre {"InnerKey":"InnerValue"}

Förstå åtgärdsindata

Indataparametrar anger data som används av åtgärden under körningen. Följande tabell innehåller indataparametrar som godkänts av App Configuration Sync och förväntade värden för varje. Mer information om åtgärdsindata för GitHub Actions finns i GitHubs dokumentation.

Anteckning

Indata-ID:t är skiftlägesokänsliga.

Indatanamn Obligatoriskt? Värde
configurationFile Ja Relativ sökväg till konfigurationsfilen på lagringsplatsen. Globmönster stöds och kan innehålla flera filer.
format Ja Konfigurationsfilens filformat. Giltiga format är: JSON, YAML, properties.
Connectionstring Ja Läs- och skrivanslutningssträng för App Configuration-instansen. Anslutningssträngen ska lagras som en hemlighet på GitHub-lagringsplatsen och endast det hemliga namnet ska användas i arbetsflödet.
Avgränsare Ja Avgränsare som används när konfigurationsfilen plattas ut till nyckel/värde-par. Giltiga värden är: . , ; : - _ __ /
Prefix Inga Prefix som ska läggas till i början av nycklar.
etikett Inga Etikett som används vid inställning av nyckel/värde-par. Om den är ospecificerad används en null-etikett.
Strikt Inga Ett booleskt värde som avgör om strikt läge är aktiverat. Standardvärdet är false.
Djup Inga Maximalt djup för att platta ut konfigurationsfilen. Djup måste vara ett positivt tal. Standardvärdet har inget maximalt djup.
tags Inga Anger taggen som angetts för nyckel/värde-par. Det förväntade formatet är en strängifierad form av ett JSON-objekt med följande form: { [propertyName: string]: string; } Varje egenskapsnamn-värde blir en tagg.

Nästa steg

I den här artikeln har du lärt dig om github-åtgärden App Configuration Sync och hur den kan användas för att automatisera uppdateringar av din App Configuration-instans. Om du vill veta hur Azure App Configuration reagerar på ändringar i nyckel/värde-par fortsätter du till nästa artikel.