Usuku oluhle
Sinamaqoqo amafu amaningana anenani elikhulu lemishini ebonakalayo ngalinye. Sibamba yonke le nto e-Hetzner. Kuqoqo ngalinye sinomshini owodwa oyinhloko, isifinyezo sithathwa kuso futhi sisatshalaliswa ngokuzenzakalelayo kuyo yonke imishini ebonakalayo ngaphakathi kweqoqo.
Lolu hlelo alusivumeli ukuthi sisebenzise abagijimi be-gitlab ngokujwayelekile, njengoba kuphakama izinkinga eziningi lapho abagijimi abaningi abafanayo ababhalisiwe bevela, okusishukumisele ukuba sithole i-workaround futhi sibhale lesi sihloko/manuwali.
Lokhu cishe akuwona umkhuba ongcono kakhulu, kodwa lesi sixazululo sasibonakala silula futhi silula ngangokunokwenzeka.
Ukuze uthole okokufundisa, sicela ubone ikati.
Amaphakheji adingekayo emshinini omkhulu:
- i-python
- Git
- ifayela elinokhiye be-ssh
Umgomo ojwayelekile wokusebenzisa ukudonsa amathumbu okuzenzakalelayo kuyo yonke imishini ebonakalayo ukuthi udinga umshini lapho kuzofakwa khona i-Ansible. Kusuka kulo mshini, i-ansible izothumela imiyalo ye-git futhi iqale kabusha isevisi ebuyekeziwe. Ngalezi zinhloso, sidale umshini ohlukile we-virtual ngaphandle kwamaqoqo futhi sawufaka:
- i-python
- ansible
- gitlab-runner
Kusukela ezindabeni zenhlangano - udinga ukubhalisa i-gitlab-runner, wenze i-ssh-keygen, ulayishe ukhiye womphakathi we-ssh walo mshini ukuze .ssh/authorized_keys
emshinini oyinhloko, vula ichweba elingu-22 ukuze uthole i-ansible emshinini omkhulu.
Manje ake silungiselele i-ansible
Njengoba umgomo wethu uwukwenza ngokuzenzakalelayo konke okungenzeka. Kufayela /etc/ansible/ansible.cfg
sizokhipha umugqa host_key_checking = False
ukuze i-ansible ingaceli ukuqinisekiswa kwemishini emisha.
Okulandelayo, udinga ukukhiqiza ngokuzenzakalelayo ifayela le-inventory for ansible, ukusuka lapho kuzothatha i-ip yemishini okudingeka wenze kuyo i-git pull.
Senza leli fayela sisebenzisa i-Hetzner's API, ungathatha uhlu lwabasingathi ku-AWS yakho, i-Asure, isizindalwazi (une-API kwenye indawo ukuze ubonise imishini yakho esebenzayo, akunjalo?).
Isakhiwo sefayela lokusungula sibaluleke kakhulu ku-Ansible;
[группа]
ip-адрес
ip-адрес
[группа2]
ip-адрес
ip-адрес
Ukuze sikhiqize ifayela elinjalo, sizokwenza umbhalo olula (asiwubize 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
Yisikhathi sokuhlola ukuthi kuyasebenza yini futhi kuyahambisana nokuthola amakheli e-IP:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group
Okukhiphayo kufanele kuqukathe amagama osokhaya emishini lapho umyalo wenziwe khona.
Amagama ambalwa mayelana ne-syntax:
- /etc/ansible/./vm_list - khiqiza uhlu lwemishini
- -i - indlela ephelele eya kufayela lokusungula
- -m - tshela ukuhlakanipha ukusebenzisa imojuli yegobolondo
- -a ingxabano. Noma yimuphi umyalo ungafakwa lapha
- iqembu - igama leqoqo lakho. Uma udinga ukwenza lokhu kuwo wonke amaqoqo, shintsha iqembu libe wonke
Masiqhubekele phambili - ake sizame ukwenza i-git pull emishinini yethu ebonakalayo:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group
Uma kulokho okukhiphayo sibona vele kusesikhathini noma kukhishwa endaweni yokugcina, khona-ke yonke into iyasebenza.
Manje yilokhu konke okwakuhloselwe kona
Masifundise umbhalo wethu ukuthi usebenze ngokuzenzakalelayo lapho uzibophezela egatsheni eliyinhloko ku-gitlab
Okokuqala, masenze iskripthi sethu sibe sihle kakhulu futhi sibeke efayeleni elisebenzisekayo (asibize ngokuthi exec_pull) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
Ake siye ku-gitlab yethu futhi sakhe ifayela kuphrojekthi .gitlab-ci.yml
Sifaka okulandelayo ngaphakathi:
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
Konke sekulungile. Manje -
- yenza isibophezelo
- Ngiyajabula ukuthi konke kuyasebenza
Lapho udlulisela i-.yml kwamanye amaphrojekthi, udinga nje ukushintsha igama lesevisi ukuze uqale kabusha kanye negama leqoqo lapho imiyalo enengqondo izokwenziwa khona.
Source: www.habr.com