Uw GitHub-opslag plaats synchroniseren met de app-configuratie

Teams die hun bestaande broncode beheer procedures willen blijven gebruiken, kunnen GitHub-acties gebruiken om de GitHub-opslag plaats automatisch te synchroniseren met de app-configuratie opslag. Hierdoor kunt u wijzigingen aanbrengen in de configuratie bestanden zoals u dat normaal zou doen, terwijl u de voor delen van de app-configuratie krijgt, zoals:
    • Gecentraliseerde configuratie buiten uw code
    • Het bijwerken van de configuratie zonder uw volledige app opnieuw te implementeren
    • Integratie met Services als Azure App Service en functions.

Een GitHub actions- werk stroom definieert een geautomatiseerd proces in een github-opslag plaats. Met de actie voor het synchroniseren van Azure-app-configuratie worden updates voor een app-configuratie-exemplaar geactiveerd wanneer er wijzigingen in de bron opslagplaats worden aangebracht. Er wordt een YAML-bestand (. yml) gebruikt dat is gevonden in het /.github/workflows/ pad van uw opslag plaats om de stappen en para meters te definiëren. U kunt configuratie-updates activeren tijdens het pushen, reviseren of vertakking van app-configuratie bestanden, net als bij app-code.

De GitHub- documentatie biedt uitgebreide weer gave van github-werk stromen en-acties.

GitHub-acties inschakelen in uw opslag plaats

Als u deze GitHub actie wilt gaan gebruiken, gaat u naar uw opslag plaats en selecteert u het tabblad acties . Selecteer nieuwe werk stroom en Stel zelf een werk stroom in. Ga ten slotte naar de Marketplace voor ' Azure-app-configuratie synchronisatie '.

Selecteer het tabblad actie

Selecteer de synchronisatie actie voor de configuratie van de app

Configuratie bestanden na een push synchroniseren

Met deze actie worden Azure-app configuratie bestanden gesynchroniseerd wanneer een wijziging naar wordt gepusht appsettings.json . Wanneer een ontwikkelaar een wijziging doorstuurt appsettings.json , wordt het app-configuratie-exemplaar met de nieuwe waarden bijgewerkt met de synchronisatie actie van de app-configuratie.

In de eerste sectie van deze werk stroom wordt aangegeven dat de actie wordt geactiveerd op een Push die appsettings.json naar de hoofd vertakking bevat. De tweede sectie bevat een lijst met de taken die worden uitgevoerd zodra de actie wordt geactiveerd. Met deze actie worden de relevante bestanden gecontroleerd en wordt het app-configuratie-exemplaar bijgewerkt met behulp van de connection string opgeslagen als een geheim in de opslag plaats. Zie het artikel van github over het maken en gebruiken van versleutelde geheimen voor meer informatie over het gebruik van geheimen in github.

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

Strikte synchronisatie gebruiken

Standaard wordt met de actie GitHub niet de strikte modus ingeschakeld, wat betekent dat de synchronisatie alleen sleutel waarden van het configuratie bestand toevoegt aan het app-configuratie-exemplaar (er worden geen sleutel-waardeparen verwijderd). Als u strikte modus inschakelt, worden sleutel-waardeparen die zich niet in het configuratie bestand bevinden, verwijderd uit het app-configuratie-exemplaar, zodat het overeenkomt met het configuratie bestand. Als u synchroniseert vanuit meerdere bronnen of Azure Key Vault met app-configuratie, wilt u verschillende voor voegsels of labels gebruiken met strikte synchronisatie om te voor komen dat configuratie-instellingen van andere bestanden worden gewist (Zie voor beelden hieronder).

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 

Meerdere bestanden in één actie synchroniseren

Als uw configuratie zich in meerdere bestanden bevindt, kunt u het onderstaande patroon gebruiken om een synchronisatie te activeren wanneer een bestand wordt gewijzigd. Dit patroon maakt gebruik van de Globs-bibliotheek https://www.npmjs.com/package/glob . Houd er rekening mee dat als de naam van het configuratie bestand een komma bevat, u een back slash kunt gebruiken om de komma te escapen.

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

Synchroniseren op voor voegsel of label

Als u voor voegsels of labels opgeeft in uw synchronisatie actie, wordt alleen die specifieke set gesynchroniseerd. Dit is belang rijk voor het gebruik van strikte synchronisatie met meerdere bestanden. Afhankelijk van hoe de configuratie is ingesteld, kan een voor voegsel of een label aan elk bestand worden gekoppeld, waarna elk voor voegsel of label afzonderlijk kan worden gesynchroniseerd, zodat er niets wordt overschreven. Doorgaans worden voor voegsels gebruikt voor verschillende toepassingen of services en labels worden gebruikt voor verschillende omgevingen.

Synchroniseren op voor voegsel:

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

Synchroniseren op label:

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'

Een dynamisch label gebruiken bij synchronisatie

Met de volgende actie wordt een dynamisch label voor elke synchronisatie ingevoegd, zodat elke synchronisatie uniek kan worden geïdentificeerd en het mogelijk is dat code wijzigingen worden toegewezen aan configuratie wijzigingen.

In de eerste sectie van deze werk stroom wordt aangegeven dat de actie wordt geactiveerd op een Push die appsettings.json naar de hoofd vertakking bevat. In het tweede gedeelte wordt een taak uitgevoerd waarmee een uniek label voor de configuratie-update wordt gemaakt op basis van de commit-hash. De taak werkt vervolgens het app-configuratie-exemplaar bij met de nieuwe waarden en het unieke label voor deze update.

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

Azure Key Vault gebruiken met actie GitHub

Ontwikkel aars die Azure Key Vault gebruiken met AppConfiguration, moeten twee afzonderlijke bestanden gebruiken, meestal een appsettings.jsop en een secretreferences.jsop. De secretreferences.jsin bevat de URL naar het sleutel kluis geheim.

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

De actie GitHub kan vervolgens worden geconfigureerd om een strikte synchronisatie uit te voeren op de appsettings.jsop, gevolgd door een niet-strikte synchronisatie op secretreferences.jsop. In het volgende voor beeld wordt een synchronisatie geactiveerd wanneer een van de bestanden wordt bijgewerkt:

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'

Maximale diepte gebruiken om de GitHub-actie te beperken

Het standaard gedrag voor geneste JSON-kenmerken is het samen voegen van het hele object. De JSON hieronder definieert deze sleutel/waarde-paar:

Sleutel Waarde
Object: binnenste: InnerKey InnerValue
{ "Object": 
    { "Inner":
        {
        "InnerKey": "InnerValue"
        }
    }
}

Als het geneste object de waarde is die naar het configuratie-exemplaar moet worden gepusht, kunt u de diepte waarde gebruiken om het afvlakken met de juiste diepte te stoppen.

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 

Met het bovenstaande voor beeld wordt nu het volgende sleutel/waarde-paar als resultaat gegeven:

Sleutel Waarde
Object: binnenste {"InnerKey":"InnerValue"}

Informatie over actie-invoer

Invoer parameters geven gegevens op die worden gebruikt door de actie tijdens runtime. De volgende tabel bevat de invoer parameters die worden geaccepteerd door de synchronisatie van de app-configuratie en de verwachte waarden voor elke. Zie de documentatievan github voor meer informatie over actie-invoer voor github-acties.

Notitie

Invoer-Id's zijn niet hoofdletter gevoelig.

Invoer naam Vereist? Waarde
configurationFile Yes Relatief pad naar het configuratie bestand in de opslag plaats. Globs-patronen worden ondersteund en kunnen meerdere bestanden bevatten.
indeling Yes Bestands indeling van het configuratie bestand. Geldige indelingen zijn: JSON, YAML, eigenschappen.
connectionString Yes Verbindings reeks voor het app-configuratie-exemplaar. De connection string moet worden opgeslagen als een geheim in de GitHub-opslag plaats en alleen de geheime naam moet in de werk stroom worden gebruikt.
scheiding Yes Scheidings teken dat wordt gebruikt bij het afvlakken van het configuratie bestand naar sleutel-waardeparen. Geldige waarden zijn:. , ; : - _ __ /
beleids No Het voor voegsel dat moet worden toegevoegd aan het begin van de sleutels.
label No Label dat wordt gebruikt bij het instellen van sleutel-waardeparen. Als u geen waarde opgeeft, wordt een NULL-label gebruikt.
beperking No Een Booleaanse waarde die bepaalt of de strikte modus is ingeschakeld. De standaardwaarde is false.
diepga No Maximale diepte voor het afvlakken van het configuratie bestand. Depth moet een positief getal zijn. De standaard waarde heeft geen maximale diepte.
tags No Hiermee geeft u de tag die is ingesteld op sleutel-waardeparen. De verwachte indeling is een stringified vorm van een JSON-object van de volgende vorm: {[propertyname: String]: String;} Elke eigenschaps naam-waarde wordt een tag.

Volgende stappen

In dit artikel hebt u geleerd hoe u de GitHub-actie voor het configureren van de app-configuratie en hoe deze kan worden gebruikt voor het automatiseren van updates voor uw app-configuratie-exemplaar. Ga door naar het volgende artikelvoor meer informatie over de manier waarop Azure-app configuratie reageert op wijzigingen in sleutel-waardeparen.