Ini adalah pertanyaan yang sangat luas tentang metode dan saran mengenai variabel / struktur lingkungan. Tetapi pada akhirnya saya mencari jawaban untuk pertanyaan yang sangat spesifik tentang 'Bagaimana saya harus menyimpan variabel lingkungan saya?'
Pertama beberapa klarifikasi:
- Lingkungan bagi saya bisa dari 3 hingga 10 server dan merupakan cara untuk memuat infrastruktur pelanggan tertentu.
- Di dalam setiap lingkungan ada beberapa variabel yang sebagian besar secara otomatis dihasilkan dari beberapa input kunci (nama, ukuran dll).
Seperti yang ada sekarang kita menyimpan semua variabel lingkungan kita dalam struktur seperti:
<playbook>.yml # Various playbooks for deployment
roles/windows # Ansible role for Ubuntu
roles/ubuntu # Ansible role for Ubuntu
config/hosts/<name>.yml # Ansible inventory
config/hosts/vars/<name>.json # Environment specific variables
Sekarang konfigurasi diinisialisasi sebagai submodule di repositori git di atas. Karena variabel file berubah agak sering hal ini menyebabkan masalah dengan perubahan data, sekali, dua kali atau bahkan tiga kali antara komitmen membuat perubahan semakin sulit dilacak.
Seperti yang saya secara pribadi melihatnya maju, kita harus mencari untuk menyimpan semua variabel pelanggan kami secara terpusat / scalable dan kemudian menghubungkannya dengan inventaris dinamis dengan memungkinkan .
Saya mengerti ada beberapa teknologi yang tampaknya melakukan bagian dari apa yang mungkin diperlukan seperti Konsul tetapi mereka tampaknya bekerja paling baik di lingkungan yang melayani satu aplikasi besar daripada banyak yang lebih kecil yang sedikit berbeda.
Saya pada dasarnya melihat kami harus menulis skrip inventaris dan kemudian hanya mendorong semua data kami ke dalam beberapa basis data yang dibuat untuk tujuan dan kemudian terus berjalan seolah-olah tidak ada yang berubah. Saya melihat ini sebagai cara untuk mengurangi banyak data yang saat ini kami simpan dan mungkin mencari cara-cara yang berbeda untuk menyimpan data, bukan hanya meningkatkan apa yang berfungsi lagi.
Saya berharap seseorang memiliki semacam pengalaman dalam mengimplementasikan infrastruktur sebagai kode ketika harus berurusan dengan banyak lingkungan yang lebih kecil dibandingkan dengan satu, dua atau tiga yang besar.
Ada saran?
Jika lingkungan Anda adalah per pelanggan, dalam kasus spesifik Anda disarankan untuk memiliki repositori per pelanggan . (Secara umum ini adalah repositori per lingkungan.) Repositori ini akan memiliki struktur direktori standar untuk variabel lingkungan, variabel yang mungkin dan inventaris, rahasia yang sangat terenkripsi (token akses akun, kunci pribadi, dll.). Anda akan mengirimkan kode tersebut ke dalam repositori tersebut. Saya mungkin akan melakukannya dalam beberapa repositori. Satu untuk peran dan modul yang mungkin, satu untuk skrip pemeliharaan dan penerapan, satu untuk setiap aplikasi utama yang berjalan di lingkungan.
Sekarang Anda secara opsional dapat benar-benar memotong kode atau menyematkan submodule pada tag spesifik untuk rilis , memastikan bahwa kode yang mengelola lingkungan pelanggan tidak akan berubah kecuali diuji dan dirilis.
Jika Anda menggunakan repositori artefak , pastikan artefak diversi dengan benar dan versi tersebut ditentukan dalam variabel lingkungan dengan benar.
Otomatisasi penting karena variabel lingkungan tidak boleh diperbarui oleh manusia jika memungkinkan, tetapi dihasilkan oleh skrip. Pastikan bahwa hampir tidak ada pembaruan manual dalam inventaris per pelanggan dan pengembang hanya memperbarui repositori kode. Jika mereka ingin membuat perubahan konfigurasi, itu harus dilakukan ke salah satu skrip penghasil, yang kemudian dijalankan untuk menghasilkan variabel dan diff dikomit ke dalam repositori pelanggan. Membayar untuk mengatur integrasi berkelanjutan untuk proses ini. Tanpa ini pada beberapa titik akan ada terlalu banyak repositori untuk dipelihara .
sumber