Bidh Ansible + auto git a’ tarraing a-steach grunn innealan brìgheil san sgòth

Bidh Ansible + auto git a’ tarraing a-steach grunn innealan brìgheil san sgòth

Latha math

Tha grunn chlàran sgòthan againn le àireamh mhòr de dh’ innealan brìgheil anns gach fear. Bidh sinn a’ toirt aoigheachd don ghnìomhachas slàn seo aig Hetzner. Anns gach brabhsair tha aon phrìomh inneal againn, thèid dealbh a thoirt bhuaithe agus a sgaoileadh gu fèin-ghluasadach gu gach inneal brìgheil taobh a-staigh a’ bhuidheann.

Chan eil an sgeama seo a’ leigeil leinn ruithearan gitlab a chleachdadh gu h-àbhaisteach, leis gu bheil tòrr dhuilgheadasan ag èirigh nuair a nochdas mòran de luchd-ruithidh clàraichte co-ionann, a thug oirnn dòigh-obrach a lorg agus an artaigil/leabhar-làimhe seo a sgrìobhadh.

Is dòcha nach e seo an cleachdadh as fheàrr, ach bha coltas gu robh am fuasgladh seo cho goireasach agus cho sìmplidh sa ghabhas.

Airson an oideachadh, faic cat.

Pacaidean riatanach air a’ phrìomh inneal:

  • python
  • git
  • faidhle le iuchraichean ssh

Is e am prionnsapal coitcheann airson tarraing gut fèin-ghluasadach a chuir an gnìomh air a h-uile inneal brìgheil gum feum thu inneal air an tèid Ansible a chuir a-steach. Bhon inneal seo, cuiridh ansible òrdughan tarraing git agus ath-thòiseachadh an t-seirbheis a chaidh ùrachadh. Airson na h-adhbharan sin, chruthaich sinn inneal brìgheil air leth taobh a-muigh na cruinneachaidhean agus chuir sinn a-steach e:

  • python
  • cunntachail
  • gitlab-ruith

A thaobh cùisean eagrachaidh, feumaidh tu gitlab-runner a chlàradh, ssh-keygen a dhèanamh, iuchair ssh poblach an inneil seo a luchdachadh suas gu .ssh/authorized_keys air a’ phrìomh inneal, fosgail port 22 airson ansible air a’ phrìomh inneal.

A-nis leig leinn rèiteachadh ciallach

Leis gur e ar n-amas a h-uile dad a tha comasach a dhèanamh fèin-ghluasadach. Ann am faidhle /etc/ansible/ansible.cfg bheir sinn iomradh air an loidhne host_key_checking = Falsegus nach iarr ansible dearbhadh air innealan ùra.

An ath rud, feumaidh tu faidhle tasgaidh a ghineadh gu fèin-ghluasadach airson ansible, às an toir e ip nan innealan air am feum thu tarraing git.

Bidh sinn a’ gineadh am faidhle seo le bhith a’ cleachdadh API Hetzner, faodaidh tu an liosta luchd-aoigheachd a thoirt bhon stòr-dàta AWS, Asure agad (tha API agad an àiteigin airson na h-innealan ruith agad a thaisbeanadh, ceart?).

Tha structar an fhaidhle tasgaidh glè chudromach airson Ansible; bu chòir dha coimhead mar seo:

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

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

Gus faidhle mar seo a ghineadh, nì sinn sgriobt sìmplidh (canaidh sinn e 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

Tha an t-àm ann dèanamh cinnteach gu bheil Ansible ag obair agus gu bheil e càirdeil le bhith a’ faighinn seòlaidhean IP:

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

Bu chòir ainmean aoigheachd nan innealan air an deach an àithne a chuir gu bàs a bhith san toradh.
Beagan fhaclan mu cho-chòrdadh:

  • /etc/ansible/./vm_list - cruthaich liosta de dh'innealan
  • -i - slighe iomlan chun fhaidhle clàr-seilbhe
  • -m - innis ciallach am modal slige a chleachdadh
  • -a tha an argamaid. Faodar òrdugh sam bith a chuir a-steach an seo
  • buidheann - ainm do bhuidheann. Ma dh’fheumas tu seo a dhèanamh air a h-uile buidheann, atharraich am buidheann gu na h-uile

Rachamaid nas fhaide - feuchaidh sinn ri tarraing git a dhèanamh air na h-innealan brìgheil againn:

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

Ma chì sinn san toradh mar-thà ùrachadh no a luchdachadh sìos bhon stòr, tha a h-uile dad ag obair.

A-nis is ann airson seo a bha e uile a’ ciallachadh

Ionnsaichidh sinn ar sgriobt a ruith gu fèin-ghluasadach nuair a bhios sinn a’ gealltainn don phrìomh mheur ann an gitlab

An toiseach, dèanamaid ar sgriobt nas bòidhche agus cuiridh sinn e ann am faidhle so-ghnìomhaichte (canaidh sinn exec_pull ris) -

#!/bin/bash

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

Rachamaid chun gitlab againn agus cruthaich sinn faidhle sa phròiseact .gitlab-ci.yml
Chuir sinn na leanas a-staigh:

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 

Tha a h-uile dad deiseil. A-nis -

  • deanamh geall
  • Tha mi toilichte gu bheil a h-uile càil ag obair

Nuair a bhios tu a’ gluasad .yml gu pròiseactan eile, cha leig thu leas ach ainm na seirbheis atharrachadh gus ath-thòiseachadh agus ainm a’ bhraisle air an tèid na h-òrduighean iomchaidh a chur an gnìomh.

Source: www.habr.com

Cuir beachd ann