Apakah pemrogram YML memimpikan pengujian yang mungkin dilakukan?

skema dapur-ci


Ini adalah versi teks dari kinerja 2018-04-25 di Saint-Petersburg Linux User Group . Kode contoh di sini: https://github.com/ultral/ansible-role-testing


Saya percaya bahwa Anda menggunakan manajemen konfigurasi, bukan bash . Yaitu konfigurasi Anda adalah kode. Jika kita mengatakan bahwa infrastruktur adalah kode, maka filosofi yang sama harus diterapkan pada pembuatannya seperti untuk pengembangan perangkat lunak. Sudahkah Anda memikirkan hal ini? Bagaimana kamu melakukannya? Dan lainnya?


Prasyarat


Dalam kasus yang dijelaskan, ada banyak yang pengantar:


  • Banyak peran yang mungkin.
  • Hyper-V sebagai hypervisor utama.
  • Cloud pribadi dengan kemampuan terbatas untuk membuat mesin virtual dengan cepat.
  • Proksi untuk akses ke Internet.
  • Ketidakmampuan untuk menjalankan pengujian peran yang mungkin dilakukan di buruh pelabuhan, karena peran tersebut adalah konfigurasi dari keseluruhan VM, termasuk pengaturan jaringan misalnya.
  • Ingin menggunakan kebijakan panduan hijau untuk repositori dengan peran yang dimungkinkan.

Sebelum kita melakukan apa yang kita lakukan, kita membandingkan solusi yang ada.


ProyekDapur ujiMolekulMilik sendiri
Bahasarubyular sancabash / ruby
Pengamat1321260
Bintang141311541
Garpu5021742
LisensiApache 2.0MITApa saja
Berkomitmen192912640
Rilis1011210
Kontributor109825

NamatestinfraserverpecinspecGoss
Githubphilpep / testinframizzy / serverpeckoki / inspecaelsabbahy / goss
Bahasaular sancarubyrubypergi
Pengamat9314516567
Bintang997210511672170
Garpu138361330156
LisensiApache 2.0MITApache 2.0Apache 2.0
Berkomitmen38018544609309
Rilis3528234647
Kontributor4311015931

Kami memutuskan untuk tidak menemukan kembali roda dan mengambil solusi turnkey. Tim infrastruktur kami tahu ruby, jadi Test Kitchen & inspec dipilih


Dapur-ci


skema dapur-ci


Idenya sederhana jelek. Kami membuat mesin virtual baru, menggunakan peran, menjalankan tes asap.


Kebijakan pembangunan hijau


Skema kebijakan pembangunan hijau


Tapi kami memutuskan untuk pindah. Gunakan aliran ala github, mis. peran dalam brunch individu dan setelah peninjauan merjim di master. Jika tes ok, maka kami menggulirkan peran ke infrastruktur.


Virtualisasi Bersarang


Seperti yang Anda ingat, kami memiliki batasan pada pembuatan mesin virtual, jadi kami harus membuat keputusan yang tidak menyenangkan dalam bentuk virtualisasi bersarang.


kita harus masuk lebih dalam


Awalnya, kami mencoba Virtualbox x32 untuk tidak menyertakan dukungan bersarang. Ini ternyata bukan gagasan karena stabilitas panik kernel. Faktor penting kedua adalah bahwa kita duduk di x86_64, jadi penelitian dilanjutkan (hi libvirt), tetapi menetap di virtualbox lebih umum pada OS yang didukung.


Kesulitan


Selama peluncuran, semuanya baik-baik saja.Ada sejumlah kesulitan.


Lewati pengaturan proxy dari host ke tamu tamu


Dalam beberapa skenario pengujian, pengaturan proxy digunakan, sementara pada host dengan testkitchen, proxy transparan digunakan dan bonus yang dimungkinkan tidak menerima variabel tambahan dengan nilai kosong.


Solusi: norak - buat templat ERB.


<%= ENV['http_proxy'].to_s.empty? ? 'http://proxy.example.com:3128' : ENV['http_proxy'] %> 

Manajemen pengaturan jaringan melalui ansible


Dalam beberapa peran, jaringan telah dikonfigurasi, dalam pengujian terlihat seperti ini:


  • Kami mengkonfigurasi jaringan dengan menyalin file.
  • Terapkan pengaturan jaringan.
  • Semua itu buruk.

Solusi: Tambahkan antarmuka ke mesin virtual


Jika set tes berisi "_" semuanya jatuh


Virtualbox tidak dapat menggunakan "_" dalam nama mesin virtual. Dan mesin virtual menggunakan nama skrip.


Solusi: ganti nama set tes "vm_" => "vm-"


Menguji kasus dengan menginstal Oracle tanpa "." di akhir nama mesin virtual jatuh


Peran itu digunakan dalam penjualan bersyarat ketika mereka memutuskan untuk menutupinya dengan tes. Ketika Anda memasukkannya ke dalam VM yang disiapkan, itu memenuhi peran, itu jatuh melalui testkitchen.


Sedikit petunjuk


 [root@vm-oracle vagrant]# getent ahosts vm-oracle 127.0.0.1 STREAM vm-oracle 127.0.0.1 DGRAM 127.0.0.1 RAW [root@vm-oracle vagrant]# getent ahosts vm-oracle. fe80::a00:27ff:febd:bd6a STREAM vm-oracle fe80::a00:27ff:febd:bd6a DGRAM fe80::a00:27ff:febd:bd6a RAW 10.0.2.15 STREAM 10.0.2.15 DGRAM 10.0.2.15 RAW [root@oracle vagrant]# getent ahosts oracle.example.com. 192.168.128.182 STREAM oracle.example.local 192.168.128.182 DGRAM 192.168.128.182 RAW 

Adakah yang tahu apa yang sedang terjadi?


Itu adalah skenario yang menyenangkan:


  1. Kami mengaktifkan pengikatan IPv4 hanya di pengaturan pendengar oracle.
  2. oracle menggunakan FQDN.
  3. linux mengandung basis khusus "myhostname" untuk menyelesaikan nama domain, itu digunakan setelah / etc / hosts & dns server.
  4. Vagrant menciptakan VM & pembaruan /etc/hosts .

Saya akan menjelaskan sedikit:
Apa yang terjadi jika vm-oracle ?


  1. gelandangan menciptakan mesin virtual.
  2. pembaruan gelandangan /etc/hosts ( vm-oracle x2)
  3. oracle listener mendengarkan IPv4.
  4. pendengar oracle menyelesaikan nama domain vm-oracle. & mendapat IPv6.
  5. GAGAL

Apa yang terjadi dalam kasus vm-oracle. ?


  1. gelandangan menciptakan mesin virtual.
  2. pembaruan gelandangan / etc / hosts ( vm-oracle & vm-oracle. )
  3. oracle listener mendengarkan IPv4.
  4. pendengar oracle menyelesaikan nama domain vm-oracle. & mendapat IPv4
  5. Ok

OOM datang mengunjungi kami


OOM membunuh mesin virtual secara acak. Testkitchen pada saat yang sama memberikan semua jenis pesan aneh di log-nya.


Solusi: Tambah jumlah memori.


Build lambat


Seluruh skema ini bekerja lambat, selama puluhan menit, kadang-kadang lebih dari satu jam.


Solusi:


  • Packer . Preassemble gambar mesin virtual.
  • Jalankan beberapa test case secara paralel

Kesimpulan


Jika kita mengatakan bahwa infrastruktur adalah kode, maka filosofi yang sama harus diterapkan pada pembuatannya seperti untuk pengembangan perangkat lunak. Di satu sisi, kami mendapat solusi yang berfungsi, tetapi ada beberapa momen yang tidak menyenangkan:


  • Tidak ramah, semuanya terlihat.
  • Campuran ruby ​​& python.
  • Tidak ada peran pemeriksaan dan peran.
  • Ini bekerja lambat.
  • Sulit ....

Pada outputnya, molekul dengan buruh pelabuhan terlihat menarik dan lebih asli. Kami sedang memikirkannya.


Referensi


Source: https://habr.com/ru/post/id437004/


All Articles