Ansible + auto git kukoka m'gulu la makina enieni mumtambo

Ansible + auto git kukoka m'gulu la makina enieni mumtambo

Tsiku labwino

Tili ndi magulu angapo amtambo okhala ndi makina ambiri pafupifupi aliyense. Timachitira bizinesi yonseyi ku Hetzner. Pagulu lililonse timakhala ndi makina amodzi, chithunzithunzi chimatengedwa kuchokera pamenepo ndikugawidwa pamakina onse omwe ali mkati mwa tsango.

Chiwembuchi sichilola kuti tigwiritse ntchito gitlab-runners nthawi zonse, chifukwa mavuto ambiri amadza pamene othamanga ambiri ofanana omwe amalembetsa amawonekera, zomwe zinatipangitsa ife kupeza njira yogwirira ntchito ndikulemba nkhaniyi / bukhuli.

Izi mwina sizochita bwino, koma njira iyi idawoneka ngati yabwino komanso yosavuta momwe ndingathere.

Kwa maphunziro, chonde onani mphaka.

Zofunikira pamakina apamwamba:

  • python
  • Pitani
  • fayilo yokhala ndi makiyi a ssh

Mfundo yayikulu yogwiritsira ntchito kukoka kwamatumbo pamakina onse ndikuti mumafunika makina omwe Ansible adzayikirapo. Kuchokera pamakina awa, ansible amatumiza git kukoka malamulo ndikuyambitsanso ntchito yomwe yasinthidwa. Pazifukwa izi, tidapanga makina apadera kunja kwa masango ndikuyikapo:

  • python
  • zovuta
  • gitlab-wothamanga

Kuchokera pazabungwe - muyenera kulembetsa gitlab-runner, kupanga ssh-keygen, kwezani kiyi yapagulu ya ssh yamakina awa kuti .ssh/authorized_keys pa makina ambuye, tsegulani doko 22 la ansible pamakina apamwamba.

Tsopano tiyeni tikonze ansible

Popeza cholinga chathu ndi automate zonse zomwe tingathe. Mu fayilo /etc/ansible/ansible.cfg tidzachotsa mzerewu host_key_checking = Falsekotero kuti ansible safunsa kutsimikizira kwa makina atsopano.

Chotsatira, muyenera kupanga fayilo yachidziwitso cha ansible, kuchokera pomwe idzatengera ip yamakina omwe muyenera kuchita git kukoka.

Timapanga fayiloyi pogwiritsa ntchito Hetzner's API, mukhoza kutenga mndandanda wa makamu kuchokera ku AWS, Asure, database yanu (muli ndi API kwinakwake kuti muwonetse makina anu othamanga, chabwino?).

Mapangidwe a fayilo yazinthu ndizofunikira kwambiri kwa Ansible; ziyenera kuwoneka motere:

[Π³Ρ€ΡƒΠΏΠΏΠ°]
ip-адрСс
ip-адрСс

[Π³Ρ€ΡƒΠΏΠΏΠ°2]
ip-адрСс
ip-адрСс

Kuti mupange fayilo yotere, tipanga script yosavuta (tiyeni tiyitchule 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

Yakwana nthawi yoti muwone ngati Ansible ikugwira ntchito komanso kuti ndi wochezeka polandila ma adilesi a IP:

/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group

Zomwe zimatuluka ziyenera kukhala ndi mayina a makina omwe lamulolo linaperekedwa.
Mawu ochepa okhudza syntax:

  • /etc/ansible/./vm_list - pangani mndandanda wamakina
  • -i - njira yeniyeni yopita ku fayilo yazinthu
  • -m - auzeni zomveka kugwiritsa ntchito gawo la chipolopolo
  • -a ndiye mkangano. Lamulo lirilonse likhoza kulowetsedwa pano
  • gulu - dzina la gulu lanu. Ngati mukufuna kuchita izi pamagulu onse, sinthani gulu kukhala onse

Tiyeni tipitirire - tiyeni tiyese kupanga git kukoka pamakina athu enieni:

/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group 

Ngati muzotulutsa tikuwona kale kapena kutsitsa kuchokera kumalo osungira, ndiye kuti zonse zikuyenda.

Tsopano izi ndi zomwe zidalingidwira

Tiyeni tiphunzitse zolemba zathu kuti ziziyenda zokha podzipereka ku master nthambi mu gitlab

Choyamba, tiyeni tipange zolemba zathu zokongola kwambiri ndikuziyika mu fayilo yotheka (tiyeni tiyitchule exec_pull) -

#!/bin/bash

/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"

Tiyeni tipite ku gitlab yathu ndikupanga fayilo mu polojekitiyi .gitlab-ci.yml
Timayika zotsatirazi mkati:

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 

Zonse zakonzeka. Tsopano -

  • panga lonjezo
  • Ndine wokondwa kuti zonse zikuyenda

Mukasamutsa .yml kumapulojekiti ena, mumangofunika kusintha dzina la utumiki kuti muyambitsenso ndi dzina la gulu lomwe malamulo oyenerera adzaperekedwa.

Source: www.habr.com

Kuwonjezera ndemanga