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."
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.