I-Ansible + auto git idonsa kuqoqo lemishini ebonakalayo emafini

I-Ansible + auto git idonsa kuqoqo lemishini ebonakalayo emafini

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

Engeza amazwana