서론
저번에 Ansible role을 일단 만들어 두었는데, 이를 이용하여 github을 여러 서버에 배포하는 playbook을 만들어 보자.
만든 role의 tree 구조는 다음과 같다.
.
├── README.md
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
변수 세팅
정적 변수는 defaults의 main.yml에 작성한다.
---
# defaults file for arkinfo-deploy
server_dir: /server/dir/path
server_git_url: https://github.com/githubpath.git
client_dir: /client/dir/path
client_git_url: https://github.com/githubpath.git
일단 server쪽만 배포할 거긴 한데, client쪽도 먼저 넣어 두었다.
Task 작성
/tasks 쪽에 작업할 tasks들을 작성해 준다.
일단은 서버 배포쪽을 처리하는 것만 샘플로 만들어 둘 것이기 때문에,
deploy_server.yml 파일을 생성해 준다.
해당 파일에 다음과 같이 작성했다.
- name: Deploy Laravel Server To EC2 Instance
git:
repo: "{{server_git_url}}"
dest: "{{server_dir}}"
clone: no
update: yes
- name: Install application dependencies
shell: "cd {{server_dir}} && composer install --no-interaction --prefer-dist --optimize-autoloader"
laravel을 자동 배포 할 것이고, 의존성 파일이 업데이트 될 수 있으니, composer install을 추가적으로 작성해 주었다.
만약, .env 파일이 변경이 되고 여러 서버에 배포해야 된다면 일일히 .env 파일을 변경해줘야 할 텐데
files 하위에 .env파일을 작성해 두고
대상 파일을 copy하여 넣어주도록 하면 모든 배포 서버에 .env 파일을 적용 할 수 있을 것이다.
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html
다음으로, main.yml에 다음과 같이 작성한다.
---
# tasks file for arkinfo-depoly
- name: deploy server
import_tasks: deploy_server.yml
import_tasks로 deploy_server.yml을 추가 하였는데,
눈치가 빠르신 분들은 여기서 여러 tasks를 추가 할 수 있다는 것을 눈치 채셨을 거다.
이렇게 다양한 tasks들을 분리하여 관리 함 으로서, playbook들을 유지보수 하기가 쉬워진다.
룰 실행 playbook 작성
적당한 위치에 (저같은 경우에는 /etc/ansible/playbooks에 생성 했습니다.) role을 실행할 playbook을 작성한다.
- name: arkinfo depoly role
hosts: [host_name]
become: yes
roles:
- role: [role_name]
이후, playbook을 실행 한 뒤, git 배포가 정상적으로 이루어졌는지 확인한다.
ansible-playbook [playbook-file]
나중에는 push시에 자동적으로 처리 되게 하고, 해당 로그를 확인해야 하니
/etc/ansible/ansible.cfg 파일을 수정해 준다.
[defaults]
log_path=/var/log/ansible/ansible.log
실행시 정상적으로 로그가 쌓이는 것 까지 확인이 가능했다.
다음은, gitAction을 이용하여 push시 ansible playbook을 실행해서 자동배포를 진행해보자!
'DevOps' 카테고리의 다른 글
TypeScript에 jest를 적용해보자 (0) | 2023.05.08 |
---|---|
[Ansible] Ansible + git Action + EC2 자동배포 + IAM 보안 설정 (0) | 2023.04.27 |
[gitAction] Ansible + gitAction을 이용한 EC2 자동배포 (0) | 2023.04.26 |
[Ansible] Ansible roles (0) | 2023.04.25 |
[Ansible] Ansible install + EC2 ping test (0) | 2023.04.25 |