เชถเซเชญ เชฆเชฟเชตเชธ
เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชเชฃเชพ เชเซเชฒเชพเชเชก เชเซเชฒเชธเซเชเชฐ เชเซ เชเซเชฎเชพเช เชฆเชฐเซเชเชฎเชพเช เชฎเซเชเซ เชธเชเชเซเชฏเชพเชฎเชพเช เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซ เชเซ. เช เชฎเซ เช เชธเชฎเชเซเชฐ เชตเซเชฏเชตเชธเชพเชฏเชจเซ เชนเซเชเซเชเชจเชฐ เชเชพเชคเซ เชนเซเชธเซเช เชเชฐเซเช เชเซเช. เชฆเชฐเซเช เชเซเชฒเชธเซเชเชฐเชฎเชพเช เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชเช เชฎเชพเชธเซเชเชฐ เชฎเชถเซเชจ เชเซ, เชคเซเชฎเชพเชเชฅเซ เชธเซเชจเซเชชเชถเซเช เชฒเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เชเซเชฒเชธเซเชเชฐเชจเซ เช เชเชฆเชฐเชจเชพ เชคเชฎเชพเชฎ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซเชฎเชพเช เชเชชเชฎเซเชณเซ เชตเชฟเชคเชฐเชฟเชค เชฅเชพเชฏ เชเซ.
เช เชธเซเชเซเชฎ เช เชฎเชจเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชคเซ เชจเชฅเซ, เชเชพเชฐเชฃ เชเซ เชเซเชฏเชพเชฐเซ เชเชฃเชพ เชธเชฎเชพเชจ เชจเซเชเชงเชพเชฏเซเชฒเชพ เชฆเซเชกเชตเซเชฐเซ เชฆเซเชเชพเชฏ เชเซ เชคเซเชฏเชพเชฐเซ เชเชฃเซ เชธเชฎเชธเซเชฏเชพเช เชเชญเซ เชฅเชพเชฏ เชเซ, เชเซเชฃเซ เช เชฎเชจเซ เช เชฒเซเช/เชฎเชพเชฐเซเชเชฆเชฐเซเชถเชฟเชเชพ เชฒเชเชตเชพ เชฎเชพเชเซเชจเซ เชเชเซเชฒ เชถเซเชงเชตเชพ เชฎเชพเชเซ เชชเซเชฐเซเชคเซเชธเชพเชนเชฟเชค เชเชฐเซเชฏเชพ เชนเชคเชพ.
เช เชเชฆเชพเช เชถเซเชฐเซเชทเซเช เชชเซเชฐเชฅเชพ เชจเชฅเซ, เชชเชฐเชเชคเซ เช เชเชเซเชฒ เชถเชเซเชฏ เชคเซเชเชฒเซ เช เชจเซเชเซเชณ เช เชจเซ เชธเชฐเชณ เชฒเชพเชเชคเซ เชนเชคเซ.
เชเซเชฏเซเชเซเชฐเซเชฏเชฒ เชฎเชพเชเซ, เชเซเชชเชพ เชเชฐเซเชจเซ เชฌเชฟเชฒเชพเชกเซ เชเซเช.
เชฎเชพเชธเซเชเชฐ เชฎเชถเซเชจ เชชเชฐ เชเชฐเซเชฐเซ เชชเซเชเซเชเซ:
- เช เชเชเชฐ
- เชเชฟเช
- ssh เชเซ เชธเชพเชฅเซ เชซเชพเชเชฒ
เชคเชฎเชพเชฎ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซ เชชเชฐ เชเชเซเชฎเซเชเชฟเช เชเช เชชเซเชฒ เชฒเชพเชเซ เชเชฐเชตเชพเชจเซ เชธเชพเชฎเชพเชจเซเชฏ เชธเชฟเชฆเซเชงเชพเชเชค เช เชเซ เชเซ เชคเชฎเชพเชฐเซ เชเช เชฎเชถเซเชจเชจเซ เชเชฐเซเชฐ เชเซ เชเซเชจเชพ เชชเชฐ Ansible เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. เช เชฎเชถเซเชจเชฎเชพเชเชฅเซ, เชเชตเชพเชฌเซเชฌเชฒ เชเชฟเช เชชเซเชฒ เชเชฎเชพเชจเซเชกเซเชธ เชฎเซเชเชฒเชถเซ เช เชจเซ เช เชชเชกเซเช เชเชฐเซเชฒเซ เชธเซเชตเชพเชจเซ เชชเซเชจเชเชถเชฐเซ เชเชฐเชถเซ. เช เชนเซเชคเซเช เชฎเชพเชเซ, เช เชฎเซ เชเซเชฒเชธเซเชเชฐเซเชจเซ เชฌเชนเชพเชฐ เชเช เช เชฒเช เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชฌเชจเชพเชตเซเชฏเซเช เช เชจเซ เชคเซเชจเชพ เชชเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฏเซเช:
- เช เชเชเชฐ
- เชเชตเชพเชฌเชฆเชพเชฐ
- gitlab-เชฐเชจเชฐ
เชธเชเชธเซเชฅเชพเชเซเชฏ เชฎเซเชฆเซเชฆเชพเชเชฎเชพเชเชฅเซ - เชคเชฎเชพเชฐเซ gitlab-runner เชจเซ เชจเซเชเชงเชฃเซ เชเชฐเชตเชพเชจเซ, ssh-keygen เชฌเชจเชพเชตเชตเชพเชจเซ, เช เชฎเชถเซเชจเชจเซ เชธเชพเชฐเซเชตเชเชจเชฟเช ssh เชเซ เช
เชชเชฒเซเชก เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ .ssh/authorized_keys
เชฎเชพเชธเซเชเชฐ เชฎเชถเซเชจ เชชเชฐ, เชฎเชพเชธเซเชเชฐ เชฎเชถเซเชจ เชชเชฐ เชเชตเชพเชฌ เชเชชเชตเชพ เชฎเชพเชเซ เชชเซเชฐเซเช 22 เชเซเชฒเซ.
เชนเชตเซ เชเชชเชฃเซ เชเชตเชพเชฌเซเชฌเชฒ เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเซเช
เชเชพเชฐเชฃ เชเซ เช
เชฎเชพเชฐเซ เชงเซเชฏเซเชฏ เชถเชเซเชฏ เชเซ เชคเซ เชฌเชงเซเช เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเชตเชพเชจเซ เชเซ. เชซเชพเชเชฒเชฎเชพเช /etc/ansible/ansible.cfg
เช
เชฎเซ เชฒเชพเชเชจเชจเซ เช
เชจเชเซเชฎเซเชจเซเช เชเชฐเซเชถเซเช host_key_checking = False
เชเซเชฅเซ เชเชตเชพเชฌเชฆเชพเชฐ เชจเชตเชพ เชฎเชถเซเชจเซเชจเซ เชชเซเชทเซเชเชฟ เชฎเชพเชเซ เชชเซเชเซ เชจเชนเซเช.
เชเชเชณ, เชคเชฎเชพเชฐเซ เชเชตเชพเชฌ เชเชชเชตเชพ เชฎเชพเชเซ เชเชชเชฎเซเชณเซ เชเชจเซเชตเซเชจเซเชเชฐเซ เชซเชพเชเชฒ เชเชจเชฐเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชเซเชฏเชพเชเชฅเซ เชคเซ เชฎเชถเซเชจเซเชจเซ เชเชเชชเซ เชฒเซเชถเซ เชเซเชจเชพ เชชเชฐ เชคเชฎเชพเชฐเซ เชเชฟเช เชชเซเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เช เชฎเซ Hetzner's 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 - เชถเซเชฒ เชฎเซเชกเซเชฏเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชตเชพเชฌเชฆเชพเชฐเชจเซ เชเชนเซ
- - เช เชฆเชฒเซเชฒ เชเซ. เชเซเชเชชเชฃ เชเชฆเซเชถ เช เชนเซเช เชฆเชพเชเชฒ เชเชฐเซ เชถเชเชพเชฏ เชเซ
- เชเซเชฅ - เชคเชฎเชพเชฐเชพ เชเซเชฒเชธเซเชเชฐเชจเซเช เชจเชพเชฎ. เชเซ เชคเชฎเชพเชฐเซ เชฌเชงเชพ เชเซเชฒเชธเซเชเชฐเซ เชชเชฐ เช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชฏ, เชคเซ เชฌเชงเชพเชฎเชพเช เชเซเชฅ เชฌเชฆเชฒเซ
เชเชพเชฒเซ เชเชเชณ เชเชเช - เชเชพเชฒเซ เชเชชเชฃเชพ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซ เชชเชฐ เชเชฟเช เชชเซเชฒ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช:
/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