ื ืืืื ืืื
ืืืจ ืืึธืื ืขืืืขืืข ืืืึธืืงื ืงืืึทืกืืขืจื ืืื ืึท ืืจืืืก ื ืืืขืจ ืคืื ืืืืจืืืึทื ืืืฉืื ืขื ืืื ืืขืืขืจ. ืืขื ืืึทื ืฆื ืืขืฉืขืคึฟื ืืืจ ืืึทืืึทืืื ืืฒึท ืืขืฆื ืขืจ. ืืื ืืขืืขืจ ืงื ืืื ืืืจ ืืึธืื ืืืื ืืขื ืืึทืฉืื, ืึท ืืึธืืขื ืืืืื ืืื ืืขื ืืืขื ืคืื ืขืก ืืื ืืืืืึธืืึทืืืฉ ืคืื ืื ืืขืจืืขืืืืื ืฆื ืึทืืข ืืืืจืืืึทื ืืืฉืื ืขื ืืื ืืขื ืงื ืืื.
ืืขืจ ืกืืขืืข ืงืขื ื ืืฉื ืืึธืื ืืื ืื ื ืึธืจืืึทืื ื ืืฆื ืืืืืึทื-ืจืึทื ืขืจื, ืืืืึทื ืคืืืข ืคึผืจืึธืืืขืืก ืฉืืืืขื ืืืขื ืคืืืข ืืืืขื ืืงืึทื ืจืขืืืกืืจืืจื ืจืึทื ืขืจื ืืขืจืฉืืึทื ืขื, ืืืึธืก ืคึผืจืึทืืคึผืืื ืืื ืื ืฆื ืืขืคึฟืื ืขื ืึท ืืืึธืจืงืึทืจืึธืื ื ืืื ืฉืจืืึทืื ืืขื ืึทืจืืืงื / ืืึทื ืืึทื.
ืืึธืก ืืื ืืืกืืึธืืข ื ืืฉื ืืขืจ ืืขืกืืขืจ ืคืืจ, ืึธืืขืจ ืื ืืืืืื ื ืืื ืืขืืืขื ืืื ืืึทืงืืืขื ืืื ืคึผืฉืื ืืื ืืขืืืขื.
ืคึฟืึทืจ ืื ืืืืึธืจืืึทื, ืืืืข ืืขื ืงืึทืฅ.
ืคืืจืืื ืื ืคึผืึทืงืึทืืืฉืึทื ืืืืฃ ืื ืืขื ืืึทืฉืื:
- ืคึผืืืืึธื
- ืืืื
- ืืขืงืข ืืื ssh ืฉืืืกืืขื
ืืขืจ ืืขื ืขืจืึทื ืคึผืจืื ืฆืืคึผ ืคืื ืืืคึผืืึทืืขื ืื ื ืึธืืึทืืึทืืืง ืืื ืฆืืขื ืืืืฃ ืึทืืข ืืืืจืืืึทื ืืืฉืื ืขื ืืื ืึทื ืืืจ ืืึทืจืคึฟื ืึท ืืึทืฉืื ืืืืฃ ืืืึธืก Ansible ืืืขื ืืืื ืืื ืกืืึทืืืจื. ืคึฟืื ืืขื ืืึทืฉืื, ืึทื ืกืืืืข ืืืขื ืฉืืงื ืืื ืคึผืื ืงืึทืืึทื ืื ืืื ืจืืกืืึทืจื ืื ืกืขืจืืืืก ืืืึธืก ืืื ืืขืจืืืึทื ืืืงื. ืคึฟืึทืจ ืื ืฆืืืขืงื, ืืืจ ืืืฉืืคื ืึท ืืึทืืื ืืขืจ ืืืืจืืืึทื ืืึทืฉืื ืึทืจืืืก ืื ืงืืึทืกืืขืจื ืืื ืืื ืกืืึทืืืจื ืืืืฃ ืขืก:
- ืคึผืืืืึธื
- ืึทื ืกืึทืืืข
- ืืืืืึทื-ืจืึทื ืขืจ
ืคึฟืื ืึธืจืืึทื ืึทืืืืฉืึทื ืึทื ืืฉืื - ืืืจ ืืึทืจืคึฟื ืฆื ืคืึทืจืฉืจืืึทืื ืืืืืึทื-ืจืึทื ืขืจ, ืืึทืื ssh-keygen, ืฆืืคึฟืขืืืงืขืจ ืืขื ืฆืืืืจ ssh ืฉืืืกื ืคืื ืืขื ืืึทืฉืื ืฆื .ssh/authorized_keys
ืืืืฃ ืื ืืขื ืืึทืฉืื, ืขืคึฟืขื ืขื ืคึผืึธืจื 22 ืคึฟืึทืจ ืึทื ืกืึทืืึทื ืืืืฃ ืื ืืขื ืืึทืฉืื.
ืืืฆื ืืึธืื ืก ืงืึทื ืคืืืืขืจ ืึทื ืกืืืืข
ืืื ื ืืื ืืืขืจ ืฆืื ืืื ืฆื ืึธืืึทืืืื ืึทืืฅ ืืืึธืก ืืื ืืขืืืขื. ืืื ืืขืงืข /etc/ansible/ansible.cfg
ืืืจ ืืืขืื ืึธืคึผืฉืึทืฆื ืื ืฉืืจื host_key_checking = False
ืึทืืื ืึทื ืึทื ืกืืืืข ืืื ื ืืฉื ืคืจืขืื ืคึฟืึทืจ ืืึทืฉืืขืืืงืื ื ืคืื ื ืืึท ืืืฉืื ืขื.
ืืขืจื ืึธื, ืืืจ ืืึทืจืคึฟื ืฆื ืืืืืึธืืึทืืืฉ ืืืฉืขื ืขืจืืื ืึทื ืื ืืืึทื ืืึธืจื ืืขืงืข ืคึฟืึทืจ ืึทื ืกืืืืข, ืคึฟืื ืืื ืขืก ืืืขื ื ืขืืขื ืื IP ืคืื ืื ืืืฉืื ืขื ืืืืฃ ืืืึธืก ืืืจ ืืึทืจืคึฟื ืฆื ืืึธื ืืื.
ืืืจ ืืืฉืขื ืขืจืืื ืืขื ืืขืงืข ื ืืฆื Hetzner's API, ืืืจ ืงืขื ืขื ื ืขืืขื ืื ืจืฉืืื ืคืื ืืื ืืช ืคึฟืื ืืืื AWS, Asure, ืืึทืืึทืืืืก (ืืืจ ืืึธื ืึทื ืึทืคึผื ืขืจืืขืฅ ืฆื ืืืืึทืื ืืืื ืคืืืกื ืืืง ืืืฉืื ืขื, ืจืขืื?).
ืื ืกืืจืืงืืืจ ืคืื ืื ืื ืืืึทื ืืึธืจื ืืขืงืข ืืื ืืืืขืจ ืืืืืืืง ืคึฟืึทืจ 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
ืืขืจ ืจืขืืืืืึทื ืืึธื ืึทื ืืืึทืืื ืื ืืึธืกืื ืึทืืขืก ืคืื ืื ืืืฉืื ืขื ืืืืฃ ืืืึธืก ืื ืืึทืคึฟืขื ืืื ืขืงืกืึทืงืืืืึทื.
ืขืืืขืืข ืืืขืจืืขืจ ืืืขืื ืกืื ืืึทืงืก:
- /etc/ansible/./vm_list - ืืืฉืขื ืขืจืืื ืึท ืจืฉืืื ืคืื ืืืฉืื ืขื
- -ืืื - ืึทืืกืึธืืื ืืจื ืฆื ืื ืื ืืืึทื ืืึธืจื ืืขืงืข
- -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