Ansible + auto git ကို cloud ရှိ virtual machines အစုအဝေးတွင် ဆွဲယူပါ။

Ansible + auto git ကို cloud ရှိ virtual machines အစုအဝေးတွင် ဆွဲယူပါ။

ကောင်းသောနေ့

တစ်ခုစီတွင် virtual machines အများအပြားရှိသည့် cloud အစုအဝေးများစွာရှိသည်။ ကျွန်ုပ်တို့သည် ဤလုပ်ငန်းတစ်ခုလုံးကို Hetzner တွင် လက်ခံကျင်းပပါသည်။ အစုအဝေးတစ်ခုစီတွင် ကျွန်ုပ်တို့တွင် မာစတာစက်တစ်လုံးရှိသည်၊ ၎င်းမှလျှပ်တစ်ပြက်တစ်ပုံကိုယူကာ အစုအဝေးအတွင်းရှိ virtual machines အားလုံးကို အလိုအလျောက်ဖြန့်ဝေသည်။

အလားတူ မှတ်ပုံတင်ထားသော အပြေးသမားများစွာ ပေါ်လာသောအခါ ပြဿနာများစွာ ပေါ်ပေါက်လာသောကြောင့် ဤအစီအစဥ်သည် ကျွန်ုပ်တို့အား ဖြေရှင်းချက်ရှာပြီး ဤဆောင်းပါး/လက်စွဲစာအုပ်ကို ရေးသားရန် လှုံ့ဆော်ပေးသောကြောင့် ဤအစီအစဥ်သည် ကျွန်ုပ်တို့အား ပုံမှန်အတိုင်း အသုံးပြုခွင့်မပြုပါ။

ဒါက အကောင်းဆုံးအလေ့အကျင့်မဟုတ်ပေမယ့် ဒီဖြေရှင်းချက်က တတ်နိုင်သမျှ အဆင်ပြေပြီး ရိုးရှင်းပုံပေါက်ပါတယ်။

သင်ခန်းစာအတွက်၊ ကျေးဇူးပြု၍ ကြောင်ကိုကြည့်ပါ။

မာစတာစက်တွင် လိုအပ်သော ပက်ကေ့ဂျ်များ

  • Python နှင့်
  • git
  • ssh သော့များဖြင့်ဖိုင်

virtual machines အားလုံးတွင် အလိုအလျောက်အူဆွဲခြင်းကို အကောင်အထည်ဖော်ခြင်း၏ ယေဘူယျနိယာမမှာ Ansible တပ်ဆင်မည့် စက်တစ်ခု လိုအပ်ပါသည်။ ဤစက်မှ၊ ansible သည် git pull commands များပေးပို့ပြီး မွမ်းမံထားသောဝန်ဆောင်မှုကို ပြန်လည်စတင်မည်ဖြစ်သည်။ ဤရည်ရွယ်ချက်များအတွက်၊ ကျွန်ုပ်တို့သည် အစုအဖွဲ့များအပြင်ဘက်တွင် သီးခြား virtual machine တစ်ခုကို ဖန်တီးပြီး ၎င်းတွင် ထည့်သွင်းထားသည်-

  • Python နှင့်
  • မြင်နေရတယ်
  • gitlab-အပြေးသမား

အဖွဲ့အစည်းဆိုင်ရာ ပြဿနာများမှ - သင်သည် gitlab-runner ကို စာရင်းသွင်းရန်၊ ssh-keygen ပြုလုပ်ရန်၊ ဤစက်၏ အများသူငှာ ssh သော့ကို အပ်လုဒ်လုပ်ရန် လိုအပ်ပါသည်။ .ssh/authorized_keys master machine တွင်၊ master machine တွင် ansible အတွက် port 22 ကိုဖွင့်ပါ။

အခု ansible ကို configure လုပ်ကြည့်ရအောင်

အဘယ်ကြောင့်ဆိုသော် ကျွန်ုပ်တို့၏ ရည်မှန်းချက်မှာ ဖြစ်နိုင်သမျှ အရာအားလုံးကို အလိုအလျောက် ပြောင်းလဲရန်ဖြစ်သည်။ ဖိုင်ထဲမှာ /etc/ansible/ansible.cfg လိုင်းကို မှတ်ချက်ပေးပါမည်။ host_key_checking = Falseထို့ကြောင့် ansible သည် စက်အသစ်များ၏ အတည်ပြုချက်ကို မတောင်းပါ။

ထို့နောက်၊ သင်သည် ansible အတွက် စာရင်းဖိုင်တစ်ခုကို အလိုအလျောက်ထုတ်ပေးရန် လိုအပ်သည်၊ ၎င်းသည် သင် git ဆွဲရန် လိုအပ်သည့် စက်များ၏ ip ကိုယူမည့်နေရာမှ ansible ဖြစ်သည်။

Hetzner ၏ API ကို အသုံးပြု၍ ဤဖိုင်ကို ကျွန်ုပ်တို့ထုတ်လုပ်သည်၊ သင်သည် သင်၏ AWS၊ Asure၊ ဒေတာဘေ့စ်မှ လက်ခံဆောင်ရွက်ပေးသူစာရင်းကို ယူနိုင်သည် (သင်၏လည်ပတ်နေသောစက်များကိုပြသရန် တစ်နေရာရာမှာ API တစ်ခုရှိပါသလား။

Inventory file ၏ ဖွဲ့စည်းပုံသည် Ansible အတွက် အလွန်အရေးကြီးသည်၊ ၎င်းသည် ဤကဲ့သို့ ဖြစ်သင့်သည်-

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

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

ထိုသို့သောဖိုင်ကိုဖန်တီးရန်၊ ကျွန်ုပ်တို့သည် ရိုးရှင်းသော ဇာတ်ညွှန်းတစ်ခုကို ပြုလုပ်ပါမည် (အဲဒါကို ခေါ်ကြပါစို့ 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

Ansible သည် အလုပ်လုပ်ပြီး IP လိပ်စာများကို လက်ခံရရှိခြင်းတွင် အဆင်ပြေကြောင်း စစ်ဆေးရန် အချိန်တန်ပြီ-

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

အထွက်တွင် အမိန့်ကို လုပ်ဆောင်သည့် စက်များ၏ hostname များ ပါဝင်သင့်သည်။
syntax အကြောင်း စကားလုံးအနည်းငယ်

  • /etc/ansible/./vm_list - စက်များစာရင်းကို ဖန်တီးပါ။
  • -i - စာရင်းဖိုင်သို့ ပကတိလမ်းကြောင်း
  • -m - shell module ကိုအသုံးပြုရန် ansible ကိုပြောပြပါ။
  • -a သည် အငြင်းအခုံဖြစ်သည်။ မည်သည့် command ကို ဤနေရာတွင် ထည့်သွင်းနိုင်သည်။
  • အဖွဲ့ — သင့်အစုအဝေး၏အမည်။ ၎င်းကို အစုအဝေးအားလုံးတွင် ပြုလုပ်ရန် လိုအပ်ပါက၊ အုပ်စုအားလုံးကို ပြောင်းလဲပါ။

ရှေ့ဆက်ကြပါစို့ - ကျွန်ုပ်တို့၏ virtual machines များပေါ်တွင် git pull လုပ်ရန်ကြိုးစားကြပါစို့။

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

အထွက်တွင် အပ်ဒိတ်ဖြစ်နေပြီ သို့မဟုတ် သိုလှောင်ခန်းမှ လွှင့်တင်နေသည်ကို တွေ့ပါက၊ အားလုံးသည် အလုပ်ဖြစ်နေပြီဖြစ်သည်။

ယခု ဤအရာသည် အားလုံးအတွက် ရည်ရွယ်ထားခြင်းဖြစ်သည်။

gitlab ရှိ မာစတာဌာနခွဲထံ အပ်နှံသည့်အခါ ကျွန်ုပ်တို့၏ script ကို အလိုအလျောက်လည်ပတ်ရန် သင်ပေးကြပါစို့

ပထမဦးစွာ၊ ကျွန်ုပ်တို့၏ script ကို ပိုမိုလှပအောင်ပြုလုပ်ပြီး executable file တွင်ထည့်ကြပါစို့ (အဲဒါကို exec_pull ဟုခေါ်ကြပါစို့) -

#!/bin/bash

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

ကျွန်ုပ်တို့၏ gitlab သို့သွား၍ ပရောဂျက်တွင် ဖိုင်တစ်ခုဖန်တီးကြပါစို့ .gitlab-ci.yml
ကျွန်ုပ်တို့သည် အတွင်း၌ အောက်ပါတို့ကို ထားရှိသည်။

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 

အားလုံးအဆင်သင့်ဖြစ်နေပါပြီ။ အခု -

  • ကတိတည်ပါ။
  • အားလုံးအဆင်ပြေလို့ ဝမ်းသာပါတယ်။

.yml ကို အခြားပရောဂျက်များသို့ လွှဲပြောင်းသည့်အခါ၊ ပြန်လည်စတင်ရန် ဝန်ဆောင်မှု၏အမည်နှင့် ansible command များကို လုပ်ဆောင်မည့် အစုအဝေး၏အမည်ကို ပြောင်းလဲရန် လိုအပ်ပါသည်။

source: www.habr.com

မှတ်ချက် Add