Kami telah berkembang sebagai perusahaan, produk kami berkembang dan kegiatan dan upaya yang terkait dengan DevOps kami juga tumbuh - kami telah beralih dari Bamboo ke Jenkins yang lebih fleksibel dan dapat dikonfigurasi, menggunakan jaringan pipa penyebaran dan plugin lainnya; beralih ke Ansible dan mulai menggunakan Docker di sana-sini secara internal.
Semua hal ini memerlukan beberapa tingkat pengkodean atau konfigurasi - Skrip dan konfigurasi yang memungkinkan, skrip groove Jenkins, konfigurasi Dockerfiles dan YAML.
Untuk saat ini, kami telah membuat terpisah "ops" repositori dengan direktori tingkat tinggi untuk jenkins
, ansible
, docker
dan other
(yang merupakan nama yang mengerikan, tapi untuk saat ini semua otomatisasi "lainnya" DevOps hal-hal yang ada).
Pendekatan kami tidak terasa benar dan mungkin tidak skala, tetapi apa praktik terbaik dan rekomendasi untuk menjaga kode terkait DevOps dalam repositori atau repositori kode?
Jawaban:
Organisasi saat ini dari kode dan konfigurasi yang Anda gambarkan disusun oleh solusi teknis yang terlibat. Ini adalah desain yang buruk yang akan menambah banyak overhead dalam kegiatan pemeliharaan kami dan juga akan menambahkan banyak jebakan di jalan kami. Sebagai gantinya, organisasi itu harus terstruktur di sekitar artefak yang kami sebarkan.
Alasan untuk ini adalah bahwa kami ingin mempertimbangkan artefak ( misalnya gambar buruh pelabuhan atau paket perangkat lunak) sebagai objek dari kata kerja berikut:
untuk mempertimbangkan set minimal tugas otomatis yang ingin kita lakukan. Jika kita ingin mengubah sesuatu tentang bagaimana kata kerja tes diimplementasikan, mudah untuk mengunjungi folder yang sesuai dengan artefak dalam repositori yang sesuai dan kemudian menemukan item otomatisasi khusus jenkins yang perlu diperbarui. Sebaliknya, jika resep otomasi terstruktur di sekitar solusi teknis, maka kita perlu mengetahui bahwa jenkins terlibat dalam prosedur pengujian dan menemukan item otomatisasi terkait artefak di sana. Dalam situasi yang kompleks, organisasi di sekitar solusi teknis membuat pembaruan sangat sulit, karena kita harus mengetahui secara apriori semua solusi teknis yang terlibat dalam beberapa layanan untuk memperbaruinya.
Misalnya repositori yang berisi kode untuk situs web dan layanan mikro "a" dapat memiliki sub-direktori berikut yang didedikasikan untuk operasi:
masing-masing memiliki tiga skrip yang dipanggil
build
,test
dandeploy
. Sekarang organisasi item otomasi telah diklarifikasi, mari kita mengalihkan perhatian ke konfigurasi.Kondisi dan persyaratan utama tentang organisasi konfigurasi ditetapkan oleh
deploy
kata kerja ketika diterapkan pada artefak seperti layanan. Katadeploy
kerjanya harus memiliki parameter berikut:Dari perspektif operasional, pemecahan parametrisasi ini sesuai dengan derajat alami kebebasan masalah penyebaran - selain dari kredensial yang dapat digabungkan dengan konfigurasi runtime, tetapi lebih baik memisahkannya untuk menghindari penyebarannya secara sembarangan.
sumber
Saya dapat menjawab tentang buruh pelabuhan, salah satu praktik terbaik untuk menggunakan buruh pelabuhan adalah dengan menyimpan file buruh pelabuhan dan menulis file dalam repositori proyek yang sama, jadi di mana pun Anda mengkloning proyek, Anda dapat membuat gambar buruh pelabuhan, dan ada baiknya untuk simpan beberapa versi buruh pelabuhan menulis file misalnya (prod, staging, dev) sehingga Anda dapat membangun gambar dan menjalankan wadah dengan opsi spesifik untuk setiap env misalnya untuk mesin dev Anda dapat menggunakan jaringan tertentu dan menjalankan lebih banyak dependensi wadah atau apa pun.
sumber
Setiap kode alat masuk ke dalam repo sendiri. untuk mis
Ini akan membantu Anda meningkatkan skala dalam hal proses orkestrasi dan mempertahankan berbagai cabang untuk setiap lingkungan
Ini akan memberi Anda lebih banyak kontrol granular dan membongkar semua overhead versi Anda ke sistem kontrol versi. Juga buat cabang terpisah untuk setiap lingkungan dan beri tag kode untuk setiap rilis produksi (seperti yang kami lakukan untuk basis kode aplikasi). Pikirkan Infra dan proses dalam hal kode. (Setiap perubahan dalam proses harus dikodifikasi dan dikirim ke QA, SIT, UAT dan kemudian ke PROD) mirip dengan aplikasi.
Misalnya, Anda mungkin memiliki V2.1 dari Ansible running di Production (master branch) tetapi V2.0 dari docker container berjalan di Prod (master branch)
Demikian pula, simpan skrip DB / skrip bash di repositori mereka sendiri dan mungkin Anda dapat memiliki file periksa kesehatan (JSON / YAML) yang dikonfigurasikan untuk memperlihatkan versi semua alat / bagian di setiap URL yang dikerahkan untuk setiap tujuan pelacakan dan otomatisasi. (Agar webhook Anda membaca URL dan mengotomatiskan penerapan)
sumber
Membuat perbedaan antara Ops, Dev dan DevOps mempromosikan isolasi dan menerapkan pola pikir "melemparkannya di atas tembok". Untuk meningkatkan kerja sama antar tim, seseorang harus meletakkan segala sesuatu di repositori yang diperlukan untuk membangun dan menggunakan proyek.
Karena itu, jawaban untuk pertanyaan:
adalah bahwa jika konfigurasi diperlukan untuk menjalankan proyek maka seseorang harus meletakkannya di direktori yang sama.
sumber