ProHoster > blog > Gweinyddiaeth > Cyfarwyddiadau: sut i brofi rolau synhwyrol a chael gwybod am broblemau cyn cynhyrchu
Cyfarwyddiadau: sut i brofi rolau synhwyrol a chael gwybod am broblemau cyn cynhyrchu
Helo bawb!
Rwy'n gweithio fel peiriannydd DevOps mewn gwasanaeth archebu gwesty. Ostrovok.ru. Yn yr erthygl hon, rwyf am siarad am ein profiad o brofi rolau asible.
Yn Ostrovok.ru, rydym yn defnyddio ansible fel rheolwr cyfluniad. Yn ddiweddar, daethom at yr angen i brofi rolau, ond fel y digwyddodd, nid oes cymaint o offer ar gyfer hyn - y mwyaf poblogaidd, efallai, yw'r fframwaith Moleciwl, felly fe benderfynon ni ei ddefnyddio. Ond mae'n troi allan bod ei ddogfennaeth yn dawel am lawer o beryglon. Ni allem ddod o hyd i lawlyfr digon manwl yn Rwsieg, felly penderfynasom ysgrifennu'r erthygl hon.
Moleciwlaidd
Moleciwl - fframwaith i helpu i brofi rolau anible.
Disgrifiad symlach: Mae'r moleciwl yn creu enghraifft ar y platfform rydych chi'n ei nodi (cwmwl, peiriant rhithwir, cynhwysydd; am ragor o fanylion, gweler yr adran gyrrwr), yn rhedeg eich rôl arno, yna'n rhedeg profion ac yn dileu'r enghraifft. Mewn achos o fethiant ar un o'r camau, bydd y Moleciwl yn eich hysbysu amdano.
Nawr mwy.
Darn o theori
Ystyriwch ddau endid allweddol yn y Moleciwl: Senario a Driver.
Senario
Mae'r sgript yn cynnwys disgrifiad o beth, ble, sut ac ym mha ddilyniant fydd yn cael ei berfformio. Gall un rôl gael sawl sgript, ac mae pob un yn gyfeiriadur ar hyd y llwybr <role>/molecule/<scenario>, sy'n cynnwys disgrifiadau o'r camau gweithredu sy'n ofynnol ar gyfer y prawf. Rhaid cynnwys y sgript default, a fydd yn cael ei greu yn awtomatig os byddwch yn cychwyn y rôl gyda Moleciwl. Chi sydd i benderfynu ar enwau'r sgriptiau canlynol.
Gelwir y dilyniant o weithredoedd profi mewn sgript matrics, ac yn ddiofyn dyma yw:
(Camau wedi'u labelu ?, wedi'i hepgor yn ddiofyn os na chaiff ei nodi gan y defnyddiwr)
lint - linters rhedeg. Yn ddiofyn yn cael eu defnyddio yamllint и flake8,
destroy - dileu enghreifftiau o lansiad diwethaf y Moleciwl (os o gwbl),
dependency? — gosod dibyniaeth aswy y rôl a brofwyd,
syntax - gwirio cystrawen y rôl gan ddefnyddio ansible-playbook --syntax-check,
create - creu enghraifft,
prepare? — paratoi'r enghraifft; e.e. gwirio/gosod python2
converge — lansiad y llyfr chwarae sy'n cael ei brofi,
idempotence - ailgychwyn y llyfr chwarae ar gyfer y prawf analluedd,
side_effect? - gweithredoedd nad ydynt yn uniongyrchol gysylltiedig â'r rôl, ond sy'n angenrheidiol ar gyfer profion,
verify - rhedeg profion y cyfluniad canlyniadol gan ddefnyddio testinfra(diofyn) /goss/inspec,
cleanup? - (mewn fersiynau newydd) - yn fras, "glanhau" y seilwaith allanol y mae'r Moleciwl yn effeithio arno,
destroy - Dileu enghraifft.
Mae'r dilyniant hwn yn cwmpasu'r rhan fwyaf o achosion, ond gellir ei newid os oes angen.
Gellir rhedeg pob un o'r camau uchod ar wahân gyda molecule <command>. Ond dylid deall y gall fod ei ddilyniant ei hun o gamau gweithredu ar gyfer pob cli-orchymyn o'r fath, y gallwch chi ei ddarganfod trwy weithredu molecule matrix <command>. Er enghraifft, wrth redeg y gorchymyn converge (gan redeg y llyfr chwarae dan brawf), bydd y gweithredoedd canlynol yn cael eu perfformio:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Gellir golygu dilyniant y gweithredoedd hyn. Os oes rhywbeth o'r rhestr eisoes wedi'i wneud, bydd yn cael ei hepgor. Y cyflwr presennol, yn ogystal â chyfluniad yr achosion, mae'r Molecule yn storio yn y cyfeiriadur $TMPDIR/molecule/<role>/<scenario>.
Ychwanegu camau gyda ? gallwch ddisgrifio'r gweithredoedd dymunol yn y fformat llyfr chwarae ansible, a gwneud enw'r ffeil yn ôl y cam: prepare.yml/side_effect.yml. Disgwyl y ffeiliau hyn Bydd y moleciwl yn y ffolder sgript.
gyrrwr
Mae gyrrwr yn endid lle mae achosion prawf yn cael eu creu.
Mae'r rhestr o yrwyr safonol y mae gan Molecule dempledi yn barod ar eu cyfer fel a ganlyn: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Dirprwyedig.
Yn y rhan fwyaf o achosion, mae templedi yn ffeiliau create.yml и destroy.yml yn y ffolder sgript sy'n disgrifio creu a dileu enghraifft, yn y drefn honno.
Yr eithriadau yw Docker a Vagrant, gan y gall rhyngweithio â'u modiwlau ddigwydd heb y ffeiliau a grybwyllwyd uchod.
Mae'n werth tynnu sylw at y gyrrwr dirprwyedig, oherwydd os caiff ei ddefnyddio yn y ffeiliau ar gyfer creu a dileu enghraifft, dim ond gwaith gyda chyfluniad achosion a ddisgrifir, dylai'r peiriannydd ddisgrifio'r gweddill.
Y gyrrwr diofyn yw Docker.
Nawr, gadewch i ni symud ymlaen i ymarfer ac ystyried nodweddion pellach yno.
Dechrau Arni
Fel "byd helo", gadewch i ni brofi rôl gosod nginx syml. Gadewch i ni ddewis docwr fel y gyrrwr - rwy'n credu bod y rhan fwyaf ohonoch wedi ei osod (a chofiwch mai docwr yw'r gyrrwr rhagosodedig).
Y cam nesaf yw cychwyn y rôl newydd.
Mae cychwyn rôl newydd, yn ogystal â sgript newydd, yn cael ei berfformio gan ddefnyddio'r gorchymyn 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
Mae'n troi allan rôl arferol asible-. Ymhellach, mae pob rhyngweithiad â Moleciwlau CLI yn cael ei wneud o wraidd y rôl.
Gawn ni weld beth sydd yn y cyfeiriadur rôl:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Gadewch i ni ddadansoddi'r ffurfwedd molecule/default/molecule.yml (disodli delwedd docwr yn unig):
Cragen orchymyn yn unig yw Shell a ddefnyddir rhag ofn na fydd galaeth a gilt yn diwallu'ch anghenion.
Ni fyddaf yn trigo yma am amser hir, mae'n ddigon a ddisgrifir yn dogfennaeth.
gyrrwr
Enw'r gyrrwr. Ein un ni yw docker.
lliain
Yamllint yw'r linter.
Opsiynau defnyddiol yn y rhan hon o'r ffurfweddiad yw'r gallu i nodi ffeil ffurfweddu ar gyfer yamllint, newidynnau amgylchedd ymlaen, neu analluogi'r linter:
Yn disgrifio cyfluniad yr achosion.
Yn achos docwr fel gyrrwr, ailadroddir y Moleciwl dros yr adran hon, ac mae pob elfen o'r rhestr ar gael yn Dockerfile.j2 fel newidyn item.
Yn achos gyrrwr sy'n gofyn create.yml и destroy.yml, y mae yr adran ar gael ynddynt fel molecule_yml.platforms, ac iteriadau drosto eisoes wedi'u disgrifio yn y ffeiliau hyn.
Gan fod y Moleciwl yn darparu rheolaeth ar achosion i fodiwlau asible, dylid edrych am y rhestr o leoliadau posibl yno hefyd. Ar gyfer docwr, er enghraifft, defnyddir y modiwl docker_container_modiwl. Gellir dod o hyd i ba fodiwlau a ddefnyddir mewn gyrwyr eraill dogfennaeth.
Yn ogystal ag enghreifftiau o'r defnydd o yrwyr amrywiol i'w gweld yn mhrofion y Moleciwl ei hun.
Amnewid yma centos: 7 ar ubuntu.
darparydd
"Cyflenwr" - endid sy'n rheoli achosion. Yn achos Moleciwl, mae hyn yn ansible, nid yw cefnogaeth i eraill wedi'i gynllunio, felly gellir galw'r adran hon yn gyfluniad estynedig ansible gyda chafeat.
Yma gallwch chi nodi llawer o bethau, byddaf yn tynnu sylw at y prif bwyntiau, yn fy marn i:
llyfrau chwarae: gallwch nodi pa lyfrau chwarae y dylid eu defnyddio ar adegau penodol.
Enw a disgrifiad o ddilyniannau sgript.
Gallwch newid matrics gweithredu diofyn unrhyw orchymyn trwy ychwanegu'r allwedd <command>_sequence ac fel gwerth iddo trwy ddiffinio'r rhestr o gamau sydd eu hangen arnom.
Gadewch i ni ddweud ein bod am newid y dilyniant o gamau gweithredu wrth redeg y gorchymyn rhedeg llyfr chwarae: molecule converge
Profwyd ein rôl syml heb broblemau.
Mae'n werth cofio os oes problemau yn ystod y gwaith molecule test, yna os na wnaethoch chi newid y dilyniant rhagosodedig, bydd y Moleciwl yn dileu'r enghraifft.
Mae'r gorchmynion canlynol yn ddefnyddiol ar gyfer dadfygio:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Rôl Bresennol
Mae ychwanegu sgript newydd at rôl sy'n bodoli eisoes yn o'r cyfeiriadur rôl gyda'r gorchmynion canlynol:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Rhag ofn mai dyma'r senario cyntaf yn y rôl, yna'r paramedr -s gellir ei hepgor gan y bydd yn creu sgript default.
Casgliad
Fel y gallwch weld, nid yw'r Moleciwl yn gymhleth iawn, a thrwy ddefnyddio'ch templedi eich hun, gellir lleihau defnyddio sgript newydd i olygu newidynnau wrth greu a dileu llyfrau chwarae enghreifftiau. Mae'r moleciwl yn integreiddio'n ddi-dor â systemau CI, sy'n eich galluogi i gynyddu cyflymder datblygiad trwy leihau'r amser ar gyfer profi llyfrau chwarae â llaw.
Diolch am eich sylw. Os oes gennych brofiad o brofi rolau asible, ac nid yw'n gysylltiedig â'r Moleciwl, dywedwch wrthym amdano yn y sylwadau!