Ansible + auto git dhonza muboka remashini chaiwo ari mugore

Ansible + auto git dhonza muboka remashini chaiwo ari mugore

Zuva rakanaka

Isu tine akati wandei makore masumbu ane nhamba huru yemashini chaiwo mune imwe neimwe. Isu tinotora bhizinesi iri rese paHetzner. Muchikwata chega chega tine muchina mumwe chete, snapshot inotorwa kubva mairi uye yogovaniswa otomatiki kumashini ese ari mukati meboka.

Ichi chirongwa hachitibvumidze kushandisa gitlab-runners zvakajairika, sezvo matambudziko mazhinji anomuka apo vazhinji vakafanana vakanyoreswa vanomhanya vanoonekwa, izvo zvakaita kuti isu tiwane workaround uye tinyore chinyorwa ichi / bhuku.

Iyi ingangove isiri yakanakisa maitiro, asi iyi mhinduro yairatidzika seyakanakira uye iri nyore sezvinobvira.

Pakudzidzisa, ndapota ona katsi.

Inodiwa mapakeji pamushini mukuru:

  • python
  • Git
  • faira ine ssh makiyi

Iyo yakajairika misimboti yekushandisa otomatiki gut kudhonza pamashini ese chaiwo ndeyekuti iwe unoda muchina unozoiswa Ansible. Kubva muchina uyu, ansible anotumira git dhonza mirairo uye kutangazve sevhisi yakagadziridzwa. Nezvinangwa izvi, isu takagadzira yakasarudzika muchina kunze kwemasumbu uye yakaiswa pairi:

  • python
  • anable
  • gitlab-runner

Kubva kunyaya dzesangano - iwe unofanirwa kunyoresa gitlab-runner, kugadzira ssh-keygen, kurodha yeruzhinji ssh kiyi yemuchina uyu .ssh/authorized_keys pamushini mukuru, vhura port 22 yeanobatika pamushini mukuru.

Zvino ngatigadzirisei zvinonzwisisika

Sezvo chinangwa chedu chiri kuita otomatiki zvese zvinogoneka. Mufaira /etc/ansible/ansible.cfg isu tichasunungura mutsara host_key_checking = Falsekuitira kuti zvinonzwisisika hazvibvunze kusimbiswa kwemichina mitsva.

Tevere, iwe unofanirwa kugadzira otomatiki faira rekuisa kune inobatika, kubva kwainozotora iyo ip yemichina yaunoda kuita git kudhonza.

Isu tinogadzira iyi faira tichishandisa Hetzner's API, unogona kutora runyorwa rwemauto kubva kuAWS yako, Asure, dhatabhesi (iwe une API kumwe kuratidza yako inomhanya michina, handiti?).

Mamiriro eiyo inventory faira yakakosha kune Ansible; inofanirwa kutaridzika seizvi:

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

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

Kuti tigadzire faira rakadaro, tichaita script iri nyore (ngatidaidzei 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

Yave nguva yekutarisa kuti Ansible inoshanda uye ine hushamwari nekugamuchira IP kero:

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

Izvo zvinobuda zvinofanirwa kunge zvine mazita ekugamuchira emichina yakatemerwa murairo.
Mazwi mashoma nezve syntax:

  • /etc/ansible/./vm_list - gadzira runyorwa rwemichina
  • -i - nzira yakakwana kune iyo inventory faira
  • -m - udza zvinonzwisisika kushandisa shell module
  • -a ndiyo nharo. Chero murairo unogona kuiswa pano
  • boka - zita rechikwata chako. Kana iwe uchida kuita izvi pamasumbu ese, chinja boka kune ese

Ngatiendei mberi - ngatiedzei kuita git kudhonza pamakina edu chaiwo:

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

Kana mune zvakabuda tinoona zvatove zvazvino kana kuburitsa kubva mudura, saka zvese zviri kushanda.

Zvino izvi ndizvo zvazvairehwa

Ngatidzidzisei script yedu kuti iite otomatiki kana tichizvipira kune master bazi mugitlab

Kutanga, ngatiite kuti script yedu iwedzere kunaka uye tiise mufaira rinogoneka (ngatidaidze exec_pull) -

#!/bin/bash

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

Handei kune yedu gitlab uye tigadzire faira mupurojekiti .gitlab-ci.yml
Tinoisa zvinotevera mukati:

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 

Zvese zvagadzirira. Zvino -

  • ita chitsidzo
  • Ndinofara kuti zvese zviri kushanda

Paunenge uchiendesa .yml kune mamwe mapurojekiti, unongoda kushandura zita resevhisi kuti utangezve uye zita reboka iro mirairo inonzwisisika ichaitwa.

Source: www.habr.com

Voeg