[Jenkins] Jenkins + Ansible 연동 및 Playbook 사용

seopppio·2024년 12월 19일

Jenkins

목록 보기
14/25


젠킨스 서버에서, 엔서블 서버로 접속하는 방법

젠킨스 연동



test success 뜨면 완료

Jenkins, Ansible

기존에는 Git에서 코드 가져오면 Jenkins에서 Maven build 하고, 그걸 Docker-server에 ssh로 복사한 다음에 그 도커서버에서 실행하곤 했다. 하지만 n번 이 작업을 실행하면 오류가 발생한다

젠킨스에서 도커에 직접 배포가 아닌, ansible로 배포해보자

git(code) -> Jenkins(Maven build) -> Ansible -> target(dockerserver) -> 실행

  • 엔서블 서버에 Playbook 만듦
  1. 엔서블 서버에 있는 war파일과 함께 있는 도커파일을 가지고 이미지를 빌드하는 내용이 담김 -> 이건 지정한 hosts 서버에 모두 만들어질거임
  2. 각 서버 가서 이미지 잘 만들어졌는지 확인
  3. 만들어진 이미지 가지고, 컨테이너를 만든다

실습1, playbook으로 관리 대상 서버에 이미지 만들기

docker 서버는 초기화하고 다시하자

젠킨스에서 만든 결과물 SSH를 통해서 전송하겠다는 것

준비물: playbook, hosts, Dockerfile, warfile

엔서블 서버에 playbook 만들자

- hosts: all
#   become: true  

  tasks:
  - name: build a docker image with deployed war file
    command: docker build -t cicd-project-ansible .
    args: 
        chdir: /root

엔서블 서버에, Dockerfile 및 playbook 필요

엔서블 서버에 있는 hello-world.war 파일을, 톰캣서버 webapps에 복사하는 작업을 가진 도커파일이다

위 플레이북에 있는 이미지 설치할 hosts도 설정(저 주소는 ansible 주소다)

플레이북 실행


엔서블 서버의 도커이미지가 비어있었는데, 플레이북 실행하니 만들어졌다

실습2-playbook으로 이미지&컨테이너만들기

- hosts: all
#   become: true  

  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
  • 수정, 밑의 내용 8081:8080으로 진행했지만, 8080:8080으로 수정

    엔서블 서버의 경우 8081 접근하면 8080을 제공하기때문, 즉 외부에서 localhost:8081을 하면, 엔서블 서버로 접속하고 엔서블 내부에서는 8080으로 간다 그럼 엔서블 서버 안에 있는 톰캣서버가 8080으로 접속하기 때문에 8080을 타고 톰캣서버로 간다는 의미이다!!!

실행 전

실행 후


이미지는 실행 전 만들어진 이미지 그대로 있고, 도커 컨테이너는 새로 생성된게 보인다

playbook jenkins에서 실행


(엔서블 서버 이미지, 컨테이너 다 지우고 빌드 시작)

빌드 완료

이미지, 컨테이너 다 생성된 모습


로컬호스트로 접속해서, hello world 잘 되는거 확인 가능

실습 3 - 소스코드 변경시, 작업 가져와서 이미지 빌드까지 진행


POLL SCM 설정

소스코드 수정

깃 데스크탑에서, commit하고 push까지 한다


오류가 난다 -> 왜?

이미지의 경우 새로 만들어졌지만, 컨테이너는 이전 실습을 진행하며 생겼던 컨테이너가 아직 존재

도커의 경우, 같은 이름의 컨테이너를 만들 수 없다! 기존에 같은 이름 컨테이너 가진게 있어서 오류 생긴것 -> 기존에 있던 컨테이너가 있다면 삭제하는 작업을 추가해야함

- hosts: all
#   become: true  

  tasks:
  - name: stop current running container
    command: docker stop my_cicd_project
    ignore_errors: yes

  - name: remove stopped cotainer
    command: docker rm my_cicd_project
    ignore_errors: yes

  - name: remove current docker image
    command: docker rmi cicd-project-ansible
    ignore_errors: yes

  - 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

컨테이너 중지, 삭제, 이미지 모두 삭제하는 과정 추가해놓았음
안 해도 된다면(이미지나 컨테이너가 존재하지 않는다면, 에러 발생했을 때 그냥 무시하게 설정)



업로드중..
잘 된 모습

0개의 댓글