2019. 8. 23. 18:36ㆍ[정리] 기능별 개념 정리/AWX
Ansible
- 빌드된 파일을 다운받아서 특정 타겟 서버에 배포할 수 있다.
- Ansible 은 파이썬으로 만들어졌다.
개념
- 플레이북 : 작업 플로우
- 인벤토리 : 타겟 서버들 (여러개의 호스트 서버를 하나의 그룹으로 묶을수 있다.)
- 잡 : 처리해야하는 하나의 플로우
- 워크플로우 : 잡의 Sequence 한 연결
서버에 openJDK 와 my-application 을 설치하는 플레이북의 디렉토리 구조 예시
/my-application-playbook/files/rsa.pub : host 서버와 통신을 하기 위한 공개키 저장공간
/my-application-playbook/group_vars :구조체 변수들의 집합
/my-application-playbook/inventory/host : host 서버들의 집합
/my-application-playbook/roles/{ ... }/tasks/main.yml : 앤서블 task를 작성하는 곳
/my-application-playbook/roles/{ ... }/defaults/main.yml : 앤서블 task (tasks/main.yml) 에서 사용하는 변수들을 저장하는 곳
/my-application-playbook/my_application_dev.yml : 사용자가 ~ 태그로 작업을 요청하면 이러한 role 들을 이용해서 배포하라를 작성
ansible 사용자는 my-playbook 에 들어가서 다음과 같은 커맨드로 playbook 을 조작할 수 있다.
ansible-playbook my_application_dev.yml --tags setup
ansible-playbook my_application_dev.yml --tags pull --extra-vars '{"app_version”:”0.0.1-SNAPSHOT"}'
ansible-playbook my_application_dev.yml --tags start
태그 setup 은 openJDK 를 설치하는 내용을 작성해뒀다.
태그 pull 에는 넥서스에서 my-application.jar을 가져오는 내용을 작성해뒀다.
태그 start 에는 가져온 my-application.jar를 실행(배포)하는 내용을 작성했뒀다.
AWX 를 사용하면 위와 같이 커맨드를 입력해야하는 내용들을 웹에서 처리할 수 있다.
/my-application-playbook/my_application_dev.yml
- name: My application
hosts: my-application-server
serial: 1
become: True
vars:
app_name: my-application
app_jar: my-application.jar
app_params: --spring.profiles.active=deployment
roles:
- { role: common, tags: ['setup'] }
- { role: openJDK, tags: ['setup'] }
- { role: my-application, tags: [‘pull’, ‘start’] }
/my-application-playbook/inventory/host
[my-application-server]
my-application-server.com
/my-application-playbook/inventory/host
ansible_ssh_user: kok202
server_account:
group: kok202
user: kok202
/my-application-playbook/common/tasks/main.yml
- name: create directories for openJDK, application
file: path=/deployment/{{ item }} state=directory group={{ server_account.group }} owner={{ server_account.user }}
become: yes
with_items:
- openJDK
- application
- name: create directories for application
file: path=/deployment/application/{{ app_name }} state=directory group={{ server_account.group }} owner={{ server_account.user }}
/my-application-playbook/openJDK/defaults/main.yml
openjdk_version: 8u212
openjdk_version_build: b04
openjdk_base_url: https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u212-b04/
openjdk_file: OpenJDK8U-jdk_x64_linux_hotspot_8u212b04.tar.gz
openjdk_home: /deployment/openJDK/java
/my-application-playbook/openJDK/tasks/main.yml
- name: Download openjdk tarball
get_url: >
url={{ openjdk_base_url }}/{{ openjdk_file }}
dest=/tmp/{{ openjdk_file }}
- name: Unarchive openjdk tag.gz
unarchive: >
src=/tmp/{{ openjdk_file }}
dest=/deployment/openJDK
copy=no
- name: Create symbolic link for java
file: >
path={{ openjdk_home }}
src=/deployment/openJDK/jdk{{openjdk_version}}-{{ openjdk_version_build }}
state=link
/my-application-playbook/my-application/defaults/main.yml
java_home: /deployment/openJDK/java
jvm_xms: 2g
jvm_xmx: 2g
mavne_host: my-maven-host.com
app_params: --spring.profiles.active=development
app_artifact_repo: my-applicaiton-snapshot-repo
app_artifact_group: com.kok202.myapplication
/my-application-playbook/my-application/tasks/main.yml
- name: download application jar
get_url: >
url=http://{{ maven_host }}/service/local/artifact/maven/redirect?r={{ app_artifact_repo }}&g={{ app_artifact_group }}&a={{ app_name }}&v={{ app_version }}
dest=/deployment/application/{{ app_name }}/{{ app_name}}-{{ app_artifact_version }}.jar
force=yes
when: app_version is defined
tags:
- pull
- name: start application
command: java -jar /deployment/application/{{ app_name }}/
tags:
- start