Synkronisera din GitHub-lagringsplats med app-konfigurationen

Team som vill fortsätta använda sina befintliga käll kontroll metoder kan använda GitHub-åtgärder för att automatiskt synkronisera sina GitHub-lagringsplatser med sitt konfigurations lager för appar. På så sätt kan du göra ändringar i config-filerna precis som vanligt, samtidigt som du får program konfigurations förmåner som:
    • Centraliserad konfiguration utanför din kod
    • Uppdatera konfigurationen utan att distribuera om hela appen
    • Integrering med tjänster som Azure App Service och funktioner.

Ett arbets flöde för GitHub-åtgärder definierar en automatiserad process i en GitHub-lagringsplats. Åtgärden Azure App Sync-konfiguration utlöser uppdateringar till en konfigurations instans för appar när ändringar görs i käll lagrings platsen. Den använder en YAML-fil (. yml) som finns i /.github/workflows/ sökvägen till lagrings platsen för att definiera stegen och parametrarna. Du kan utlösa konfigurations uppdateringar när du skickar, granska eller förgrena appars konfigurationsfiler precis som du gör med app-kod.

GitHub- dokumentationen innehåller djupgående visning av GitHub-arbetsflöden och åtgärder.

Aktivera GitHub-åtgärder i din lagrings plats

Börja använda den här GitHub-åtgärden genom att gå till din lagrings plats och välja fliken åtgärder . Välj nytt arbets flöde och skapa sedan ett arbets flöde själv. Slutligen söker du efter "Azure App konfigurations synkronisering" på Marketplace.

Välj fliken åtgärd

Välj synkronisering av app-konfiguration

Synkronisera konfigurationsfiler efter en push

Den här åtgärden synkroniserar Azure App konfigurationsfiler när en ändring skickas till appsettings.json . När en utvecklare skickar en ändring till appsettings.json , uppdaterar synkroniseringen av app Configuration-instansen med de nya värdena.

I det första avsnittet av det här arbets flödet anges att åtgärden utlöses en push som innehåller appsettings.json till huvud grenen. I det andra avsnittet visas jobben som körs när åtgärden har Aktiver ATS. Åtgärden kontrollerar de relevanta filerna och uppdaterar konfigurations instansen för appen med hjälp av anslutnings strängen som lagras som en hemlighet i lagrings platsen. Mer information om hur du använder hemligheter i GitHub finns i GitHub-artikeln om hur du skapar och använder 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änd strikt synkronisering

Som standard aktiverar GitHub-åtgärden inte strikt läge, vilket innebär att synkroniseringen bara lägger till nyckel värden från konfigurations filen till appens konfigurations instans (inga nyckel/värde-par tas bort). Att aktivera strikt läge innebär att nyckel/värde-par som inte finns i konfigurations filen tas bort från program konfigurations instansen, så att den matchar konfigurations filen. Om du synkroniserar från flera källor eller använder Azure Key Vault med konfiguration av appar vill du använda olika prefix eller etiketter med strikt synkronisering för att undvika att ta bort konfigurations inställningar från andra filer (se exemplen 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 BLOB-biblioteket https://www.npmjs.com/package/glob . Observera att om namnet på konfigurations filen innehåller ett kommatecken kan du använda ett omvänt snedstreck för att undvika 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 efter prefix eller etikett

Om du anger prefix eller etiketter i din synkroniseringsrelation synkroniseras bara den specifika uppsättningen. Detta är viktigt för att använda strikt synkronisering med flera filer. Beroende på hur konfigurationen har kon figurer ATS kan antingen ett prefix eller en etikett vara kopplad till varje fil och varje prefix eller etikett kan synkroniseras separat så att inget skrivs över. Vanligt vis används prefix för olika program eller tjänster och etiketter 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änd en dynamisk etikett vid synkronisering

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

I det första avsnittet av det här arbets flödet anges att åtgärden utlöses en push som innehåller appsettings.json till huvud grenen. Det andra avsnittet kör ett jobb som skapar en unik etikett för konfigurations uppdateringen baserat på commit hash. Jobbet uppdaterar sedan appens konfigurations instans med de nya värdena och den unika etiketten fö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änd Azure Key Vault med GitHub-åtgärd

Utvecklare som använder Azure Key Vault med AppConfiguration bör använda två separata filer, vanligt vis en appsettings.jspå och en secretreferences.js. secretreferences.jspå kommer att innehålla URL: en till Key Vault-hemligheten.

{"hemlig hemlighet": "{ " URI " : " https://myKeyVault.vault.azure.net/secrets/mySecret "} "}

GitHub-åtgärden kan sedan konfigureras för att göra en strikt synkronisering på appsettings.js, följt av en icke-strikt synkronisering på secretreferences.js. 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-åtgärden

Standard beteendet för kapslade JSON-attribut är att förenkla hela objektet. JSON nedan definierar detta nyckel/värde-par:

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 konfigurations instansen kan du använda djup -värdet för att stoppa förenklingen vid 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 följande nyckel/värde-par:

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

Förstå åtgärds inmatningar

Indataparametrar anger data som används av åtgärden under körning. Följande tabell innehåller indataparametrar som har godkänts av app Configuration Sync och de förväntade värdena för var och en. Mer information om åtgärds inmatningar för GitHub-åtgärder finns i GitHub- dokumentationen.

Anteckning

Indatamängds-ID: n är Skift läges okänsliga.

Inmatat namn Obligatoriskt? Värde
configurationFile Ja Relativ sökväg till konfigurations filen i lagrings platsen. BLOB mönster stöds och kan innehålla flera filer.
format Ja Fil format för konfigurations filen. Giltiga format är: JSON, YAML, Properties.
Begär Ja Anslutnings sträng för app Configuration-instansen. Anslutnings strängen ska lagras som en hemlighet i GitHub-lagringsplatsen och endast det hemliga namnet ska användas i arbets flödet.
brytning Ja Avgränsning som används vid förenkling av konfigurations filen till nyckel/värde-par. Giltiga värden är:. , ; : - _ __ /
protokollprefixet 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 inget anges används en null-etikett.
begränsade Inga Ett booleskt värde som anger om strikt läge är aktiverat. Standardvärdet är false.
djuplodande Inga Högsta djup för att förenkla konfigurations filen. Djupet måste vara ett positivt tal. Standardvärdet har inget max djup.
tags Inga Anger taggen som angetts för nyckel/värde-par. Det förväntade formatet är en stringified form av ett JSON-objekt av följande form: {[propertyName: sträng]: String;} Varje egenskaps namn-värdet blir en tagg.

Nästa steg

I den här artikeln har du lärt dig om GitHub-åtgärden för app Configuration-synkronisering och hur den kan användas för att automatisera uppdateringar av din konfigurations instans för appar. Fortsätt till nästa artikelom du vill lära dig hur Azure App-konfigurationen reagerar på ändringar i nyckel/värde-par.