ʻO Ansible + auto git huki i kahi pūʻulu o nā mīkini virtual i ke ao

ʻO Ansible + auto git huki i kahi pūʻulu o nā mīkini virtual i ke ao

He lā maikaʻi

Loaʻa iā mākou kekahi mau pūʻulu ao me ka nui o nā mīkini virtual i kēlā me kēia. Hoʻokipa mākou i kēia ʻoihana holoʻokoʻa ma Hetzner. I loko o kēlā me kēia pūʻulu, loaʻa iā mākou hoʻokahi mīkini haku, lawe ʻia kahi kiʻi mai ia mea a hāʻawi ʻia i nā mīkini virtual āpau i loko o ka pūʻulu.

ʻAʻole ʻae kēia kumumanaʻo iā mākou e hoʻohana maʻamau i ka gitlab-runners, no ka mea, nui nā pilikia e kū mai i ka wā e ʻike ʻia ai nā mea holo i hoʻopaʻa inoa ʻia, kahi i koi ai iā mākou e ʻimi i kahi workaround a kākau i kēia ʻatikala/manual.

ʻAʻole paha kēia ka hoʻomaʻamaʻa maikaʻi loa, akā ua ʻike ʻia kēia hopena maʻalahi a maʻalahi hoʻi.

No ke kumu aʻo, e ʻoluʻolu e ʻike i ka pōpoki.

Pono nā pūʻolo ma ka mīkini master:

  • python
  • hele
  • waihona me nā kī ssh

ʻO ke kumu maʻamau o ka hoʻokō ʻana i ka huki ʻāʻī ma luna o nā mīkini virtual āpau, pono ʻoe i kahi mīkini kahi e kau ʻia ai ʻo Ansible. Mai kēia mīkini, e hoʻouna ʻo ansible i nā kauoha huki git a hoʻomaka hou i ka lawelawe i hoʻonui ʻia. No kēia mau kumu, ua hana mākou i kahi mīkini virtual kaʻawale ma waho o nā pūʻulu a kau ʻia ma luna:

  • python
  • Ansible
  • gitlab-runner

Mai nā pilikia hoʻonohonoho - pono ʻoe e hoʻopaʻa inoa i ka gitlab-runner, hana ssh-keygen, hoʻouka i ke kī ssh lehulehu o kēia mīkini i .ssh/authorized_keys ma ka mīkini haku, wehe i ke awa 22 no ka ansible ma ka mīkini haku.

I kēia manawa e hoʻonohonoho i ka ansible

No ka mea ʻo kā mākou pahuhopu e hoʻokaʻawale i nā mea āpau i hiki. Ma ka waihona /etc/ansible/ansible.cfg e wehe mākou i ka laina host_key_checking = Falseno laila ʻaʻole noi ʻo ansible i ka hōʻoia ʻana i nā mīkini hou.

A laila, pono ʻoe e hana maʻalahi i kahi faila waihona no ka ansible, mai kahi e lawe ai i ka ip o nā mīkini āu e pono ai e hana git pull.

Hoʻokumu mākou i kēia faila me ka API o Hetzner, hiki iā ʻoe ke lawe i ka papa inoa o nā mea hoʻokipa mai kāu AWS, Asure, waihona (he API kāu i kahi e hōʻike ai i kāu mau mīkini holo, pololei?).

He mea koʻikoʻi ke ʻano o ka waihona waihona waiwai no Ansible; e like me kēia:

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

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

No ka hana ʻana i kahi faila, e hana mākou i kahi palapala maʻalahi (e kāhea mākou 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 ka manawa kēia e nānā ai e hana ana ʻo Ansible a he hoaaloha me ka loaʻa ʻana o nā leka uila IP:

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

Pono e loaʻa nā inoa inoa o nā mīkini kahi i hoʻokō ʻia ai ke kauoha.
He mau huaʻōlelo e pili ana i ka syntax:

  • /etc/ansible/./vm_list - hana i kahi papa inoa o nā mīkini
  • -i - ala pololei i ka waihona waihona
  • -m - haʻi hiki ke hoʻohana i ka module shell
  • -a ka hoopaapaa. Hiki ke hookomo i kekahi kauoha maanei
  • hui - ka inoa o kāu hui. Inā pono ʻoe e hana i kēia ma nā pūʻulu āpau, e hoʻololi i ka hui i nā mea āpau

E hele hou aʻe - e hoʻāʻo e hana git pull i kā mākou mīkini virtual:

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

Inā ʻike mākou i ka hopena a i ʻole ka hoʻoiho ʻana mai ka waihona, a laila e hana ana nā mea a pau.

ʻO kēia ka mea i manaʻo ʻia ai

E aʻo kāua i kā mākou palapala e holo maʻalahi i ka wā e hana ai i ka lālā kumu ma gitlab

ʻO ka mea mua, e hoʻonani i kā mākou palapala a hoʻokomo i loko o kahi faila hiki ke hoʻokō (e kapa mākou iā exec_pull) -

#!/bin/bash

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

E hele kāua i kā mākou gitlab a hana i kahi faila i ka papahana .gitlab-ci.yml
Hoʻokomo mākou i kēia i loko:

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 

Ua mākaukau nā mea a pau. I kēia manawa -

  • e hoohiki
  • Hauʻoli wau i ka hana ʻana o nā mea a pau

I ka hoʻoili ʻana iā .yml i nā papahana ʻē aʻe, pono ʻoe e hoʻololi i ka inoa o ka lawelawe e hoʻomaka hou ai a me ka inoa o ka pūʻulu kahi e hoʻokō ʻia ai nā kauoha ansible.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka