Ansible + auto git hula ka har'a sehlopha sa mechini e fumanehang marung

Ansible + auto git hula ka har'a sehlopha sa mechini e fumanehang marung

Lumela

Re na le lihlopha tse 'maloa tsa maru tse nang le palo e kholo ea mechine ea sebele ho e' ngoe le e 'ngoe. Re amohela khoebo ena kaofela ho Hetzner. Sehlopheng se seng le se seng re na le mochini o le mong oa master, senepe se nkuoa ho sona ebe se abeloa mechini eohle e teng ka har'a sehlopha.

Morero ona ha o re lumelle ho sebelisa li-gitlab-runners ka tloaelo, kaha mathata a mangata a hlaha ha limathi tse ngata tse ngolisitsoeng tse tšoanang li hlaha, e leng se ileng sa re susumelletsa ho fumana mosebetsi le ho ngola sehlooho sena / bukana.

Mohlomong sena ha se mokhoa o motle ka ho fetisisa, empa tharollo ena e ne e bonahala e le bonolo ebile e le bonolo ka hohle kamoo ho ka khonehang.

Bakeng sa thupelo, ka kopo bona katse.

Liphutheloana tse hlokahalang mochining o moholo:

  • python
  • git
  • faele e nang le linotlolo tsa ssh

Molao-motheo o akaretsang oa ho kenya ts'ebetso ea "automatic gut pull" ho mechini eohle ea sebele ke hore o hloka mochini oo Ansible o tla kengoa ho oona. Ho tsoa mochining ona, ansible e tla romella litaelo tsa git le ho qala ts'ebeletso e nchafalitsoeng. Bakeng sa merero ena, re thehile mochini o ikhethileng o kantle ho lihlopha mme re kentse ho ona:

  • python
  • e phetoloang
  • gitlab-semathi

Ho tsoa litabeng tsa mokhatlo - o hloka ho ngolisa gitlab-runner, etsa ssh-keygen, kenya senotlolo sa sechaba sa ssh sa mochine ona ho .ssh/authorized_keys mochining o moholo, koung e bulehileng ea 22 bakeng sa ansible mochining o moholo.

Joale a re ke re configure ansible

Kaha sepheo sa rona ke ho iketsetsa ntho e 'ngoe le e' ngoe e ka khonehang. Ka faele /etc/ansible/ansible.cfg re tla hlakola mohala host_key_checking = Falsee le hore ansible e se ke ea kopa netefatso ea mechini e mecha.

Ka mor'a moo, o hloka ho iketsetsa faele ea inventory bakeng sa ansible, ho tloha moo e tla nka ip ea mechini eo u lokelang ho e etsa git pull.

Re hlahisa faele ena re sebelisa Hetzner's API, o ka nka lethathamo la mabotho ho tloha AWS, Asure, database ea hau (o na le API kae-kae ho bonts'a mechine ea hau e sebetsang, ho joalo?).

Sebopeho sa faele ea thepa se bohlokoa haholo bakeng sa Ansible; e lokela ho shebahala tjena:

[группа]
ip-адрес
ip-адрес

[группа2]
ip-адрес
ip-адрес

Ho hlahisa faele e joalo, re tla etsa script e bonolo (ha re e bitse 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

Ke nako ea ho lekola hore na Ansible ea sebetsa le hore e na le botsoalle ho amohela liaterese tsa IP:

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

Sephetho se tlameha ho ba le mabitso a moamoheli a mechini eo taelo e entsoeng ho eona.
Mantsoe a seng makae ka syntax:

  • /etc/ansible/./vm_list - hlahisa lethathamo la mechini
  • -i - tsela e felletseng ea faele ea inventory
  • -m - bolella ho utloahalang ho sebelisa mojule oa khetla
  • -a ke khang. Taelo efe kapa efe e ka kenngoa mona
  • sehlopha - lebitso la sehlopha sa hau. Haeba o hloka ho etsa sena ho lihlopha tsohle, fetola sehlopha ho bohle

Ha re ee hole - ha re lekeng ho etsa git pull ka mechini ea rona ea sebele:

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

Haeba ho tlhahiso eo re e bonang e se e ntse e le teng kapa e laolloa ho tloha polokelong, joale ntho e 'ngoe le e' ngoe e sebetsa.

Joale sena ke sona seo e neng e se reretsoe

Ha re ruteng sengoloa sa rona ho sebetsa ka bohona ha re itlama ho lekala la master ho gitlab

Taba ea mantlha, ha re etseng hore sengoloa sa rona se be setle le ho feta ebe re se kenya faeleng e ka phethisoang (ha re e bitse exec_pull) -

#!/bin/bash

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

Ha re ee ho gitlab ea rona mme re thehe faele morerong .gitlab-ci.yml
Re kenya tse latelang ka hare:

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 

Tsohle di lokile. Joale -

  • etsa boitlamo
  • Ke thabela hore tsohle lia sebetsa

Ha o fetisetsa .yml ho merero e meng, o hloka feela ho fetola lebitso la ts'ebeletso ho qala hape le lebitso la sehlopha seo litaelo tse utloahalang li tla etsoa.

Source: www.habr.com

Eketsa ka tlhaloso