Synchronizace úložiště GitHub s App Configuration

Týmy, které chtějí dál používat své stávající postupy správy zdrojového kódu, můžou pomocí GitHub Actions automaticky synchronizovat své úložiště GitHub se svým úložištěm App Configuration. To vám umožní provádět změny v konfiguračních souborech obvyklým způsobem a zároveň získat App Configuration výhod, jako jsou:
    • Centralizovaná konfigurace mimo váš kód
    • Aktualizace konfigurace bez opětovného nasazení celé aplikace
    • Integrace se službami, jako jsou Azure App Service a Functions.

Pracovní postup GitHub Actions definuje automatizovaný proces v úložišti GitHub. Akce synchronizace Azure App Configuration aktivuje aktualizaci instance App Configuration při provedení změn ve zdrojovém úložišti. K definování kroků a parametrů používá soubor YAML (.yml), který se nachází v /.github/workflows/ cestě k vašemu úložišti. Aktualizace konfigurace můžete aktivovat při nabízení, kontrole nebo větvení konfiguračních souborů aplikací stejně jako u kódu aplikace.

Dokumentace ke GitHubu poskytuje podrobné zobrazení pracovních postupů a akcí GitHubu.

Povolení GitHub Actions v úložišti

Pokud chcete tuto akci GitHubu začít používat, přejděte do úložiště a vyberte kartu Actions (Akce ). Vyberte Nový pracovní postup a pak nastavte pracovní postup sami. Nakonec na marketplace vyhledejte "Azure App Configuration Sync".

Vyberte kartu Akce.

Vyberte akci synchronizace konfigurace aplikace.

Synchronizace konfiguračních souborů po nasdílení změn

Tato akce synchronizuje Azure App Configuration soubory při odeslání změny do appsettings.json. Když vývojář odešle změnu do appsettings.json, akce App Configuration Synchronizovat aktualizuje instanci App Configuration novými hodnotami.

První část tohoto pracovního postupu určuje, že akce se aktivuje přinasdílení změn obsahujícíchappsettings.json hlavní větev. Druhá část obsahuje seznam úloh spuštěných po aktivaci akce. Akce zkontroluje příslušné soubory a aktualizuje instanci App Configuration pomocí připojovacího řetězce uloženého jako tajný kód v úložišti. Další informace o používání tajných kódů v GitHubu najdete v článku o vytváření a používání šifrovaných tajných kódů v GitHubu .

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

Použití striktní synchronizace

Akce GitHubu ve výchozím nastavení nepovoluje striktní režim, což znamená, že synchronizace přidá do instance App Configuration pouze hodnoty klíč-hodnota z konfiguračního souboru (neodstraní se žádné páry klíč-hodnota). Povolení striktního režimu znamená, že dvojice klíč-hodnota, které nejsou v konfiguračním souboru, se z instance App Configuration odstraní, aby odpovídala konfiguračnímu souboru. Pokud provádíte synchronizaci z více zdrojů nebo používáte Azure Key Vault s App Configuration, budete chtít použít různé předpony nebo popisky se striktní synchronizací, abyste se vyhnuli vymazání konfiguračních nastavení z jiných souborů (viz ukázky níže).

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 

Synchronizace více souborů v rámci jedné akce

Pokud máte konfiguraci ve více souborech, můžete při úpravě některého souboru aktivovat synchronizaci pomocí následujícího vzoru. Tento vzor používá knihovnu https://www.npmjs.com/package/glob glob . Všimněte si, že pokud název konfiguračního souboru obsahuje čárku, můžete použít zpětné lomítko jako řídicí znak.

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

Synchronizace podle předpony nebo popisku

Zadáním předpon nebo popisků v akci synchronizace se synchronizuje jenom tato konkrétní sada. To je důležité pro použití striktní synchronizace s více soubory. V závislosti na tom, jak je konfigurace nastavená, může být předpona nebo popisek přidružena ke každému souboru a každá předpona nebo popisek se pak může synchronizovat samostatně, takže se nic nepřepíše. Předpony se obvykle používají pro různé aplikace nebo služby a popisky se používají pro různá prostředí.

Synchronizovat podle předpony:

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

Synchronizovat podle popisku:

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'

Použití dynamického popisku při synchronizaci

Následující akce vloží do každé synchronizace dynamický popisek, který zajistí jedinečnou identifikaci každé synchronizace a umožní mapování změn kódu na změny konfigurace.

První část tohoto pracovního postupu určuje, že akce se aktivuje přinasdílení změn obsahujícíchappsettings.json hlavní větev. Druhá část spustí úlohu, která vytvoří jedinečný popisek pro aktualizaci konfigurace na základě hodnoty hash potvrzení. Úloha pak aktualizuje instanci App Configuration novými hodnotami a jedinečným popiskem pro tuto aktualizaci.

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

Použití Azure Key Vault s GitHub Action

Vývojáři, kteří používají Azure Key Vault s AppConfiguration, by měli používat dva samostatné soubory, obvykle appsettings.json a secretreferences.json. Soubor secretreferences.json bude obsahovat adresu URL tajného kódu trezoru klíčů.

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

Akci GitHubu je pak možné nakonfigurovat tak, aby řídila striktní synchronizaci souboru appsettings.json následovanou nestriktní synchronizací souboru secretreferences.json. Následující ukázka aktivuje synchronizaci při aktualizaci některého ze souborů:

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'

Použití maximální hloubky k omezení akce GitHubu

Výchozím chováním vnořených atributů JSON je zploštět celý objekt. Následující kód JSON definuje tento pár klíč-hodnota:

Klíč Hodnota
Objekt:Inner:InnerKey Vnitřní hodnota
{ "Object": 
    { "Inner":
        {
        "InnerKey": "InnerValue"
        }
    }
}

Pokud je vnořený objekt určen jako hodnota vložená do instance configuration, můžete použít hodnotu hloubky k zastavení zploštělování v příslušné hloubce.

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 

S ohledem na hloubku 2 teď výše uvedený příklad vrátí následující dvojici klíč-hodnota:

Klíč Hodnota
Objekt:Vnitřní {"InnerKey":"InnerValue"}

Vysvětlení vstupů akcí

Vstupní parametry určují data používaná akcí za běhu. Následující tabulka obsahuje vstupní parametry přijímané službou App Configuration Sync a očekávané hodnoty pro každý z nich. Další informace o vstupech akcí pro GitHub Actions najdete v dokumentaci ke GitHubu.

Poznámka

Id vstupu nerozlišují malá a velká písmena.

Název vstupu Povinné? Hodnota
konfigurační soubor Yes Relativní cesta ke konfiguračnímu souboru v úložišti Vzory glob jsou podporované a můžou obsahovat více souborů.
formát Yes Formát konfiguračního souboru. Platné formáty jsou JSON, YAML a vlastnosti.
připojovací řetězec Yes Připojovací řetězec pro čtení i zápis pro instanci App Configuration. Připojovací řetězec by měl být uložený jako tajný kód v úložišti GitHub a v pracovním postupu by se měl používat jenom název tajného klíče.
Oddělovač Yes Oddělovač používaný při zploštělování konfiguračního souboru na páry klíč-hodnota. Platné hodnoty jsou: . , ; : - _ __ /
Předponu No Předpona, která se má přidat na začátek klíčů.
label No Popisek použitý při nastavení párů klíč-hodnota. Pokud není zadán, použije se popisek null.
přísné No Logická hodnota, která určuje, jestli je povolený striktní režim. Výchozí hodnota je False.
Hloubka No Maximální hloubka pro zploštělování konfiguračního souboru. Hloubka musí být kladné číslo. Výchozí hodnota nebude mít žádnou maximální hloubku.
tags No Určuje značku nastavenou u párů klíč-hodnota. Očekávaný formát je řetězcová forma objektu JSON s následujícím tvarem: { [propertyName: string]: string; } Každý název-hodnota vlastnosti se stane značkou.

Další kroky

V tomto článku jste se dozvěděli o akci GitHubu App Configuration Synchronizovat a o tom, jak ji můžete použít k automatizaci aktualizací vaší instance App Configuration. Pokud chcete zjistit, jak Azure App Configuration reaguje na změny párů klíč-hodnota, pokračujte k dalšímu článku.