본문 바로가기
Cloud/Integration

ansible을 사용한 jenkins 자동화

by tankwoong 2023. 10. 17.
반응형

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)는 컨테이너가 가동된 상태가 된다. 

반응형