Mai yiwuwa + auto git yana jan gungu na injunan kama-da-wane a cikin gajimare

Mai yiwuwa + auto git yana jan gungu na injunan kama-da-wane a cikin gajimare

Ina kwana

Muna da tarin gajimare da yawa tare da adadi mai yawa na injunan kama-da-wane a kowanne. Muna karbar bakuncin wannan duka a Hetzner. A cikin kowane gungu muna da inji guda ɗaya, ana ɗaukar hoto daga gare ta kuma a rarraba ta atomatik zuwa duk injunan kama-da-wane da ke cikin gungu.

Wannan makirci ba ya ƙyale mu mu yi amfani da masu gudu na gitlab akai-akai, tun da yawancin matsaloli suna tasowa lokacin da yawancin masu yin rajista iri ɗaya suka bayyana, wanda ya sa mu sami matsala kuma mu rubuta wannan labarin / manual.

Wataƙila wannan ba shine mafi kyawun aiki ba, amma wannan maganin ya zama kamar dacewa da sauƙi kamar yadda zai yiwu.

Don koyawa, da fatan za a duba cat.

Fakitin da ake buƙata akan na'ura mai mahimmanci:

  • python
  • Git
  • fayil tare da maɓallan ssh

Babban ka'ida na aiwatar da cire gut ta atomatik akan duk injunan kama-da-wane shine cewa kuna buƙatar injin wanda za'a shigar da Mai yiwuwa. Daga wannan na'ura, mai yiwuwa zai aika da umarnin cire git kuma ya sake kunna sabis ɗin da aka sabunta. Don waɗannan dalilai, mun ƙirƙiri wata na'ura ta daban a waje da gungu kuma muka shigar da ita:

  • python
  • m
  • gitlab-mai gudu

Daga batutuwan kungiya - kuna buƙatar yin rijistar gitlab-mai gudu, yin ssh-keygen, loda maɓallin ssh na jama'a na wannan injin zuwa .ssh/authorized_keys a kan babban na'ura, bude tashar jiragen ruwa 22 don mai yiwuwa akan na'ura mai mahimmanci.

Yanzu bari mu saita mai yiwuwa

Tunda burin mu shine sarrafa duk abin da zai yiwu. A cikin fayil /etc/ansible/ansible.cfg za mu uncomment line host_key_checking = Falsedon kada mai hankali ya nemi tabbatar da sabbin injina.

Bayan haka, kuna buƙatar ƙirƙirar fayil ɗin ƙira ta atomatik don mai yiwuwa, daga inda zai ɗauki ip na injinan da kuke buƙatar yin git pull.

Muna samar da wannan fayil ta amfani da API na Hetzner, zaku iya ɗaukar jerin runduna daga AWS, Asure, database (kuna da API wani wuri don nuna injin ku masu gudana, daidai?).

Tsarin fayil ɗin kaya yana da matukar mahimmanci ga Mai yiwuwa; yakamata yayi kama da wannan:

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

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

Don ƙirƙirar irin wannan fayil ɗin, za mu yi rubutu mai sauƙi (bari mu kira shi 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

Lokaci ya yi da za a bincika cewa Mai yiwuwa yana aiki kuma yana da abokantaka tare da karɓar adiresoshin IP:

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

Fitowar ya kamata ta ƙunshi sunayen mashinan injinan da aka aiwatar da umarnin a kansu.
Kalmomi kaɗan game da syntax:

  • /etc/ansible/./vm_list - haifar da jerin inji
  • -i - cikakkiyar hanyar zuwa fayil ɗin ƙira
  • -m - gaya mai yiwuwa don amfani da tsarin harsashi
  • -a shine hujja. Ana iya shigar da kowane umarni a nan
  • rukuni - sunan tarin ku. Idan kana buƙatar yin wannan akan duk gungu, canza rukuni zuwa kowa

Bari mu ci gaba - bari mu yi ƙoƙarin yin git a kan injin ɗin mu:

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

Idan a cikin fitarwa mun riga mun gani har zuwa kwanan wata ko saukewa daga wurin ajiya, to komai yana aiki.

Yanzu wannan shi ne abin da ake nufi da shi duka

Bari mu koyar da rubutun mu don yin aiki ta atomatik lokacin ƙaddamar da babban reshe a gitlab

Da farko, bari mu sanya rubutun mu ya fi kyau kuma mu sanya shi cikin fayil mai aiwatarwa (bari mu kira shi exec_pull) -

#!/bin/bash

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

Bari mu je gitlab ɗin mu kuma ƙirƙirar fayil a cikin aikin .gitlab-ci.yml
Mun sanya wadannan a ciki:

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 

Duk a shirye. Yanzu -

  • yi alkawari
  • Na yi farin ciki cewa komai yana aiki

Lokacin canja wurin .yml zuwa wasu ayyuka, kawai kuna buƙatar canza sunan sabis ɗin don sake farawa da sunan gungu wanda za'a aiwatar da umarni masu yiwuwa.

source: www.habr.com

Add a comment