Roj baş
Me çend komikên ewr hene ku di her yekê de hejmareke mezin makîneyên virtual hene. Em vê karsaziyê li Hetzner mêvandar dikin. Di her komê de makîneyek me ya sereke heye, wêneyek jê tê girtin û bixweber li hemî makîneyên virtual yên di nav komê de tê belav kirin.
Ev nexşe rê nade me ku em gitlab-runners bi normalî bikar bînin, ji ber ku gelek pirsgirêk derdikevin dema ku gelek bezvanên qeydkirî yên wekhev xuya dibin, ku ji me re hişt ku em rêgezek bibînin û vê gotar/destûrê binivîsin.
Dibe ku ev ne pratîka çêtirîn e, lê ev çareserî bi qasî ku gengaz û hêsan xuya bû.
Ji bo dersê, ji kerema xwe pisîkê bibînin.
Pakêtên pêwîst ên li ser makîneya masterê:
- python
- git
- pelê bi bişkojkên ssh
Prensîba gelemperî ya bicîhkirina kişandina gutê ya otomatîkî li ser hemî makîneyên virtual ev e ku hûn hewceyê makîneyek ku Ansible li ser wê were saz kirin hewce ye. Ji vê makîneyê, ansible dê fermanên git pullê bişîne û karûbarê ku hatî nûve kirin ji nû ve bide destpêkirin. Ji bo van armancan, me makîneyek virtual ya cihêreng li derveyî koman çêkir û li ser saz kir:
- python
- ansible
- gitlab-runner
Ji pirsgirêkên rêxistinî - hûn hewce ne ku gitlab-runner tomar bikin, ssh-keygen çêbikin, mifteya giştî ya ssh ya vê makîneyê barkirin .ssh/authorized_keys
li ser makîneya masterê, porta 22 vekin ji bo ansible li ser makîneya masterê.
Naha werin em ansible mîheng bikin
Ji ber ku armanca me ew e ku em her tiştê ku mimkun e otomatîk bikin. Di pelê de /etc/ansible/ansible.cfg
em ê rêzê şîrove bikin host_key_checking = False
da ku ansible erêkirina makîneyên nû nepirse.
Dûv re, hûn hewce ne ku ji bo ansible pelek tomarokek bixweber biafirînin, ji ku derê ew ê ip-ya makîneyên ku hûn hewce ne ku git pull li ser wan bikin bigirin.
Em vê pelê bi karanîna API-ya Hetzner-ê diafirînin, hûn dikarin navnîşa mêvandaran ji AWS, Asure, databasa xwe bigirin (we li cîhek API heye ku hûn makîneyên xweyên xebitandinê nîşan bidin, rast?).
Struktura pelê envanterê ji bo Ansible pir girîng e; divê bi vî rengî xuya bike:
[группа]
ip-адрес
ip-адрес
[группа2]
ip-адрес
ip-адрес
Ji bo ku pelek wusa çêbikin, em ê skrîptek hêsan çêbikin (ka em jê re bibêjin 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
Wext e ku meriv kontrol bike ka Ansible kar dike û bi wergirtina navnîşanên IP-ê re heval e:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group
Pêdivî ye ku encam navên mazûban ên makîneyên ku ferman li ser hatine bicîh kirin hebin.
Çend gotin li ser hevoksaziyê:
- /etc/ansible/./vm_list - navnîşek makîneyan çêbike
- -i - riya bêkêmasî ya pelê envanterê
- -m - ji ansible re bêje ku modula şêlê bikar bîne
- -a arguman e. Her fermanek dikare li vir were nivîsandin
- kom - navê koma we. Heke hûn hewce ne ku vê yekê li ser hemî koman bikin, grûpê bi hemî biguherînin
Ka em pêşdetir biçin - em hewl bidin ku git pull li ser makîneyên xweya virtual bikin:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group
Ger di encam de em berê nûvekirî bibînin an ji depoyê dakêşin, wê hingê her tişt dixebite.
Niha ev e ya ku ew hemî ji bo wê bû
Werin em skrîpta xwe hîn bikin ku dema ku di gitlab-ê de şaxa masterê dimeşîne bixweber bixebite
Pêşî, bila skrîpta xwe xweştir bikin û wê têxin pelek îcrakar (ka em jê re bibêjin exec_pull) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
Werin em biçin gitlab-a xwe û di projeyê de pelek çêbikin .gitlab-ci.yml
Em tiştên jêrîn danîn hundur:
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
Hemî amade ye. Niha -
- peymanek çêbikin
- Ez kêfxweş im ku her tişt dixebite
Dema ku .yml vediguhezînin projeyên din, hûn tenê hewce ne ku navê karûbarê ji nû ve dest pê bike û navê koma ku dê fermanên ansible li ser wê bêne bicîh kirin biguhezînin.
Source: www.habr.com