Siku njema
Tuna makundi kadhaa ya wingu yenye idadi kubwa ya mashine pepe katika kila moja. Tunakaribisha biashara hii yote huko Hetzner. Katika kila kikundi tuna mashine moja kuu, muhtasari huchukuliwa kutoka kwayo na kusambazwa kiotomatiki kwa mashine zote pepe ndani ya nguzo.
Mpango huu hauturuhusu kutumia gitlab-runners kawaida, kwa kuwa matatizo mengi hutokea wakati wakimbiaji wengi wanaofanana waliosajiliwa wanaonekana, ambayo ilitusukuma kutafuta suluhisho na kuandika makala/mwongozo huu.
Labda hii sio mazoezi bora, lakini suluhisho hili lilionekana kuwa rahisi na rahisi iwezekanavyo.
Kwa mafunzo, tafadhali tazama paka.
Vifurushi vinavyohitajika kwenye mashine kuu:
- python
- git
- faili iliyo na funguo za ssh
Kanuni ya jumla ya kutekeleza kuvuta matumbo kiotomatiki kwenye mashine zote za kawaida ni kwamba unahitaji mashine ambayo Ansible itasakinishwa. Kutoka kwa mashine hii, ansible itatuma amri za git pull na kuanzisha upya huduma ambayo imesasishwa. Kwa madhumuni haya, tuliunda mashine tofauti ya kawaida nje ya nguzo na kusakinisha juu yake:
- python
- inayohusika
- gitlab-mkimbiaji
Kutoka kwa maswala ya shirika - unahitaji kusajili gitlab-runner, tengeneza ssh-keygen, pakia kitufe cha ssh cha umma cha mashine hii kwa .ssh/authorized_keys
kwenye mashine kuu, fungua bandari 22 kwa ansible kwenye mashine ya bwana.
Sasa hebu tusanidi inayowezekana
Kwa kuwa lengo letu ni kugeuza kila kitu kinachowezekana. Katika faili /etc/ansible/ansible.cfg
tutaondoa mstari host_key_checking = False
ili ansible isiombe uthibitisho wa mashine mpya.
Ifuatayo, unahitaji kutoa kiotomatiki faili ya hesabu kwa inayowezekana, kutoka ambapo itachukua ip ya mashine ambayo unahitaji kufanya git pull.
Tunatengeneza faili hii kwa kutumia API ya Hetzner, unaweza kuchukua orodha ya wapangishi kutoka kwa hifadhidata yako ya AWS, Asure (una API mahali fulani ili kuonyesha mashine zako zinazoendesha, sivyo?).
Muundo wa faili ya hesabu ni muhimu sana kwa Ansible; inapaswa kuonekana kama hii:
[Π³ΡΡΠΏΠΏΠ°]
ip-Π°Π΄ΡΠ΅Ρ
ip-Π°Π΄ΡΠ΅Ρ
[Π³ΡΡΠΏΠΏΠ°2]
ip-Π°Π΄ΡΠ΅Ρ
ip-Π°Π΄ΡΠ΅Ρ
Ili kutengeneza faili kama hiyo, tutafanya hati rahisi (hebu tuiite vm_list
):
#!/bin/bash
echo [group] > /etc/ansible/cloud_ip &&
"Π²Π°Ρ CLI Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ IP Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ
ΠΌΠ°ΡΠΈΠ½ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅" >> /etc/ansible/cloud_ip
echo " " >> /etc/ansible/cloud_ip
echo [group2] > /etc/ansible/cloud_ip &&
"Π²Π°Ρ CLI Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ IP Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ
ΠΌΠ°ΡΠΈΠ½ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅" >> /etc/ansible/cloud_ip
Ni wakati wa kuangalia kama Ansible inafanya kazi na ni rafiki kupokea anwani za IP:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group
Pato linapaswa kuwa na majina ya seva pangishi ya mashine ambayo amri ilitekelezwa.
Maneno machache kuhusu syntax:
- /etc/ansible/./vm_list - toa orodha ya mashine
- -i - njia kamili ya faili ya hesabu
- -m - mwambie anayefaa kutumia moduli ya ganda
- -a ndio hoja. Amri yoyote inaweza kuingizwa hapa
- kikundi - jina la kikundi chako. Ikiwa unahitaji kufanya hivi kwenye nguzo zote, badilisha kikundi kuwa zote
Wacha tuende mbali zaidi - wacha tujaribu kufanya git pull kwenye mashine zetu za kawaida:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group
Ikiwa katika pato tunaona tayari hadi sasa au kupakua kutoka kwenye hifadhi, basi kila kitu kinafanya kazi.
Sasa hii ndiyo yote ilikusudiwa
Wacha tufundishe hati yetu kuendesha kiotomatiki wakati wa kujitolea kwa tawi kuu kwenye gitlab
Kwanza, wacha tufanye hati yetu kuwa nzuri zaidi na kuiweka kwenye faili inayoweza kutekelezwa (wacha tuiite exec_pull) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
Wacha tuende kwenye gitlab yetu na tuunde faili kwenye mradi .gitlab-ci.yml
Tunaweka zifuatazo ndani:
variables:
GIT_STRATEGY: none
VM_GROUP: group
stages:
- pull
- restart
run_exec_pull:
stage: pull
script:
- /etc/ansible/exec_pull 'cd /path/to/project/'$CI_PROJECT_NAME' && git pull' $VM_GROUP
only:
- master
run_service_restart:
stage: restart
script:
- /etc/ansible/exec_pull 'your_app_stop && your_app_start' $VM_GROUP
only:
- master
Yote ni tayari. Sasa -
- fanya ahadi
- Nimefurahi kuwa kila kitu kinafanya kazi
Wakati wa kuhamisha .yml kwa miradi mingine, unahitaji tu kubadilisha jina la huduma ili kuanzisha upya na jina la kikundi ambacho amri zinazofaa zitatekelezwa.
Chanzo: mapenzi.com