ښه ورځ
موږ په هر یو کې د ډیری مجازی ماشینونو سره ډیری کلاوډ کلسترونه لرو. موږ دا ټوله سوداګرۍ په هټزنر کې کوربه کوو. په هر کلستر کې موږ یو ماسټر ماشین لرو، یو سنیپ شاټ له هغې څخه اخیستل کیږي او په اتوماتيک ډول د کلستر دننه ټولو مجازی ماشینونو ته ویشل کیږي.
دا سکیم موږ ته اجازه نه راکوي چې په نورمال ډول د ګیټلاب چلونکي وکاروو ، ځکه چې ډیری ستونزې رامینځته کیږي کله چې ډیری ورته راجسټر شوي ریسران را څرګندیږي ، کوم چې موږ ته د حل لارې موندلو او دا مقاله / لارښود لیکلو ته وهڅوو.
دا شاید غوره عمل نه وي، مګر دا حل د امکان تر حده اسانه او ساده ښکاري.
د ښوونې لپاره، مهرباني وکړئ بلی وګورئ.
په ماسټر ماشین کې اړین کڅوړې:
- پيډون
- لاړ شه
- فایل د ssh کلیدونو سره
په ټولو مجازی ماشینونو کې د اتوماتیک ګټ پل پلي کولو عمومي اصول دا دي چې تاسو داسې ماشین ته اړتیا لرئ چې ځواب به یې نصب شي. د دې ماشین څخه، ځواب ورکوونکي به د ګیټ پل کمانډونه واستوي او هغه خدمت بیا پیل کړي چې تازه شوی. د دې موخو لپاره، موږ د کلسترونو څخه بهر یو جلا مجازی ماشین جوړ کړ او نصب یې کړ:
- پيډون
- ځواب ویونکی
- gitlab-رنر
د سازماني مسلو څخه - تاسو اړتیا لرئ د gitlab-runner راجستر کړئ، ssh-keygen جوړ کړئ، د دې ماشین عامه ssh کیلي پورته کړئ .ssh/authorized_keys
په ماسټر ماشین کې ، په ماسټر ماشین کې د ځواب ویلو لپاره پورټ 22 خلاص کړئ.
اوس راځئ چې د ځواب وړ ترتیب کړو
ځکه چې زموږ هدف د هر هغه څه اتومات کول دي چې ممکن وي. په دوتنه کې /etc/ansible/ansible.cfg
موږ به دا کرښه غیر تبصره کړو host_key_checking = False
نو ځکه ځواب ورکوونکي د نوي ماشینونو تایید غوښتنه نه کوي.
بیا ، تاسو اړتیا لرئ په اوتومات ډول د ځواب ویلو لپاره د لیست فایل رامینځته کړئ ، له هغه ځایه به دا د ماشینونو ip واخلي چې تاسو ورته اړتیا لرئ git pull ترسره کړئ.
موږ دا فایل د هیټزنر API په کارولو سره رامینځته کوو ، تاسو کولی شئ د خپل AWS ، Asure ، ډیټابیس څخه د کوربه توب لیست واخلئ (تاسو د چلولو ماشینونو ښودلو لپاره یو API لرئ ، سمه ده؟).
د انوینټری فایل جوړښت د ځواب وړ لپاره خورا مهم دی؛ دا باید داسې ښکاري:
[группа]
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
دا وخت دی چې وګورو چې ځواب ورکونکی کار کوي او د IP پتې ترلاسه کولو سره دوستانه دی:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group
محصول باید د ماشینونو کوربه نومونه ولري په کوم کې چې کمانډ اجرا شوی و.
د نحو په اړه یو څو خبرې:
- /etc/ansible/./vm_list - د ماشینونو لیست جوړ کړئ
- -i - د لیست فایل ته مطلق لاره
- -m - د شیل ماډل کارولو لپاره ځواب ورکوونکي ته ووایاست
- - یو دلیل دی. دلته هر ډول کمانډ داخل کیدی شي
- ګروپ - ستاسو د کلستر نوم. که تاسو اړتیا لرئ دا په ټولو کلسترونو کې وکړئ، ټول ګروپ ته بدل کړئ
راځئ نور لاړ شو - راځئ هڅه وکړو چې زموږ په مجازی ماشینونو کې git pull ترسره کړو:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group
که په محصول کې موږ لا دمخه د ذخیره کولو څخه تازه یا پورته کول وګورو ، نو هرڅه کار کوي.
اوس دا هغه څه دي چې دا ټول د دې لپاره و
راځئ چې زموږ سکریپټ زده کړو چې په اوتومات ډول چلیږي کله چې په ګیټلاب کې ماسټر څانګې ته ژمن وي
لومړی، راځئ چې زموږ سکریپټ ډیر ښکلی کړو او د اجرا وړ فایل کې یې واچوو (راځئ چې ورته exec_pull ووایو) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
راځئ چې زموږ ګیټلاب ته لاړ شو او په پروژه کې فایل جوړ کړو .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 لیږدئ، تاسو اړتیا لرئ د بیا پیل کولو لپاره د خدمت نوم بدل کړئ او د کلستر نوم چې په هغه کې د منلو وړ امرونه به اجرا شي.
سرچینه: www.habr.com