ProHoster > Blog > Stjórnsýsla > Leiðbeiningar: hvernig á að prófa hugsanleg hlutverk og finna út um vandamál fyrir framleiðslu
Leiðbeiningar: hvernig á að prófa hugsanleg hlutverk og finna út um vandamál fyrir framleiðslu
Halló allir!
Ég vinn sem DevOps verkfræðingur í hótelbókunarþjónustu. Ostrovok.ru. Í þessari grein vil ég tala um reynslu okkar af því að prófa hugsanleg hlutverk.
Á Ostrovok.ru notum við ansible sem stillingastjóra. Nýlega komumst við að þörfinni á að prófa hlutverk, en eins og það kom í ljós eru ekki svo mörg verkfæri fyrir þetta - vinsælast er kannski sameindaramminn, svo við ákváðum að nota það. En það kom í ljós að skjöl hans eru þögul um margar gildrur. Við gátum ekki fundið nægilega ítarlega handbók á rússnesku, svo við ákváðum að skrifa þessa grein.
Molecule
Sameind - ramma til að hjálpa til við að prófa hugsanleg hlutverk.
Einföld lýsing: Sameindin býr til tilvik á vettvangnum sem þú tilgreinir (ský, sýndarvél, ílát; fyrir frekari upplýsingar, sjá kaflann Bílstjóri), keyrir hlutverkið þitt á því, keyrir síðan próf og eyðir tilvikinu. Ef bilun verður á einu af þrepunum mun sameindin upplýsa þig um það.
Núna meira.
Smá kenning
Skoðum tvær lykileiningar sameindarinnar: atburðarás og ökumaður.
Atburðarás
Handritið inniheldur lýsingu á því hvað, hvar, hvernig og í hvaða röð verður flutt. Eitt hlutverk getur haft nokkur handrit og hvert er skrá meðfram leiðinni <role>/molecule/<scenario>, sem inniheldur lýsingar á þeim aðgerðum sem krafist er fyrir prófið. Handrit þarf að fylgja með default, sem verður sjálfkrafa til ef þú frumstillir hlutverkið með sameind. Nöfn eftirfarandi handrita eru undir þér komið.
Röð prófunaraðgerða í handriti er kölluð fylki, og sjálfgefið er það:
(Skref merkt ?, sleppt sjálfgefið ef það er ekki tilgreint af notanda)
lint - hlaupandi linters. Sjálfgefið er notað yamllint и flake8,
destroy - eyða tilvikum frá síðustu kynningu á sameindinni (ef einhver er),
dependency? — uppsetning á hugsanlegri ósjálfstæði prófunarhlutverksins,
syntax - athuga setningafræði hlutverksins með því að nota ansible-playbook --syntax-check,
create - búa til dæmi,
prepare? — undirbúningur dæmisins; td athuga/setja upp python2
converge — kynning á leikbókinni sem verið er að prófa,
idempotence - endurræsa leikbókina fyrir getuleysisprófið,
side_effect? - aðgerðir sem tengjast ekki hlutverkinu beint, en nauðsynlegar fyrir próf,
verify - keyra prófanir á stillingum sem myndast með því að nota testinfra(sjálfgefið) /goss/inspec,
cleanup? - (í nýjum útgáfum) - í grófum dráttum, að "hreinsa" ytri innviði sem verða fyrir áhrifum af sameindinni,
destroy - Eyðir tilviki.
Þessi röð nær yfir flest tilvik, en hægt er að breyta henni ef þörf krefur.
Hægt er að keyra hvert af ofangreindum skrefum sérstaklega með molecule <command>. En það ætti að skilja að fyrir hverja slíka cli-skipun getur verið eigin röð aðgerða, sem þú getur fundið út með því að framkvæma molecule matrix <command>. Til dæmis þegar skipunin er keyrð converge (að keyra leikbókina sem er í prófun), verða eftirfarandi aðgerðir gerðar:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Hægt er að breyta röð þessara aðgerða. Ef eitthvað af listanum er þegar gert verður því sleppt. Núverandi ástand, sem og stillingar tilvikanna, geymir sameindin í möppunni $TMPDIR/molecule/<role>/<scenario>.
Bættu skrefum við ? þú getur lýst þeim aðgerðum sem óskað er eftir á ansible-playbook sniðinu og búið til skráarnafnið í samræmi við skrefið: prepare.yml/side_effect.yml. Búast við þessum skrám. Sameindin verður í script möppunni.
Bílstjóri
Ökumaður er eining þar sem prófunartilvik eru búin til.
Listinn yfir staðlaða rekla sem Molecule hefur sniðmát tilbúin fyrir er sem hér segir: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Í flestum tilfellum eru sniðmát skrár create.yml и destroy.yml í forskriftarmöppunni sem lýsir stofnun og eyðingu tilviks, í sömu röð.
Undantekningarnar eru Docker og Vagrant, þar sem samskipti við einingar þeirra geta átt sér stað án fyrrnefndra skráa.
Það er þess virði að leggja áherslu á Delegated driverinn, þar sem ef hann er notaður í skránum til að búa til og eyða tilviki er aðeins vinnu með uppsetningu tilvika lýst, afganginum ætti verkfræðingur að lýsa.
Sjálfgefinn bílstjóri er Docker.
Nú skulum við halda áfram að æfa okkur og íhuga frekari eiginleika þar.
getting Started
Sem „halló heimur“ skulum við prófa einfalt nginx uppsetningarhlutverk. Við skulum velja docker sem driver - ég held að flestir séu með hann uppsettan (og mundu að docker er sjálfgefinn bílstjóri).
Næsta skref er að frumstilla nýja hlutverkið.
Frumstilling á nýju hlutverki, sem og nýju handriti, er framkvæmd með skipuninni molecule init <params>:
> molecule init role -r nginx
--> Initializing new role nginx...
Initialized role in <path>/nginx successfully.
> cd nginx
> tree -L 1
.
├── README.md
├── defaults
├── handlers
├── meta
├── molecule
├── tasks
└── vars
6 directories, 1 file
Það reyndist dæmigert ansible-hlutverk. Ennfremur eru öll samskipti við CLI sameindir gerð út frá rót hlutverksins.
Við skulum sjá hvað er í hlutverkaskránni:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Við skulum greina stillingarnar molecule/default/molecule.yml (skipta aðeins út bryggjumynd):
Skel er bara stjórnskel sem er notuð ef vetrarbraut og gylltur dekka ekki þarfir þínar.
Ég ætla ekki að dvelja hér lengi, það er nóg lýst í skjöl.
bílstjóri
Nafn ökumanns. Okkar er hafnarverkamaður.
ló
The linter er yamllint.
Gagnlegir valkostir í þessum hluta stillingarinnar eru hæfileikinn til að tilgreina stillingarskrá fyrir yamllint, framsenda umhverfisbreytur eða slökkva á linter:
Lýsir uppsetningu tilvikanna.
Ef um er að ræða docker sem ökumann er sameindin endurtekin yfir þennan hluta og hver þáttur listans er fáanlegur í Dockerfile.j2 sem breyta item.
Ef um er að ræða ökumann sem krefst create.yml и destroy.yml, hlutinn er fáanlegur í þeim sem molecule_yml.platforms, og endurtekningum yfir það er þegar lýst í þessum skrám.
Þar sem sameindin veitir stjórn á tilvikum til hugsanlegra eininga ætti einnig að leita að lista yfir mögulegar stillingar þar. Fyrir docker, til dæmis, er einingin notuð docker_container_module. Hvaða einingar eru notaðar í öðrum reklum má finna í skjöl.
Auk þess má finna dæmi um notkun ýmissa ökumanna í prófunum á sameindinni sjálfri.
Skiptu út hér centos: 7 á Ubuntu.
útvegsaðili
"Birgir" - aðili sem heldur utan um tilvik. Þegar um sameind er að ræða er þetta mögulegt, stuðningur við aðra er ekki fyrirhugaður, þannig að hægt er að kalla þennan hluta ansible útbreidda uppsetningu með fyrirvara.
Hér getur þú tilgreint margt, ég mun draga fram aðalatriðin, að mínu mati:
leikbækur: þú getur tilgreint hvaða leikrit á að nota á ákveðnum stigum.
Nafn og lýsing á handritaröðum.
Þú getur breytt sjálfgefna aðgerðafylki hvaða skipunar sem er með því að bæta lyklinum við <command>_sequence og sem gildi fyrir það með því að skilgreina lista yfir skref sem við þurfum.
Segjum að við viljum breyta röð aðgerða þegar keyrt er playbook run skipunina: molecule converge
Einfalt hlutverk okkar var prófað án vandræða.
Það er þess virði að muna að ef það eru vandamál í vinnunni molecule test, þá ef þú breyttir ekki sjálfgefna röðinni mun sameindin eyða tilvikinu.
Eftirfarandi skipanir eru gagnlegar fyrir villuleit:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Núverandi hlutverk
Að bæta nýju handriti við núverandi hlutverk er úr hlutverkaskránni með eftirfarandi skipunum:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Ef þetta er fyrsta atburðarás í hlutverkinu, þá færibreytan -s hægt að sleppa því þar sem það mun búa til handrit default.
Ályktun
Eins og þú sérð er sameindin ekki mjög flókin og með því að nota þín eigin sniðmát er hægt að minnka uppsetningu nýs handrits í að breyta breytum í leikbókum til að búa til og eyða tilvikum. Sameindin fellur óaðfinnanlega að CI kerfum, sem gerir þér kleift að auka hraða þróunar með því að draga úr tíma fyrir handvirkar prófanir á leikbókum.
Takk fyrir athyglina. Ef þú hefur reynslu af því að prófa hugsanleg hlutverk og það tengist ekki sameindinni, segðu okkur frá því í athugasemdunum!