Mholweni emini nje
Sinamaqela amaninzi amafu anenani elikhulu loomatshini ababonakalayo kwindawo nganye. Sibamba lonke eli shishini eHetzner. Kwiqela ngalinye sinomatshini omnye oyinkosi, umfanekiso othatyathiweyo uthathwa kuwo kwaye usasazwe ngokuzenzekelayo kubo bonke oomatshini benyani ngaphakathi kweqela.
Esi sikimu asisivumeli ukuba sisebenzise i-gitlab-runners ngokuqhelekileyo, kuba iingxaki ezininzi zivela xa abaninzi abagijimi ababhalisiweyo abafanayo bevela, nto leyo eyasishukumisela ukuba sifumane umsebenzi kwaye sibhale eli nqaku / incwadi.
Oku mhlawumbi ayisiyonto ilungileyo yokwenza, kodwa esi sisombululo sibonakala siluncedo kwaye silula kangangoko.
Kwisifundo, nceda ubone ikati.
Iipakethe ezifunekayo kumatshini omkhulu:
- python
- yiya
- ifayile enezitshixo ze-ssh
Umgaqo jikelele wokuphumeza ukutsalwa kwamathumbu okuzenzekelayo kubo bonke oomatshini bokwenene kukuba udinga umatshini apho i-Ansible iya kufakwa khona. Ukusuka kulo matshini, i-ansible iya kuthumela imiyalelo yokutsalwa kwe-git kwaye iqalise kwakhona inkonzo ehlaziyiweyo. Ngezi njongo, senze umatshini ohlukileyo ohlukileyo ngaphandle kwamaqela kwaye sifakwe kuwo:
- python
- iyenzeka
- gitlab-imbaleki
Ukusuka kwimiba yombutho - kufuneka ubhalise i-gitlab-runner, yenza i-ssh-keygen, layisha iqhosha likawonkewonke le-ssh yalo matshini ukuze .ssh/authorized_keys
kumatshini oyintloko, vula i-port 22 ye-ansible kwi-master machine.
Ngoku makhe siqwalasele i-ansible
Ekubeni injongo yethu kukwenza yonke into enokwenzeka. Kwifayile /etc/ansible/ansible.cfg
siya kukhulula umgca host_key_checking = False
ukuze i-ansible ingabuzi ukuqinisekiswa koomatshini abatsha.
Okulandelayo, kufuneka uvelise ngokuzenzekelayo ifayile ye-inventri ye-ansible, ukusuka apho iya kuthatha ip yoomatshini apho kufuneka wenze i-git pull.
Senza le fayile usebenzisa i-Hetzner's API, unokuthatha uluhlu lweenginginya kwi-AWS yakho, i-Asure, i-database (une-API kwindawo ethile ukubonisa oomatshini bakho abasebenzayo, akunjalo?).
Ubume befayile ye-inventri ibaluleke kakhulu kwi-Ansible; kufuneka ijongeke ngolu hlobo:
[группа]
ip-адрес
ip-адрес
[группа2]
ip-адрес
ip-адрес
Ukuvelisa ifayile enjalo, siya kwenza iskripthi esilula (masiyibize 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
Lixesha lokuba ujonge ukuba i-Ansible iyasebenza kwaye inobuhlobo ngokufumana iidilesi ze-IP:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group
Imveliso kufuneka iqulathe amagama enginginya koomatshini apho umyalelo waphunyezwa khona.
Amagama ambalwa malunga nesintaksi:
- /etc/ansible/./vm_list - yenza uluhlu loomatshini
- -i - indlela epheleleyo kwifayile ye-inventri
- -m - xelela ngokufanelekileyo ukusebenzisa imodyuli yeqokobhe
- -a yingxoxo. Nawuphi na umyalelo ungangeniswa apha
- iqela - igama leqela lakho. Ukuba ufuna ukwenza oku kuwo onke amaqela, tshintsha iqela kubo bonke
Masiqhubele phambili-makhe sizame ukwenza ukutsalwa kwegit koomatshini bethu benyani:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group
Ukuba kwimveliso sibona sele ihlaziywe okanye ikhulula kwindawo yokugcina, ngoko yonke into iyasebenza.
Ngoku yonke le nto yayilungiselelwe yona
Masifundise iskripthi sethu ukuba sisebenze ngokuzenzekelayo xa sizinikela kwisebe elikhulu kwi-gitlab
Okokuqala, masenze iskripthi sethu sibe sihle ngakumbi kwaye sibeke kwifayile ephunyezwayo (masiyibize exec_pull) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
Makhe siye kwi-gitlab yethu kwaye senze ifayile kwiprojekthi .gitlab-ci.yml
Sibeka oku kulandelayo 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
Zonke zilungile. Ngoku -
- yenza isibophelelo
- Ndiyavuya kuba yonke into iyasebenza
Xa udlulisela .yml kwezinye iiprojekthi, kufuneka utshintshe igama lenkonzo ukuze uqalise kwakhona kunye negama leqela apho imiyalelo engabonakaliyo iya kwenziwa.
umthombo: www.habr.com