Ansible + pib git rub hauv pawg ntawm cov tshuab virtual hauv huab

Ansible + pib git rub hauv pawg ntawm cov tshuab virtual hauv huab

Hnub zoo

Peb muaj ntau pawg huab nrog ntau lub tshuab virtual hauv txhua qhov. Peb tuav tag nrho qhov no ntawm Hetzner. Nyob rau hauv txhua pawg peb muaj ib tug tswv tshuab, ib tug snapshot yog muab los ntawm nws thiab muab faib mus rau tag nrho cov virtual tshuab nyob rau hauv pawg.

Cov tswv yim no tsis tso cai rau peb siv gitlab-khiav ib txwm, txij li muaj ntau yam teeb meem tshwm sim thaum muaj ntau tus neeg sau npe zoo ib yam tshwm sim, uas ua rau peb nrhiav kev daws teeb meem thiab sau cov lus no / phau ntawv qhia.

Qhov no tej zaum tsis yog qhov kev xyaum zoo tshaj plaws, tab sis qhov kev daws teeb meem no zoo li yooj yim thiab yooj yim li sai tau.

Rau kev qhia, thov saib miv.

Yuav tsum tau pob khoom ntawm lub tshuab master:

  • nab hab sej
  • git
  • cov ntaub ntawv nrog ssh yuam sij

Lub hauv paus ntsiab lus ntawm kev siv lub plab tsis siv neeg rub ntawm txhua lub tshuab virtual yog tias koj xav tau lub tshuab uas Ansible yuav raug teeb tsa. Los ntawm lub tshuab no, ansible yuav xa git rub cov lus txib thiab rov pib qhov kev pabcuam uas tau hloov kho. Rau cov hom phiaj no, peb tsim ib lub tshuab virtual cais tawm sab nraum pawg thiab nruab rau nws:

  • nab hab sej
  • teb tau
  • gitlab-khiav

Los ntawm cov teeb meem hauv lub koom haum - koj yuav tsum sau npe gitlab-khiav, ua ssh-keygen, upload cov pej xeem ssh yuam sij ntawm lub tshuab no rau .ssh/authorized_keys ntawm lub tshuab tswv, qhib chaw nres nkoj 22 rau ansible ntawm lub tshuab master.

Tam sim no cia peb configure ansible

Txij li thaum peb lub hom phiaj yog automate txhua yam uas ua tau. Hauv cov ntaub ntawv /etc/ansible/ansible.cfg peb yuav uncomment tus kab host_key_checking = Falseyog li ntawd ansible tsis thov kom paub meej txog cov tshuab tshiab.

Tom ntej no, koj yuav tsum tau cia li tsim ib daim ntawv teev cov ntaub ntawv rau ansible, los ntawm qhov chaw nws yuav coj tus ip ntawm cov cav tov uas koj yuav tsum tau ua git rub.

Peb tsim cov ntaub ntawv no siv Hetzner's API, koj tuaj yeem nqa cov npe ntawm cov tswv los ntawm koj li AWS, Asure, database (koj muaj API qhov twg los tso saib koj lub tshuab khiav, puas yog?).

Cov qauv ntawm cov ntaub ntawv khaws tseg tseem ceeb heev rau Ansible; nws yuav tsum zoo li no:

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

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

Txhawm rau tsim cov ntaub ntawv zoo li no, peb yuav ua ib tsab ntawv yooj yim (cia hu nws 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

Nws yog lub sijhawm los xyuas tias Ansible ua haujlwm thiab ua phooj ywg nrog tau txais IP chaw nyob:

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

Cov zis yuav tsum muaj cov hostnames ntawm cov tshuab uas cov lus txib raug tua.
Ob peb lo lus hais txog syntax:

  • /etc/ansible/./vm_list - tsim cov npe ntawm cov tshuab
  • -i - txoj hauv kev zoo rau cov ntaub ntawv khaws tseg
  • -m - qhia ansible siv lub plhaub module
  • -a yog qhov kev sib cav. Ib qho lus txib tuaj yeem nkag rau ntawm no
  • pab pawg — lub npe ntawm koj pawg. Yog tias koj xav ua qhov no rau txhua pawg, hloov pab pawg rau txhua tus

Cia peb mus ntxiv - cia peb sim ua git rub ntawm peb cov tshuab virtual:

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

Yog hais tias nyob rau hauv cov zis peb pom twb mus txog hnub los yog unloading ntawm lub repository, ces txhua yam yog ua hauj lwm.

Tam sim no qhov no yog txhua yam nws tau ua rau

Cia peb qhia peb tsab ntawv kom khiav tau txais thaum cog lus rau tus tswv ceg hauv gitlab

Ua ntej, cia peb ua peb tsab ntawv zoo nkauj dua thiab muab tso rau hauv cov ntaub ntawv ua tiav (cia hu nws exec_pull) -

#!/bin/bash

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

Cia peb mus rau peb gitlab thiab tsim cov ntaub ntawv hauv qhov project .gitlab-ci.yml
Peb muab cov hauv qab no tso rau hauv:

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 

Txhua yam yog npaj txhij. Tam sim no -

  • ua kev cog lus
  • Kuv zoo siab tias txhua yam ua haujlwm

Thaum hloov .yml rau lwm cov haujlwm, koj tsuas yog yuav tsum tau hloov lub npe ntawm cov kev pabcuam kom rov pib dua thiab lub npe ntawm pawg uas cov lus txib ansible yuav raug tua.

Tau qhov twg los: www.hab.com

Ntxiv ib saib