Wiwit saka komit kapindho, kode apa wae dadi warisan, amarga gagasan awal wiwit diverge saka kasunyatan atos. Iki ora apik utawa ala, iku diwenehi sing angel kanggo mbantah lan kudu urip. Bagéyan saka proses iki yaiku refactoring. Infrastruktur Refactoring minangka Kode. Ayo crita diwiwiti babagan cara refactor Ansible sajrone setaun lan ora dadi edan.
Lair Warisan
Dina # 1: Pasien Zero
Biyen ana proyek bersyarat. Dheweke duwe tim pangembangan Dev lan insinyur Ops. Dheweke ngrampungake masalah sing padha: carane nyebarake server lan mbukak aplikasi. Masalahe yaiku saben tim ngrampungake masalah iki kanthi cara dhewe. Ing proyek kasebut, diputusake nggunakake Ansible kanggo nyinkronake kawruh antarane tim Dev lan Ops.
Dina # 89: Lair saka Warisan
Tanpa nggatekake dhewe, dheweke kepengin nindakake kanthi paling apik, nanging dadi warisan. Kepiye kedadeyan iki?
Kita duwe tugas urgent kene, ayo padha hack reged lan banjur ndandani.
Sampeyan ora kudu nulis dokumentasi lan kabeh wis jelas apa sing kedadeyan ing kene.
Aku ngerti Ansible/Python/Bash/Terraform! Delengen carane aku bisa ngindari!
Aku Full Stack Overflow Developer lan disalin saka stackoverflow, Aku ora ngerti cara kerjane, nanging katon kelangan lan solves masalah.
Akibaté, sampeyan bisa entuk jinis kode sing ora bisa dingerteni sing ora ana dokumentasi, ora jelas apa sing ditindakake, apa perlu, nanging masalahe sampeyan kudu ngembangake, ngowahi, nambah crutches lan ndhukung. , nggawe kahanan luwih elek.
Model IaC sing wiwitane disusun lan dileksanakake ora nyukupi syarat pangguna / bisnis / tim liyane, lan wektu kanggo ngganti infrastruktur ora bisa ditampa. Ing wayahe, pangerten teka yen wektune kanggo tumindak.
refactoring IaC
Dina # 139: Apa sampeyan pancene mbutuhake refactoring?
Sadurunge cepet-cepet refactor, sampeyan kudu mangsuli sawetara pitakonan penting:
Napa sampeyan butuh kabeh iki?
Apa sampeyan duwe wektu?
Apa kawruh cukup?
Yen sampeyan ora ngerti carane mangsuli pitakonan, banjur refactoring bakal mungkasi sadurunge malah diwiwiti, utawa mung bisa dadi luwih elek. Amarga wis pengalaman ( Apa Aku Sinau saka Nguji 200 Baris Kode Infrastruktur), banjur proyek kasebut njaluk bantuan kanggo ndandani peran lan nutupi tes.
Dina # 149: Nyiapake refactoring
Sing pertama yaiku nyiyapake. Temtokake apa sing bakal kita lakoni. Kanggo nindakake iki, kita komunikasi, nemokake wilayah masalah lan nemtokake cara kanggo ngatasi. Kita ngrekam konsep sing diasilake, umpamane artikel ing confluence, supaya nalika ana pitakonan "apa sing paling apik?" utawa "sing bener?" Kita ora kesasar. Ing kasus kita, kita macet ing idea dibagi lan aturan: kita break munggah infrastruktur menyang bêsik cilik / bata. Pendekatan iki ngidini sampeyan njupuk prasarana sing terisolasi, ngerti apa sing ditindakake, nutupi tes lan ngganti tanpa wedi ngrusak apa-apa.
Pranyata tes infrastruktur dadi landasan lan ing kene kudu dicritakake piramida tes infrastruktur. Persis ide sing padha ing pembangunan, nanging kanggo infrastruktur: kita pindhah saka tes cepet murah sing mriksa barang-barang sing prasaja, kayata indentasi, menyang tes lengkap sing larang sing nyebarake kabeh infrastruktur.
Uji coba sing bisa ditindakake
Sadurunge kita njlèntrèhaké carane kita nutupi tes Ansible ing project, Aku bakal njlèntrèhaké usaha lan pendekatan sing aku duwe kesempatan kanggo nggunakake sadurungé supaya ngerti konteks saka pancasan digawe.
Dina No.. -997: panentu SDS
Pisanan aku nyoba Ansible ana ing proyek kanggo ngembangake SDS (Software Defined Storage). Ana artikel kapisah babagan topik iki Carane break pit liwat crutches nalika nyoba distribusi Panjenengan, nanging ing cendhak, kita rampung munggah karo piramida testing kuwalik lan testing kita nglampahi 60-90 menit ing siji peran, kang dangu. Basis ana tes e2e, yaiku. kita masang instalasi lengkap lan banjur dites. Sing luwih nggegirisi yaiku panemune sepedha dhewe. Nanging aku kudu ngakeni, solusi iki makarya lan diijini kanggo release stabil.
Dina # -701: Ansible lan pawon test
Pangrembakane ide uji Ansible yaiku nggunakake piranti sing wis siap, yaiku pawon uji/pawon-ci lan inspec. Pilihan kasebut ditemtokake dening kawruh babagan Ruby (kanggo rincian liyane, deleng artikel babagan Habré: Apa programer YML ngimpi nguji Ansible?) bisa luwih cepet, kira-kira 40 menit kanggo 10 peran. Kita nggawe paket mesin virtual lan nglakokake tes ing njero.
Umumé, solusi kasebut bisa digunakake, nanging ana sawetara endapan amarga heterogenitas. Nalika jumlah wong sing dites ditambah dadi 13 peran dhasar lan 2 peran meta sing nggabungake peran sing luwih cilik, banjur dumadakan tes wiwit mlaku nganti 70 menit, sing meh 2 kaping luwih suwe. Iku angel ngomong babagan praktik XP (pemrograman ekstrem) amarga ... ora ana sing pengin ngenteni 70 menit. Iki minangka alesan kanggo ngganti pendekatan
Dina # -601: Ansible lan molekul
Conceptually, iki padha testkitchen, mung kita dipindhah testing peran kanggo docker lan ngganti tumpukan. Akibaté, wektu suda dadi stabil 20-25 menit kanggo 7 peran.
Kanthi nambah nomer dites peran kanggo 17 lan linting 45 peran, kita mlayu iki ing 28 menit ing 2 babu jenkins.
Dina # 167: Nambahake tes Ansible menyang proyek kasebut
Paling kamungkinan, ora bakal bisa nindakake tugas refactoring kanthi cepet. Tugas kasebut kudu bisa diukur supaya bisa dipecah dadi potongan-potongan cilik lan mangan potongan gajah kanthi sendok teh. Mesthi ana pangerten apa sampeyan pindhah menyang arah sing bener, suwene suwene.
Umumé, ora ketompo carane bakal ditindakake, sampeyan bisa nulis ing kertas, sampeyan bisa masang stiker ing lemari, sampeyan bisa nggawe tugas ing Jira, utawa sampeyan bisa mbukak Google Docs lan nulis status saiki. ing kono. Sikil tuwuh saka kasunyatan manawa proses kasebut ora langsung, bakal dawa lan mboseni. Ora mungkin ana sing pengin sampeyan ngobong ide, kesel, lan kewalahan sajrone refactoring.
Refactoring punika prasaja:
Mangan.
Turu.
Kode
tes IaC.
Baleni
lan kita mbaleni iki nganti kita tekan goal dimaksudaké.
Sampeyan bisa uga ora bisa langsung nyoba kabeh, mula tugas pisanan kita yaiku miwiti linting lan mriksa sintaksis.
Dina # 181: Ijo Mbangun Master
Linting minangka langkah pisanan cilik menyang Green Build Master. Iki ora bakal ngrusak meh kabeh, nanging ngidini sampeyan debug pangolahan lan nggawe bangunan ijo ing Jenkins. Ide kasebut yaiku ngembangake kabiasaan ing antarane tim:
Tes abang ora apik.
Aku teka kanggo ndandani soko lan ing wektu sing padha nggawe kode luwih apik tinimbang sadurunge sampeyan.
Dina # 193: Saka linting nganti tes unit
Sawise nggawe proses njupuk kode menyang master, sampeyan bisa miwiti proses dandan langkah-langkah - ngganti linting kanthi peran peluncuran, sampeyan bisa nindakake tanpa idempotensi. Sampeyan kudu ngerti carane ngetrapake peran lan cara kerjane.
Dina # 211: Saka unit nganti tes integrasi
Nalika paling peran dijamin karo tes unit lan kabeh wis lint, sampeyan bisa nerusake kanggo nambah tes integrasi. Sing. testing ora bata siji ing infrastruktur, nanging kombinasi mau, Contone, konfigurasi Kayata lengkap.
Nggunakake jenkins, kita kui akeh orane tumrap sekolah sing lited peran / playbooks ing podo karo, banjur unit test ing kontaner, lan pungkasanipun tes integrasi.
Jenkins + Docker + Ansible = Tes
Priksa repo lan ngasilake tahapan mbangun.
Jalanake tahapan playbook lint kanthi paralel.
Jalanake tahapan peran lint kanthi paralel.
Mbukak sintaks mriksa tataran peran ing podo karo.
Jalanake tahapan peran uji kanthi podo karo.
Peran linting.
Priksa katergantungan ing peran liyane.
Priksa sintaks.
Nggawe conto docker
Mlaku molecule/default/playbook.yml.
Priksa idempotensi.
Jalanake tes integrasi
Rampung
Dina # 271: Faktor Bus
Ing wiwitan, refactoring ditindakake dening sekelompok cilik loro utawa telu wong. Dheweke mriksa kode ing master. Sajrone wektu, tim ngembangake kawruh babagan carane nulis kode lan review kode nyumbang kanggo nyebarake kawruh babagan infrastruktur lan cara kerjane. Sorotan ing kene yaiku para pamawas dipilih siji-siji, miturut jadwal, yaiku. karo sawetara jurusan kamungkinan sampeyan bakal menek menyang Piece anyar saka infrastruktur.
Lan kudu nyaman ing kene. Iku trep kanggo nindakake review, ndeleng ing framework apa tugas wis rampung, lan sajarah diskusi. Kita wis nggabungake jenkins + bitbucket + jira.
Nanging kaya ngono, review dudu panacea; piye wae, kita entuk kode master, sing nggawe tes gagal:
Sajrone wektu, ana luwih akeh tes, mbangun luwih alon, nganti sejam ing kasus sing paling ala. Ing salah sawijining retro ana tembung kaya "iku apik yen ana tes, nanging alon." Akibaté, kita nilar tes integrasi ing mesin virtual lan dicocogake kanggo Docker supaya luwih cepet. Kita uga ngganti testinfra karo verifier ansible kanggo nyuda jumlah alat sing digunakake.
Tegese, ana sawetara langkah:
Ngalih menyang docker.
Mbusak pangujian peran, sing diduplikasi amarga dependensi.
Tambah cacahe batur tukon.
Urutan test run.
Kemampuan kanggo lint KABEH lokal karo siji printah.
Akibaté, Pipeline ing jenkins uga manunggal
Nggawe tahapan mbangun.
Lint kabeh ing podo karo.
Jalanake tahapan peran uji kanthi podo karo.
Rampung.
Pawulangan sinau
Ngindhari variabel global
Ansible nggunakake variabel global, ana solusi parsial ing formulir kasebut private_role_vars, nanging iki dudu panacea.
Ayo kula menehi conto. Ayo kita duwe role_a и role_b
Sing lucu yaiku asil playbook bakal gumantung marang perkara-perkara sing ora mesthi jelas, kayata urutan peran kasebut. Sayange, iki sifat Ansible lan sing paling apik sing bisa ditindakake yaiku nggunakake sawetara persetujuan, umpamane, ing peran, mung nggunakake variabel sing diterangake ing peran iki.
GOOD: Ing peran kanggo variabel, gunakake variabel sing diawali karo jeneng peran; iki, kanthi ndeleng inventaris, bakal luwih gampang ngerti apa sing kedadeyan.
Kita sarujuk nggunakake awalan variabel; ora perlu kanggo mriksa manawa wis ditetepake kaya sing dikarepake lan, contone, ora diganti karo nilai kosong.
GOOD: Priksa variabel.
- name: "Verify that required string variables are defined"
assert:
that: ahs_var is defined and ahs_var | length > 0 and ahs_var != None
fail_msg: "{{ ahs_var }} needs to be set for the role to work "
success_msg: "Required variables {{ ahs_var }} is defined"
loop_control:
loop_var: ahs_var
with_items:
- ahs_item1
- ahs_item2
- ahs_item3
Ngindhari kamus hash, gunakake struktur sing rata
Yen peran ngarepake hash / kamus ing salah sawijining paramèter, banjur yen kita pengin ngganti salah sawijining parameter anak, kita kudu ngilangi kabeh hash / kamus, sing bakal nambah kerumitan konfigurasi.
Peran lan playbook kudu idempoten, amarga nyuda drift konfigurasi lan wedi bejat soko. Nanging yen sampeyan nggunakake molekul, banjur iki prilaku standar.
Aja nggunakake modul shell printah
Nggunakake modul cangkang ngasilake paradigma deskripsi imperatif, tinimbang sing deklaratif, sing dadi inti saka Ansible.
Tes peran sampeyan liwat molekul
Molekul minangka barang sing fleksibel, ayo ndeleng sawetara skenario.
Molekul Multiple kedadean
В molecule.yml ing bagean platforms sampeyan bisa njlèntrèhaké akeh sarwa dumadi sing bisa masang.
Ing molekul, sampeyan bisa nggunakake ansible kanggo mriksa manawa conto wis dikonfigurasi kanthi bener, luwih-luwih, iki minangka standar wiwit rilis 3. Ora fleksibel kaya testinfra/inspec, nanging kita bisa mriksa manawa isi file cocog karo pangarepan kita:
Utawa masang layanan kasebut, ngenteni kasedhiya lan tindakake tes kumelun:
---
- name: Verify
hosts: solr
tasks:
- command: /blah/solr/bin/solr start -s /solr_home -p 8983 -force
- uri:
url: http://127.0.0.1:8983/solr
method: GET
status_code: 200
register: uri_result
until: uri_result is not failed
retries: 12
delay: 10
- name: Post documents to solr
command: /blah/solr/bin/post -c master /exampledocs/books.csv
Pasang logika kompleks menyang modul & plugin
Ansible nyengkuyung pendekatan deklaratif, mula nalika sampeyan nindakake percabangan kode, transformasi data, modul cangkang, kode kasebut dadi angel diwaca. Kanggo nglawan iki lan tetep gampang dingerteni, ora perlu kanggo nglawan kerumitan iki kanthi nggawe modul sampeyan dhewe.
Ringkesan Tips & Trik
Ngindhari variabel global.
Variabel peran awalan.
Gunakake variabel kontrol loop.
Priksa variabel input.
Ngindhari kamus hash, gunakake struktur sing rata.
Nggawe playbook idempotent & peran.
Aja nggunakake modul shell printah.
Tes peran sampeyan liwat molekul.
Pasang logika kompleks menyang modul & plugin.
kesimpulan
Sampeyan ora bisa mung pindhah lan refactor infrastruktur ing project, malah yen sampeyan duwe IaC. Iki minangka proses dawa sing mbutuhake kesabaran, wektu lan kawruh.
UPD1 2020.05.01 20:30 - Kanggo profil utama playbooks sampeyan bisa nggunakake callback_whitelist = profile_tasks kanggo ngerti apa persis bisa kanggo dangu. Banjur kita liwat Klasik akselerasi Ansible. Sampeyan uga bisa nyoba mitogen UPD2 2020.05.03 16:34 - Versi Inggris