Menyinkronisasi repositori GitHub Anda ke App Configuration

Tim yang ingin terus menggunakan praktik kontrol sumber yang ada dapat menggunakan Tindakan GitHub untuk secara otomatis menyinkronkan repositori GitHub mereka dengan penyimpanan App Configuration. Hal ini memungkinkan Anda untuk membuat perubahan pada file konfigurasi seperti biasa, sekaligus mendapatkan manfaat App Configuration seperti:
    • Konfigurasi terpusat di luar kode Anda
    • Memperbarui konfigurasi tanpa menyebarkan ulang seluruh aplikasi Anda
    • Integrasi dengan layanan seperti Azure App Service and Functions.

Alur kerja Tindakan GitHub menentukan proses otomatisasi dalam repositori GitHub. Tindakan Sinkronisasi Azure App Configuration memicu pembaruan pada instans App Configuration saat perubahan dilakukan pada repositori sumber. Tindakan ini menggunakan file YAML (.yml) yang ditemukan di jalur /.github/workflows/ repositori Anda untuk menentukan langkah dan parameter. Anda dapat memicu pembaruan konfigurasi saat mendorong, meninjau, atau membuat cabang file konfigurasi aplikasi sama seperti yang Anda lakukan dengan kode aplikasi.

Dokumentasi GitHub memberikan tampilan mendalam tentang alur kerja dan tindakan GitHub.

Aktifkan Tindakan GitHub di repositori Anda

Untuk mulai menggunakan tindakan GitHub ini, buka repositori Anda dan pilih tab Tindakan. Pilih Alur kerja baru, lalu Siapkan alur kerja sendiri. Terakhir, cari marketplace untuk "Sinkronisasi Azure App Configuration."

Pilih tab Tindakan

Pilih Tindakan sinkronisasi konfigurasi aplikasi

Menyinkronkan file konfigurasi setelah dorongan

Tindakan ini menyinkronkan file Azure App Configuration saat perubahan didorong ke appsettings.json. Saat pengembang mendorong perubahan ke appsettings.json, tindakan Sinkronisasi App Configuration memperbarui instans App Configuration dengan nilai baru.

Bagian pertama dari alur kerja ini menentukan bahwa tindakan memicu padadorongan yang berisi appsettings.json ke cabang utama. Bagian kedua mencantumkan pekerjaan yang dijalankan setelah tindakan dipicu. Tindakan memeriksa file yang relevan dan memperbarui instans App Configuration menggunakan string koneksi yang disimpan sebagai rahasia di repositori. Untuk informasi selengkapnya tentang menggunakan rahasia di GitHub, lihat artikel GitHub tentang membuat dan menggunakan rahasia terenkripsi.

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

Gunakan sinkronisasi yang ketat

Secara default tindakan GitHub tidak mengaktifkan mode ketat, yang berarti bahwa sinkronisasi hanya akan menambahkan nilai kunci dari file konfigurasi ke instans App Configuration (tidak ada pasangan nilai kunci yang akan dihapus). Mengaktifkan mode ketat berarti pasangan nilai kunci yang tidak ada dalam file konfigurasi dihapus dari instans App Configuration, sehingga cocok dengan file konfigurasi. Jika Anda menyinkronkan dari beberapa sumber atau menggunakan Azure Key Vault dengan App Configuration, Anda mungkin ingin menggunakan awalan atau label yang berbeda dengan sinkronisasi yang ketat untuk menghindari penghapusan pengaturan konfigurasi dari file lain (lihat sampel di bawah).

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 

Menyinkronkan beberapa file dalam satu tindakan

Jika konfigurasi Anda ada dalam beberapa file, Anda dapat menggunakan pola di bawah ini untuk memicu sinkronisasi saat salah satu file dimodifikasi. Pola ini menggunakan pustaka glob https://www.npmjs.com/package/glob. Perhatikan jika nama file konfigurasi Anda berisi koma, Anda dapat menggunakan backslash untuk menggantikan koma.

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

Sinkronkan menurut awalan atau label

Menentukan awalan atau label dalam tindakan sinkro Anda hanya akan menyinkronkan set tertentu. Penting untuk menggunakan sinkronisasi ketat dengan beberapa file. Bergantung pada bagaimana konfigurasi diatur, awalan atau label dapat dikaitkan dengan setiap file dan kemudian setiap awalan atau label dapat disinkronkan secara terpisah sehingga tidak ada yang ditimpa. Biasanya awalan digunakan untuk aplikasi atau layanan yang berbeda, dan label digunakan untuk lingkungan yang berbeda.

Sinkronkan menurut awalan:

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

Sinkronkan menurut 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'

Menggunakan label dinamis saat sinkronisasi

Tindakan berikut ini menyisipkan label dinamis pada setiap sinkronisasi, memastikan bahwa setiap sinkronisasi dapat diidentifikasi secara unik dan memungkinkan perubahan kode dipetakan ke perubahan konfigurasi.

Bagian pertama dari alur kerja ini menentukan bahwa tindakan memicu padadorongan yang berisi appsettings.json ke cabang utama. Bagian kedua menjalankan pekerjaan yang membuat label unik untuk pembaruan konfigurasi berdasarkan hash penerapan. Pekerjaan kemudian memperbarui instans App Configuration dengan nilai baru dan label unik untuk pembaruan ini.

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

Menggunakan Azure Key Vault dengan Tindakan GitHub

Pengembang yang menggunakan Azure Key Vault dengan AppConfiguration harus menggunakan dua file terpisah, biasanya appsettings.json dan secretreferences.json. Fitur secretreferences.json akan berisi url ke rahasia brankas kunci.

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

Tindakan GitHub kemudian dapat dikonfigurasi untuk melakukan sinkronisasi ketat pada appsettings.json, diikuti dengan sinkronisasi yang tidak ketat pada secretreferences.json. Contoh berikut akan memicu sinkronisasi ketika salah satu file diperbarui:

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'

Gunakan kedalaman maksimum untuk membatasi Tindakan GitHub

Perilaku default untuk atribut JSON berlapis adalah meratakan seluruh objek. JSON di bawah ini mendefinisikan pasangan bernilai kunci ini:

Kunci Nilai
Objek:Inner:InnerKey InnerValue
{ "Object": 
    { "Inner":
        {
        "InnerKey": "InnerValue"
        }
    }
}

Jika objek berlapis dimaksudkan untuk menjadi nilai yang didorong ke instans Konfigurasi, Anda dapat menggunakan nilai kedalaman untuk menghentikan perataan pada kedalaman yang sesuai.

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 

Dengan kedalaman 2, contoh di atas menampilkan pasangan nilai kunci berikut:

Kunci Nilai
Objek:Dalam {"InnerKey":"InnerValue"}

Memahami input tindakan

Parameter input menentukan data yang digunakan oleh tindakan selama runtime. Tabel berikut berisi parameter input yang diterima oleh Sinkronisasi App Configuration dan nilai yang diharapkan untuk masing-masing parameter. Untuk informasi lebih lanjut tentang input tindakan untuk Tindakan GitHub, lihat dokumentasi GitHub.

Catatan

ID input tidak peka huruf besar/kecil.

Masukkan nama Diperlukan? Nilai
configurationFile Ya Jalur relatif ke file konfigurasi di repositori. Pola glob didukung dan dapat menyertakan beberapa file.
format Ya Format file konfigurasi. Format yang valid adalah: JSON, YAML, properti.
connectionString Ya String koneksi baca-tulis untuk instans App Configuration. String koneksi harus disimpan sebagai rahasia di repositori GitHub, dan hanya nama rahasia yang harus digunakan dalam alur kerja.
pemisah Ya Pemisah digunakan ketika meratakan file konfigurasi ke pasangan nilai kunci. Nilai yang valid adalah: . , ; : - _ __ /
awalan Tidak Awalan yang akan ditambahkan ke awal kunci.
label Tidak Label digunakan saat mengatur pasangan nilai kunci. Jika tidak ditentukan, label null digunakan.
ketat Tidak Nilai boolean yang menentukan apakah mode ketat diaktifkan. Nilai defaultnya adalah false.
kedalaman Tidak Kedalaman maksimum untuk meratakan file konfigurasi. Kedalaman harus berupa angka positif. Default tidak akan memiliki kedalaman maksimum.
tag Tidak Menentukan tag yang disetel pada pasangan nilai kunci. Format yang diharapkan adalah bentuk karakter dari objek JSON dengan bentuk berikut: { [propertyName: string]: string; } Setiap nilai nama properti menjadi sebuah tag.

Langkah berikutnya

Dalam artikel ini, Anda belajar tentang Tindakan GitHub Sinkronisasi App Configuration dan bagaimana hal itu dapat digunakan untuk mengotomatiskan pembaruan pada instans App Configuration Anda. Untuk mempelajari bagaimana Azure App Configuration bereaksi terhadap perubahan pasangan nilai kunci, lanjutkan ke artikel berikutnya.