Ansible + auto git pull katika kundi la mashine pepe kwenye wingu

Ansible + auto git pull katika kundi la mashine pepe kwenye wingu

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

Kuongeza maoni