Pengembangan berbasis uji coba untuk penyebaran infrastruktur?

11

Saya telah menggunakan boneka untuk penyebaran infrastruktur, dan sebagian besar pekerjaan yang saya lakukan adalah dengan perusahaan-perusahaan Web 2.0 yang sangat menyukai pengembangan yang digerakkan oleh tes untuk aplikasi web mereka. Apakah ada orang di sini yang menggunakan pendekatan uji coba untuk mengembangkan konfigurasi server mereka? Alat apa yang Anda gunakan untuk melakukan ini? Seberapa dalam pengujian Anda?

Jon Topper
sumber

Jawaban:

3

Saya tidak berpikir Anda bisa menggunakan pengembangan berbasis tes . Tetapi Anda tentu saja dapat mencoba pengujian unit pada server baru.

Pada dasarnya Anda perlu menggunakan server, memulai layanan dalam mode uji, dan kemudian menjalankan tes dari server lain (atau serangkaian server) terhadap layanan. Kemudian akhirnya dimasukkan ke dalam produksi.

Mungkin menggunakan skrip python untuk terhubung ke database, halaman web, dan layanan ssh. Dan kemudian mengembalikan LULUS / GAGAL. Akan menjadi awal yang baik untuk Anda.

Atau Anda bisa menggulung ini menjadi solusi pemantauan, seperti Zenoss, Nagios, atau Munin. Kemudian Anda dapat menguji, selama penempatan; Dan monitor selama produksi.

Joseph Kern
sumber
Saya hanya memberi +1 setiap komentar di sini. Wow.
Joseph Kern
1

Saya pikir Joseph Kern berada di jalur yang benar dengan alat pemantauan. Siklus TDD yang khas adalah: menulis tes baru yang gagal, kemudian memperbarui sistem sehingga semua tes yang ada lulus. Ini akan mudah untuk beradaptasi dengan Nagios: tambahkan cek yang gagal, konfigurasikan server, jalankan kembali semua cek. Kalau dipikir-pikir, aku sudah melakukan ini kadang-kadang.

Jika Anda ingin mendapatkan hard-core, Anda harus menulis skrip untuk memeriksa setiap aspek yang relevan dari konfigurasi server. Sistem pemantauan seperti Nagios mungkin tidak relevan untuk beberapa dari mereka (misalnya, Anda mungkin tidak "memantau" versi OS Anda), tetapi tidak ada alasan Anda tidak dapat mencampur dan mencocokkan yang sesuai.

Zac Thompson
sumber
1
Saya melewatkan langkah dalam siklus TDD kanonik: refactoring. Untuk server admin ini analog dengan migrasi atau mendistribusikan layanan untuk mencapai konfigurasi yang lebih baik setelah setiap perubahan: Saya pikir ini cukup banyak deskripsi pekerjaan bagi sebagian besar admin hari ini sudah
Zac Thompson
Pendekatan ini sebagian besar sudah saya lakukan (meskipun s / Nagios / Zabbix /) namun, perubahan ini langsung masuk ke produksi, dan rasanya saya bisa melakukan yang lebih baik.
Jon Topper
Seberapa jauh Anda ingin mendapatkan yang lebih baik? Jika Anda ingin menghindari melakukan tes-pertama dalam produksi, Anda memerlukan lingkungan pengujian yang cukup meniru konfigurasi produksi Anda. Dengan "memadai", maksud saya cukup untuk menguji otomatisasi boneka Anda di lingkungan pengujian, dan hanya berlaku untuk produksi setelah Anda yakin itu benar. Tentu saja, ini akan menghabiskan biaya yang tidak sedikit untuk perangkat keras. Saya tidak menyarankan ini sebagai bagian dari jawaban karena itu independen dari bagian "test-driven".
Zac Thompson
1

Meskipun saya belum dapat melakukan TDD dengan manifes wayang, kami memiliki siklus yang cukup baik untuk mencegah perubahan masuk ke produksi tanpa pengujian. Kami memiliki dua puppetmaster yang dibentuk, satu adalah puppetmaster produksi kami dan yang lainnya puppetmaster pengembangan kami. Kami menggunakan "lingkungan" Boneka untuk mengatur yang berikut:

  • lingkungan pengembangan (satu untuk setiap orang yang mengerjakan manifes wayang)
  • lingkungan pengujian
  • lingkungan produksi

Pengembang aplikasi kami melakukan pekerjaan mereka pada mesin virtual yang mendapatkan konfigurasi Wayang mereka dari lingkungan pengembangan "pengujian" Puppetmaster. Ketika kita mengembangkan manifestasi Wayang, kita biasanya mengatur VM untuk melayani sebagai klien uji selama proses pengembangan dan mengarahkannya ke lingkungan pengembangan pribadi kita. Setelah kami puas dengan manifes kami, kami mendorongnya ke lingkungan pengujian tempat pengembang aplikasi akan mendapatkan perubahan pada VM mereka - mereka biasanya mengeluh dengan keras ketika ada yang rusak :-)

Pada subset representatif dari mesin produksi kami, ada boneka kedua berjalan dalam mode noop dan menunjuk ke lingkungan pengujian. Kami menggunakan ini untuk menangkap potensi masalah dengan manifes sebelum didorong ke produksi.

Setelah perubahan telah berlalu, yaitu mereka tidak merusak mesin pengembang aplikasi dan mereka tidak menghasilkan output yang tidak diinginkan dalam log dari proses puppetd mesin "noop" mesin produksi, kami mendorong manifes baru ke dalam produksi. Kami memiliki mekanisme rollback sehingga kami dapat kembali ke versi sebelumnya.

Paul Lathrop
sumber
1

Saya bekerja di lingkungan yang sedang dalam proses migrasi ke model operasi TDD. Untuk beberapa hal seperti skrip pemantauan, ini bekerja dengan sangat baik. Kami menggunakan buildbot untuk mengatur lingkungan pengujian dan menjalankan tes. Dalam hal ini Anda mendekati TDD dari perspektif "Legacy Code". Dalam TDD "Legacy Code" adalah kode yang sudah ada yang tidak memiliki tes. Jadi tes pertama tidak gagal, mereka menentukan operasi yang benar (atau yang diharapkan).

Untuk banyak pekerjaan konfigurasi, langkah pertama adalah menguji apakah konfigurasi dapat diuraikan oleh layanan. Banyak layanan menyediakan beberapa fasilitas untuk melakukan hal ini. Nagios memiliki mode preflight, cfagent tidak beraksi, apache, sudo, bind, dan banyak lainnya memiliki fasilitas serupa. Ini pada dasarnya adalah lint run untuk konfigurasi.

Contohnya adalah jika Anda menggunakan apache dan memisahkan file konfigurasi untuk bagian yang berbeda, Anda dapat menguji bagian-bagian tersebut juga cukup menggunakan file httpd.conf yang berbeda untuk membungkusnya agar dapat berjalan di mesin uji Anda. Kemudian Anda dapat menguji apakah server web pada mesin uji memberikan hasil yang benar di sana.

Setiap langkah di sepanjang jalan Anda mengikuti pola dasar yang sama. Tulis tes, lakukan tes lulus, refactor pekerjaan yang telah Anda lakukan Seperti disebutkan di atas, saat mengikuti jalur ini, pengujian tidak selalu gagal dengan cara TDD yang diterima.

Rik

Rik Schneider
sumber
1

Saya yakin tautan berikut ini dapat menarik

  1. cucumber-nagios - proyek yang memungkinkan Anda mengubah suite Mentimun Anda menjadi plugin Nagios dan yang dilengkapi dengan definisi langkah untuk SSH, DNS, Ping, AMQP dan jenis tugas "eksekusi perintah" generik.
    http://auxesis.github.com/cucumber- nagios /
    http://www.slideshare.net/auxesis/behaviour-driven-monitoring-with-cucumbernagios-2444224
    http://agilesysadmin.net/cucumber-nagios

  2. Ada juga beberapa upaya di sisi Wayang / Python hal http://www.devco.net/archives/2010/03/27/infrastructure_testing_with_mcollective_and_cucumber.php

dolzenko
sumber