ProHoster > blog > Utawala > Maelekezo: jinsi ya kupima majukumu yanayofaa na kujua kuhusu matatizo kabla ya uzalishaji
Maelekezo: jinsi ya kupima majukumu yanayofaa na kujua kuhusu matatizo kabla ya uzalishaji
Hello kila mtu!
Ninafanya kazi kama mhandisi wa DevOps kwa huduma ya kuweka nafasi kwenye hoteli. Ostrovok.ru. Katika makala hii nataka kuzungumza juu ya uzoefu wetu katika kupima majukumu Ansible.
Katika Ostrovok.ru tunatumia ansible kama meneja wa usanidi. Hivi majuzi tulikuja kwa hitaji la kujaribu majukumu, lakini, kama ilivyotokea, hakuna zana nyingi za hii - maarufu zaidi, labda, ni mfumo wa Molekuli, kwa hivyo tuliamua kuitumia. Lakini ikawa kwamba nyaraka zake haziko kimya juu ya mitego mingi. Hatukuweza kupata mwongozo wa kina wa kutosha kwa Kirusi, kwa hiyo tuliamua kuandika makala hii.
molekuli
Molekuli - mfumo wa kusaidia kupima majukumu yanayofaa.
Maelezo yaliyorahisishwa: Molekuli huunda mfano kwenye jukwaa unalobainisha (wingu, mashine pepe, chombo; kwa maelezo zaidi, angalia sehemu. Dereva), huendesha jukumu lako juu yake, kisha huendesha majaribio na kufuta mfano. Ikiwa kuna kutofaulu katika moja ya hatua, Molekuli itakuarifu kuihusu.
Sasa zaidi.
Nadharia kidogo
Hebu tuzingatie vyombo viwili muhimu vya Molekuli: Igizo na Dereva.
Hali
Hati ina maelezo ya nini, wapi, jinsi gani na katika mlolongo gani utafanywa. Jukumu moja linaweza kuwa na maandishi kadhaa, na kila moja ni saraka kando ya njia <role>/molecule/<scenario>, iliyo na maelezo ya vitendo vinavyohitajika kwa mtihani. Lazima kuwe na hati default, ambayo itaundwa kiotomatiki ikiwa utaanzisha jukumu kwa kutumia Molekuli. Majina ya hati zifuatazo yako kwa hiari yako.
Mlolongo wa vitendo vya upimaji katika hati huitwa tumbo, na kwa chaguo-msingi ni kama hii:
(Hatua zilizowekwa alama ?, kurukwa kwa chaguo-msingi ikiwa haijabainishwa na mtumiaji)
lint - linters zinazoendesha. Kwa chaguo-msingi yamllint и flake8,
destroy - kufuta matukio kutoka kwa uzinduzi wa mwisho wa Molekuli (ikiwa itasalia),
dependency? - kusanikisha utegemezi unaowezekana wa jukumu lililojaribiwa,
syntax - kuangalia sintaksia ya jukumu kwa kutumia ansible-playbook --syntax-check,
create - kuunda mfano,
prepare? - kuandaa mfano; kwa mfano kuangalia/kusakinisha python2
converge - kuzindua kitabu cha kucheza kilichojaribiwa,
idempotence - endesha tena kitabu cha kucheza kwa mtihani wa kutokuwa na uwezo,
side_effect? - vitendo ambavyo havihusiani moja kwa moja na jukumu, lakini ni muhimu kwa vipimo;
verify — inaendesha majaribio ya usanidi unaotokana kwa kutumia testinfra(chaguo-msingi) /goss/inspec,
cleanup? - (katika matoleo mapya) - kwa kusema, "kusafisha" miundombinu ya nje iliyoathiriwa na Molekuli,
destroy - kufuta mfano.
Mlolongo huu unashughulikia kesi nyingi, lakini unaweza kurekebishwa ikiwa ni lazima.
Kila moja ya hatua zilizo hapo juu zinaweza kuendeshwa tofauti kwa kutumia molecule <command>. Lakini unapaswa kuelewa kuwa kwa kila amri kama hiyo kunaweza kuwa na mlolongo wake wa vitendo, ambao unaweza kujua kwa kukimbia. molecule matrix <command>. Kwa mfano, wakati wa kuendesha amri converge (kuendesha kitabu cha kucheza kilichojaribiwa) vitendo vifuatavyo vitafanywa:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Mlolongo wa vitendo hivi unaweza kuhaririwa. Ikiwa kitu kutoka kwenye orodha tayari kimekamilika, kitarukwa. Hali ya sasa, pamoja na usanidi wa mfano, huhifadhiwa kwenye saraka ya Molekuli $TMPDIR/molecule/<role>/<scenario>.
Ongeza hatua na ? Unaweza kuelezea vitendo unavyotaka katika umbizo la kitabu cha kucheza cha Ansible, na utengeneze jina la faili kulingana na hatua: prepare.yml/side_effect.yml. Tarajia faili hizi za Molekuli kuwa kwenye folda ya hati.
Dereva
Dereva ni huluki ambapo matukio ya majaribio yanaundwa.
Orodha ya viendeshi vya kawaida ambavyo Molekuli ina violezo vilivyotengenezwa tayari ni: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Katika hali nyingi, templates ni faili create.yml и destroy.yml kwenye folda ya maandishi, ambayo inaelezea uundaji na ufutaji wa mfano, mtawaliwa.
Isipokuwa ni Docker na Vagrant, kwani mwingiliano na moduli zao unaweza kutokea bila faili zilizo hapo juu.
Inafaa kuangazia dereva aliyekabidhiwa, kwani ikiwa inatumiwa, ni kazi tu iliyo na usanidi wa mfano inavyoelezewa katika mfano wa uundaji na faili za kufuta; iliyobaki inapaswa kuelezewa na mhandisi.
Dereva chaguo-msingi ni Docker.
Sasa hebu tuendelee kufanya mazoezi na kuzingatia vipengele zaidi hapo.
Anza
Kama "ulimwengu wa habari" tutajaribu jukumu rahisi la usakinishaji wa nginx. Wacha tuchague kizimbani kama dereva - nadhani wengi wako wameisakinisha (na kumbuka kuwa kizimbani ndio kiendesha chaguo-msingi).
RџRѕRґRіRѕS, RѕRІReRј virtualenv na usakinishe ndani yake molecule:
Hatua inayofuata ni kuanzisha jukumu jipya.
Uanzishaji wa jukumu jipya, pamoja na hati mpya, unafanywa kwa kutumia amri 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
Matokeo yake ni jukumu la kawaida linalofaa. Zaidi ya hayo, mwingiliano wote na Molekuli CLI hufanywa kutoka kwa mzizi wa jukumu.
Wacha tuone ni nini kwenye saraka ya jukumu:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Wacha tuangalie usanidi molecule/default/molecule.yml (tutabadilisha tu picha ya kizimbani):
Inaelezea usanidi wa matukio.
Katika kesi ya docker kama dereva, Molekuli inasisitiza juu ya sehemu hii, na kila kipengele cha orodha kinapatikana katika Dockerfile.j2 kama kigeugeu item.
Katika kesi ya dereva ambayo create.yml и destroy.yml, sehemu hiyo inapatikana ndani yao kama molecule_yml.platforms, na marudio juu yake tayari yameelezewa katika faili hizi.
Kwa kuwa Molekuli hutoa usimamizi wa mfano kwa moduli Ansible, unapaswa kutafuta orodha ya mipangilio inayowezekana hapo. Kwa Docker, kwa mfano, moduli hutumiwa moduli_ya_chombo. Ni moduli gani zinazotumiwa katika viendeshi vingine zinaweza kupatikana ndani nyaraka.
Unaweza pia kupata mifano ya kutumia madereva mbalimbali katika vipimo vya Molekuli yenyewe.
Hebu tubadilishe hapa senti:7 juu ya ubuntu.
mtoaji
"Mtoa huduma" ni huluki inayosimamia matukio. Kwa upande wa Molekuli, hii inastahili; usaidizi kwa wengine haujapangwa, kwa hivyo sehemu hii inaweza, kwa kuweka nafasi, kuitwa usanidi uliopanuliwa.
Kuna mengi unaweza kutaja hapa, lakini nitaangazia mambo makuu, kwa maoni yangu:
vitabu vya kucheza: Unaweza kubainisha ni vitabu vipi vya kucheza vinafaa kutumika katika hatua fulani.
Kichwa na maelezo ya mfuatano wa hati.
Unaweza kubadilisha matrix chaguo-msingi ya amri kwa kuongeza kitufe <command>_sequence na kama thamani yake, ikifafanua orodha ya hatua tunazohitaji.
Wacha tuseme tunataka kubadilisha mlolongo wa vitendo wakati wa kuendesha amri ya kukimbia ya kitabu cha kucheza: molecule converge
Jukumu letu rahisi lilijaribiwa bila shida.
Inafaa kukumbuka kuwa ikiwa shida zinatokea wakati wa operesheni molecule test, basi ikiwa haukubadilisha mlolongo wa kawaida, Molekuli itafuta mfano.
Amri zifuatazo ni muhimu kwa utatuzi:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Jukumu lililopo
Kuongeza hati mpya kwa jukumu lililopo hutokea kutoka kwa saraka ya jukumu na amri zifuatazo:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Ikiwa hii ndiyo hati ya kwanza katika jukumu, basi parameta -s inaweza kuachwa kwani hati itaundwa default.
Hitimisho
Kama unavyoona, Molekuli sio ngumu sana, na unapotumia violezo vyako mwenyewe, unaweza kupunguza utumaji wa hati mpya ili kuhariri vijiti kwenye vitabu vya kucheza vya kuunda na kufuta matukio. Molekuli inaunganishwa bila mshono na mifumo ya CI, ambayo hukuruhusu kuongeza kasi ya ukuzaji kwa kupunguza muda wa majaribio ya mwongozo wa vitabu vya kucheza.
Asante kwa umakini wako. Ikiwa una uzoefu wa kupima majukumu yanayofaa, na haihusiani na Molekuli, tuambie kuhusu hilo kwenye maoni!