JJONG`sFACTORY
반응형
 

서론

저번에 Ansible role을 일단 만들어 두었는데, 이를 이용하여 github을 여러 서버에 배포하는 playbook을 만들어 보자.

만든 role의 tree 구조는 다음과 같다.

bash
. ├── 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에 작성한다.

bash
--- # 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 파일을 생성해 준다.

해당 파일에 다음과 같이 작성했다.

bash
- 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

 

ansible.builtin.copy module – Copy files to remote locations — Ansible Documentation

The permissions of the destination file or directory. For those used to /usr/bin/chmod remember that modes are actually octal numbers. You must either add a leading zero so that Ansible’s YAML parser knows it is an octal number (like 0644 or 01777) or qu

docs.ansible.com

 

다음으로, main.yml에 다음과 같이 작성한다.

bash
--- # 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을 작성한다.

bash
- name: arkinfo depoly role hosts: [host_name] become: yes roles: - role: [role_name]

이후, playbook을 실행 한 뒤, git 배포가 정상적으로 이루어졌는지 확인한다.

bash
ansible-playbook [playbook-file]

나중에는 push시에 자동적으로 처리 되게 하고, 해당 로그를 확인해야 하니

/etc/ansible/ansible.cfg 파일을 수정해 준다.

bash
[defaults] log_path=/var/log/ansible/ansible.log

실행시 정상적으로 로그가 쌓이는 것 까지 확인이 가능했다.

 

다음은, gitAction을 이용하여 push시 ansible playbook을 실행해서 자동배포를 진행해보자!

반응형