Ansible + auto git fa sinu iṣupọ ti awọn ẹrọ foju inu awọsanma

Ansible + auto git fa sinu iṣupọ ti awọn ẹrọ foju inu awọsanma

Ojo dada

A ni ọpọlọpọ awọn iṣupọ awọsanma pẹlu nọmba nla ti awọn ẹrọ foju ni ọkọọkan. A gbalejo gbogbo iṣowo yii ni Hetzner. Ninu iṣupọ kọọkan a ni ẹrọ titunto si kan, a ya aworan kan lati inu rẹ ati pinpin laifọwọyi si gbogbo awọn ẹrọ foju inu iṣupọ naa.

Eto yii ko gba wa laaye lati lo awọn asare-gitlab ni deede, nitori ọpọlọpọ awọn iṣoro dide nigbati ọpọlọpọ awọn aṣaja ti o forukọsilẹ ti o jọmọ han, eyiti o jẹ ki a wa iṣẹ-ṣiṣe ki o kọ nkan / Afowoyi yii.

Eyi kii ṣe iṣe ti o dara julọ, ṣugbọn ojutu yii dabi irọrun ati rọrun bi o ti ṣee.

Fun ikẹkọ, jọwọ wo ologbo.

Awọn idii ti a beere lori ẹrọ titunto si:

  • Python
  • Git
  • faili pẹlu awọn bọtini ssh

Ilana gbogbogbo ti imuse ifun ikun laifọwọyi lori gbogbo awọn ẹrọ foju ni pe o nilo ẹrọ kan lori eyiti Ansible yoo fi sii. Lati ẹrọ yii, o ṣeeṣe yoo firanṣẹ awọn aṣẹ fa git ati tun bẹrẹ iṣẹ ti o ti ni imudojuiwọn. Fun awọn idi wọnyi, a ṣẹda ẹrọ foju ọtọtọ ni ita awọn iṣupọ ati fi sori ẹrọ lori rẹ:

  • Python
  • dahun
  • gitlab-olusare

Lati awọn ọran eto - o nilo lati forukọsilẹ gitlab-runner, ṣe ssh-keygen, gbejade bọtini ssh ti gbogbo eniyan ti ẹrọ yii si .ssh/authorized_keys lori ẹrọ titunto si, ṣiṣi ibudo 22 fun ansible lori ẹrọ titunto si.

Bayi jẹ ki ká tunto ansible

Niwon ibi-afẹde wa ni lati ṣe adaṣe ohun gbogbo ti o ṣeeṣe. Ninu faili /etc/ansible/ansible.cfg a yoo uncomment ila host_key_checking = Falseki ansible ko beere fun ìmúdájú ti titun ero.

Nigbamii ti, o nilo lati ṣe ina faili ọja-ọja laifọwọyi fun aibikita, lati ibiti yoo gba ip ti awọn ẹrọ lori eyiti o nilo lati fa git fa.

A ṣe agbekalẹ faili yii ni lilo Hetzner's API, ṣugbọn o le mu atokọ ti awọn ọmọ-ogun lati AWS rẹ, Asure, database (o ni API kan ni ibikan lati ṣafihan awọn ẹrọ ṣiṣe rẹ, otun?).

Eto ti faili akojo oja ṣe pataki pupọ fun Ansible; o yẹ ki o dabi eyi:

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

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

Lati ṣe iru faili bẹ, a yoo ṣe iwe afọwọkọ ti o rọrun (jẹ ki a pe 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

O to akoko lati ṣayẹwo pe Ansible ṣiṣẹ ati pe o jẹ ọrẹ pẹlu gbigba awọn adirẹsi IP:

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

Ijade yẹ ki o ni awọn orukọ olupin ti awọn ẹrọ lori eyiti a ti mu aṣẹ naa ṣiṣẹ.
Awọn ọrọ diẹ nipa sintasi:

  • /etc/ansible/./vm_list - ṣe agbejade atokọ ti awọn ẹrọ
  • -i - ọna pipe si faili akojo oja
  • -m - so fun ansible lati lo ikarahun module
  • -a ni ariyanjiyan. Eyikeyi aṣẹ le wa ni titẹ si ibi
  • ẹgbẹ - orukọ iṣupọ rẹ. Ti o ba nilo lati ṣe eyi lori gbogbo awọn iṣupọ, yi ẹgbẹ pada si gbogbo

Jẹ ki a lọ siwaju - jẹ ki a gbiyanju lati ṣe git fa lori awọn ẹrọ foju wa:

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

Ti o ba wa ninu iṣelọpọ ti a rii tẹlẹ lati ọjọ tabi ṣiṣi silẹ lati ibi ipamọ, lẹhinna ohun gbogbo n ṣiṣẹ.

Bayi eyi ni ohun ti gbogbo rẹ tumọ si fun

Jẹ ki a kọ iwe afọwọkọ wa lati ṣiṣẹ laifọwọyi nigbati o ba ṣe si ẹka titunto si ni gitlab

Ni akọkọ, jẹ ki a jẹ ki iwe afọwọkọ wa lẹwa diẹ sii ki a fi sii sinu faili ti o le ṣiṣẹ (jẹ ki a pe ni exec_pull) -

#!/bin/bash

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

Jẹ ki a lọ si gitlab wa ki o ṣẹda faili kan ninu iṣẹ naa .gitlab-ci.yml
A fi nkan wọnyi sinu:

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 

Gbogbo rẹ ti šetan. Bayi -

  • ṣe adehun
  • Inu mi dun pe ohun gbogbo n ṣiṣẹ

Nigbati o ba n gbe .yml lọ si awọn iṣẹ akanṣe miiran, o kan nilo lati yi orukọ iṣẹ naa pada lati tun bẹrẹ ati orukọ iṣupọ lori eyiti awọn aṣẹ ti o ṣeeṣe yoo jẹ ṣiṣe.

orisun: www.habr.com

Fi ọrọìwòye kun