Dockerfile 생성
FROM tomcat:9.0
COPY ./hello-world.war /usr/local/tomcat/webapps
- nano Dockerfile -
yml파일 작성
---
- hosts: all
tasks:
- name: build a Docker image with deployed war file
command: docker build -t cicd-project-ansible .
args:
chdir: /root
- name: create a container using cicd-project-ansible image
command: docker run -d --name my_cicd_project -p 8080:8080 cicd-project-ansible
-04 playbook.yml-
hosts 작성
[root@da462b619f64 ~]# cat hosts
172.17.0.2
문법체크
ansible로 실행
[root@da462b619f64 ~]# ansible-playbook -i hosts 04playbook.yml
결과 확인
PLAY [all] *************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************
ok: [172.17.0.2]
TASK [build a Docker image with deployed war file] *********************************************************************************************************************
changed: [172.17.0.2]
PLAY RECAP *************************************************************************************************************************************************************
172.17.0.2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
도커 이미지 확인
jenkins에서 플러그인 설치
Dashboard->Jenkins관리> System 설정
project설정 후 build
docker 컨테이너와 이미지 모두 제거
[root@da462b619f64 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
520ebbb2e5cb cicd-project-ansible "catalina.sh run" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp my_cicd_project
[root@da462b619f64 ~]# docker stop my_cicd_project
my_cicd_project
[root@da462b619f64 ~]# docker rm my_cicd_project
my_cicd_project
[root@da462b619f64 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cicd-project-ansible latest fba42d97c725 10 minutes ago 463MB
tomcat 9.0 cb2ad02d3907 3 days ago 455MB
cloudwoong/ansible latest 1ab2dc9acd96 13 months ago 1.65GB
[root@da462b619f64 ~]# docker rmi fba42d97c725
표시 파일확인
project 설정에서 명령어를 추가
jenkins에서 만든 것이 ansible로 자동으로 생성되는 것을 확인
scm
yml파일 수정
문법 확인 및 성공여부 확인
[root@da462b619f64 ~]# ansible-playbook --syntax -check 04playbook.yml
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
playbook: 04playbook.yml
[root@da462b619f64 ~]# ansible-playbook -i hosts 04playbook.yml
PLAY [all] ****************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************
ok: [172.17.0.2]
TASK [current running container stop] *************************************************************************************************
changed: [172.17.0.2]
TASK [remove stopped container] *******************************************************************************************************
changed: [172.17.0.2]
TASK [remove current docker image] ****************************************************************************************************
changed: [172.17.0.2]
TASK [build a Docker image with deployed war file] ************************************************************************************
changed: [172.17.0.2]
TASK [create a container using cicd-project-ansible image] ****************************************************************************
changed: [172.17.0.2]
PLAY RECAP ****************************************************************************************************************************
172.17.0.2 : ok=6 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
jenkins에서 빌드
빌드 성공 확인
jsp수정
git push 후 commit 된 것을 확인
jenkins에서 자동으로 자동화
빌드 성공 후
방금 전 수정한 내용이 반영되는 것을 알 수 있다.
docker 이미지를 dockerhub에 올리기
이번 프로젝트의 목적은 playbook을 2개를 만들어 하나는 docker, 하는 ansible에서 구동을 시키고
결론적으로 ansible에서는 jenkins으로 실행을 시켰을 때 docker hub에 올리고 ansible에서는
지워지는 것으로 할 것이고, docker에는 docker ps를 했을 때 구동이 된 상태로 만들어 보겠다.
실행을 위해 먼저 yml을 만들겠다. playbook5는 ansible에서 playbook6은 docker에서 구동되도록 만들겠다.
작성한 yml파일을 보면 5는 이미지를 도커허브에 보내고 지우는 것을 볼 수 있고
6에서는 컨테이너를 가동하는 것을 확인할 수 있다.
작성 후 Exec command 항목에 각각의 주소에 맞게 명령어를 입력해 준다.
172.17.0.2는 ansible이고, 172.17.0.3은 docker이다,
실행을 시키면 docker hub에 Last pushed a few seconds ago라는 것이 떠야 제대로 빌드된 것이다.
앞에서의 목표처럼 왼쪽(ansible)은 도커 허브에 올린 후 이미지가 없는 상태이고,
오른쪽(docker)는 컨테이너가 가동된 상태가 된다.