Ada cara ketiga, seperti kata Anda sendiri. Saya pikir Anda mencampuradukkan pengembangan, pengujian dan penyebaran. Saya mengusulkan agar seluruh SDLC dilihat secara keseluruhan, pertama, untuk memahami apa yang ingin Anda capai. Ini adalah topik besar, tetapi saya akan melakukan yang terbaik untuk meringkas.
TL; DR;
Singkatnya, Anda perlu memisahkan:
- kode Anda, dari
- konfigurasi aplikasi, dari
- konfigurasi lingkungan sistem.
Masing-masing harus independen satu sama lain dan sesuai:
- versi terkontrol
- diuji
- dikerahkan
Versi yang lebih panjang
Pertama, Anda memiliki aplikasi yang terdiri dari kode dan (set terpisah) konfigurasi. Ini perlu diuji, baik untuk fungsi build dan disengaja - ini disebut integrasi berkelanjutan (CI). Ada banyak penyedia layanan ini baik online dan lokal - misalnya CircleCI untuk penyedia cloud yang menautkan ke repositori Anda dan membangun dan menguji setiap kali Anda berkomitmen. Jika repositori Anda di tempat dan tidak dapat menggunakan penyedia cloud, sesuatu seperti Jenkinsakan menjadi setara. Jika aplikasi Anda cukup standar, mungkin ada gambar Docker yang ada yang dapat digunakan layanan CI. Jika tidak, Anda harus membuat satu, atau sekelompok, kode aplikasi dan konfigurasi Anda dapat digunakan. Dikonfigurasi dengan benar, Anda akan memiliki banyak statistik pada kualitas kode aplikasi Anda.
Selanjutnya, setelah Anda puas dengan fungsionalitas dan kebenaran aplikasi Anda, basis kode harus ditandai untuk rilis tertentu. Bangunan ini kemudian harus digunakan untuk lingkungan pengujian. Perhatikan bahwa kode akan sama dengan yang diuji dalam CI Anda (terbukti demikian, jika Anda telah melakukan ini dengan benar), tetapi konfigurasi Anda mungkin berbeda. Sekali lagi beberapa penyedia CI dapat menawarkan langkah ini sehingga Anda dapat menguji penyebaran aplikasi yang dikemas dan konfigurasi terpisah. Tahap ini biasanya akan mencakup pengujian fungsional pengguna (untuk fungsionalitas baru), serta pengujian otomatis (untuk fungsionalitas yang diketahui). Jika rilis melewati tahap ini, Anda memiliki kandidat rilis untuk pengujian integrasi. Anda dapat menjalankan tes otomatisasi dari wadah Docker lain,beberapa metrik yang menyatakan upaya pengujian adalah 1: 1 untuk upaya pengkodean (meskipun saya sendiri tidak yakin tentang ini).
Secara singkat, langkah selanjutnya adalah di mana Anda membangun lingkungan (sistem) Anda seolah-olah itu adalah produksi. Jika Anda menggunakan Docker dalam produksi, ini adalah tempat Anda akan memikirkan pengerasan keamanan, optimisasi jaringan dan server dll. Gambar Docker Anda mungkin didasarkan pada yang Anda gunakan dalam Pengembangan (idealnya demikian), tetapi mungkin ada perubahan untuk penskalaan dan keamanan , seperti yang saya katakan. Sekarang pengujian fungsional aplikasi harus lengkap, Anda lebih mementingkan keamanan dan kinerja. Sesuai dengan pengujian fungsional, pengujian Anda di sini dapat dikembangkan, disebarkan, dan dijalankan dari gambar Docker lainnya. Langkah ini dulunya mahal dan jarang dilakukan sehingga Anda memerlukan perangkat keras khusus di tempat yang mereproduksi produksi. Hari ini, ini benar-benar layak karena Anda dapat berdiri dan menghancurkan seluruh lingkungan dari hampir semua skala berdasarkan permintaan.
Akhirnya, Anda memiliki rilis yang harus siap produksi dengan hanya satu set kecil delta konfigurasi dari pengujian integrasi Anda (alamat IP, URI basis data, kata sandi, dll.) Basis kode Anda telah diuji setidaknya dalam tiga lingkungan yang berbeda pada saat ini. titik dan mayoritas konfigurasi sistem setidaknya sekali.