코딩하는 문과생

[AWS] Jenkins를 이용한 자동화 배포, CI/CD 본문

개발 관련 지식/AWS

[AWS] Jenkins를 이용한 자동화 배포, CI/CD

코딩하는 문과생 2023. 10. 21. 16:39

[서론]

CI/CD 중요도가 날로 갈수록 중요해지고 있다.

 

팀에서도 젠킨스를 사용하여 빌드 및 배포중이었고, 좀 더 나은 방식을 고민하다가 CI/CD 와 관련된 온라인 강의를 수강하였다. 해당 강의는 로컬에서 도커컨테이너와 쿠버네티스를 이용하여 CI/CD를 구축하고, 마지막 부분에서는 AWS에 Jenkins와 Ansible, Docker 등 서비스를 올려 배포를 진행한다.

 

강의를 마무리하는 단계에서 마지막 내용만 간략하게 정리해보고자 한다. 

아키텍처는 다음과 같다.

깃으로 반영후 젠킨스를 이용하여 빌드, 이후 다른 서버로까지의 배포도 가능하다.

1. GIT에 커밋하면 Jenkins가 자동으로 빌드하여 war 파일을 만든다.

2-1. 바로 tomcat-server(tomcat 9 버전 설치)에 war 파일을 배포하여 서비스 운영

2-2. war + tomcat9를 도커 이미지로 만든 후, ansible playbook을 이용하여 docker-server에 배포 

 

강의에서는 1. tomcat이 설치된 인스턴스에 배포하는 과정과, 2. 도커이미지로 만들어 도커 컨테이너에 서비스를 올리는 두 방법을 제시한다. 해당 글에서는 2번 과정만 간략히 정리하는 글이다.

 

모든 내용을 담고 있지는 않으며(가령, amazon linux extras 확장팩 설치, java 호환 문제로 jenkins 설치 시 openjdk 로 변경, tomcat 관리를 위한 유저 설정 등), 흐름만 간단히 기억하기 위해 정리하는 글이다.


1. 인스턴스 생성

  • JDK11설치

 

2. 젠킨스 서버에 젠킨스 설치 후, 구성 설정

   2-1. Repo의 소스코드로 빌드 진행

 

   2-2. war 파일로 빌드파일 생성

  • 이때 젠킨스가 있는 서버에 war 파일이 생성된다.

   2-3. docker server로 war파일을 보내서, 빌드 이미지 생성(Tomcat9 + war)

Dokerfile

FROM tomcat:9.0

COPY ./hello-world.war /usr/local/tomcat/webapps

 

 

   2-4. ansible-server에서 docker-server로 playbook을 실행시켜 도커 컨테이너에 도커 이미지를 배포한다. 

hosts로 지정되어 있는 docker-server에 playbook을 실행시킨다.

create-cicd-devops-container.yml

- hosts: all

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

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

  - name: create a container using cicd-project-ansible image
    command: docker run -d --name my_cicd_project -p 8080:8080 sijune0525/cicd-project-final

 

 

3. 빌드

구성완료 후, Jenkins 서버에서 "지금 빌드" 누르면 git Repo에 있는 소스코드가 배포된다.

빌드 클릭
도커 프로세스 생성
배포완료


참고자료

https://www.inflearn.com/course/%EC%A0%A0%ED%82%A8%EC%8A%A4-ci-cd-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8

 

Jenkins를 이용한 CI/CD Pipeline 구축 - 인프런 | 강의

본 강의는 클라우드 네이티브 애플리케이션을 구성하는 4가지 핵심 요소(MSA, CI/CD, DevOps, Container) 중 하나인 CI(Continuous Integration, 지속적인 통합)과 CD(Continuous Deployment, 지속적인 배포) 파이프라...

www.inflearn.com