Ansible + Auto Git Pull an engem Cluster vu virtuelle Maschinnen an der Wollek

Ansible + Auto Git Pull an engem Cluster vu virtuelle Maschinnen an der Wollek

Gudden Dag

Mir hunn e puer Cloud Cluster mat enger grousser Zuel vu virtuelle Maschinnen an all. Mir hosten dat ganzt Geschäft bei Hetzner. An all Cluster hu mir eng Mastermaschinn, e Schnappschëss gëtt dovun geholl an automatesch op all virtuell Maschinnen am Cluster verdeelt.

Dëse Schema erlaabt eis net gitlab-Runner normalerweis ze benotzen, well vill Probleemer entstinn wann vill identesch registréiert Leefer optrieden, wat eis opgefuerdert huet eng Léisung ze fannen an dësen Artikel / Handbuch ze schreiwen.

Dëst ass wahrscheinlech net déi bescht Praxis, awer dës Léisung schéngt sou bequem an einfach wéi méiglech ze sinn.

Fir den Tutorial, kuckt w.e.g. Cat.

Néideg Packagen op der Master Maschinn:

  • Python
  • Go
  • Datei mat ssh Schlësselen

Den allgemenge Prinzip fir automatesch Darmzuch op all virtuelle Maschinnen ëmzesetzen ass datt Dir eng Maschinn braucht op där Ansible installéiert gëtt. Vun dëser Maschinn wäert d'Ansible git Pull Kommandoen schécken an de Service nei starten deen aktualiséiert gouf. Fir dës Zwecker hu mir eng separat virtuell Maschinn ausserhalb vun de Cluster erstallt an drop installéiert:

  • Python
  • Sprooch ass
  • gitlab-runner

Vun organisatoreschen Themen - Dir musst gitlab-runner registréieren, ssh-keygen maachen, den ëffentleche ssh Schlëssel vun dëser Maschinn eroplueden .ssh/authorized_keys op der Meeschtesch Maschinn, oppen port 22 fir ansible op der Meeschtesch Maschinn.

Elo loosst eis konfiguréieren

Well eist Zil ass alles ze automatiséieren wat méiglech ass. Am Dossier /etc/ansible/ansible.cfg mir wäerten d'Linn decommentéieren host_key_checking = Falsesou datt ansible net fir Bestätegung vun neie Maschinnen froen.

Als nächst musst Dir automatesch eng Inventardatei generéieren fir ansible, vu wou se d'IP vun de Maschinnen huelen, op deenen Dir Git Pull maache musst.

Mir generéieren dës Datei mat Hetzner's API, Dir kënnt d'Lëscht vun den Hosten aus Ärer AWS, Asure, Datebank huelen (Dir hutt iergendwou eng API fir Är lafend Maschinnen ze weisen, richteg?).

D'Struktur vun der Inventardatei ass ganz wichteg fir Ansible; et soll esou ausgesinn:

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

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

Fir esou eng Datei ze generéieren, maache mir en einfache Skript (loosst eis et nennen 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

Et ass Zäit ze kontrolléieren datt Ansible funktionnéiert a frëndlech ass mat der Empfang vun IP Adressen:

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

D'Ausgab soll d'Hostname vun de Maschinnen enthalen, op deenen de Kommando ausgefouert gouf.
E puer Wierder iwwer Syntax:

  • /etc/ansible/./vm_list - generéiert eng Lëscht vu Maschinnen
  • -i - absolute Wee fir d'Inventardatei
  • -m - soen ansible der Réibau Modul ze benotzen
  • -a ass d'Argument. All Kommando kann hei aginn ginn
  • Grupp - den Numm vun Ärem Cluster. Wann Dir dëst op all Stärekéip maache musst, ännert d'Grupp op all

Loosst eis weider goen - loosst eis probéieren Git Pull op eise virtuelle Maschinnen ze maachen:

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

Wa mir am Output scho aktuell gesinn oder aus dem Repository entluede sinn, da funktionnéiert alles.

Elo ass dat fir wat alles geduecht war

Loosst eis eise Skript léiere fir automatesch ze lafen wann Dir an d'Meeschtesch Branche am gitlab engagéiert

Als éischt, loosst eis eise Skript méi schéin maachen an et an eng ausführbar Datei setzen (loosst eis et exec_pull nennen) -

#!/bin/bash

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

Loosst eis op eise Gitlab goen an eng Datei am Projet erstellen .gitlab-ci.yml
Mir setzen déi folgend bannen:

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 

Alles ass prett. Elo -

  • engagéieren
  • Ech si frou datt alles funktionnéiert

Wann Dir .yml op aner Projeten transferéiert, musst Dir just den Numm vum Service änneren fir nei ze starten an den Numm vum Cluster op deem d'ansible Kommandoen ausgefouert ginn.

Source: will.com

Setzt e Commentaire