I-Ansible + i-auto git itsalwa kwiqela loomatshini abakwilifu

I-Ansible + i-auto git itsalwa kwiqela loomatshini abakwilifu

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 = Falseukuze 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

Yongeza izimvo