스파이더 웹 개발

Jenkins 사용 본문

Study

Jenkins 사용

스파이더웹 2022. 9. 1. 14:30
728x90
반응형

내가 개발을 했다. 개발 한 내용을 서버에 반영하려면? 서버에 반영하는 것을 '배포' 라고 하고, 배포 하기 위한 준비 과정을 '빌드' 라고 한다

Build 란?
빌드는 서버에 올릴 수 있는 상태로 만드는 것이다 . 서버에 올려서 사용자가 사용할 수 있게하는 것은 배포라고 한다

이러한 빌드를 자동화 해주는 툴을 Jenkins 라고 한다


젠킨스(Jenkins)는 소프트웨어 개발 시 지속적 통합(continuous integration) 서비스를 제공하는 툴이다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 Git등의 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해 준다. 위키백과

젠킨스 기능
1. 대쉬보드 제공
여러가지 배포 작업의 상황을 모니터링 할 수 있습니다

2. 배포 스크립트 실행기능
배포 스크립트를 개발자 로컬에서도 실행 할 수 있는데 젠킨스라는 프로그램을 띄워놓으면 스케쥴링을 해줍니다

3. 다양한 플러그인
빌드를 하는 환경도 다양하고 빌드를 할 때 바꿔 주어야 하는 옵션도 다양하고 각각 개발 환경과 개발한 언어도 다 다릅니다. 이런 것들을 커버하기 위해 젠킨스는 다양한 플러그인을 제공 합니다.

젠킨스 설치 과정
https://bosungtea9416.tistory.com/entry/AWS-EC2-%EC%97%90-Jenkins-%EC%84%A4%EC%B9%98-%EB%B0%8F-default-%ED%8F%AC%ED%8A%B8-%EB%B3%80%EA%B2%BD

[AWS] EC2 에 Jenkins 설치 및 default 포트 변경

EC2 인스턴스에 Jenkins 설치하면서 기록 차원에 남긴다. 추가로 디폴트로 사용하던 포트도 8080에서 9090으로 변경하는 작업을 해줬다. EC2 인스턴스 OS는 Amazon Linux 2이다. Jenkins 설치 실습 Jenkins 설치.

bosungtea9416.tistory.com


Jenkins 의 기본 포트는 8080인데 현재 톰캣에서 사용하고 있으므로 9090 포트로 변경해주었다.
이후 Item을 생성해주고 설정 후 GitHub 이벤트와 젠킨스를 연동해주는 GitHub Webhooks를 설정한다
https://bcho.tistory.com/1237

gitHub와 Jenkins 연결하기

Jenkins와 gitHub 연동 조대협 (http://bcho.tistory.com) 가장 널리 사용하는 Jenkins와, 소스 코드 리포지토리 서비스인 GitHub를 연동하는 방법에 대해서 알아본다. 시나리오는 gitHub에 코드를 푸쉬하면 Jenki..

bcho.tistory.com


이제 GitHub에서 코드 푸쉬가 될때 WebHook 메세지를 Jenkins에 보내주고 이 메세지를 받을 때 마다 빌드하게 된다

이후 가장 기초적인 방법으로 배포해보겠다.
ec2 인스턴스 내부에 Jenkins 설치 경로로 이동하여 war파일(나의 경로는 /var/lib/jenkins/workspace/SpringBasic/target/프로젝트.war /)을 tomcat 내부의 webapps로 이동시켜 주면 된다.
수동으로 빌드시마다 이동해주는 번거로움이 있는데, 이것을 post action을 사용하여 자동화 시킬 수 있다.

자동화 하는 방법은 Jenkins에서 생성한 Item의 구성에서 Build 탭에 설정해둔 Maven에 쉘 스크립트를 작성하면 되는데, 어떻게하면 war 파일을 매번 이동하는 명령어 없이 빌드 이후에 자동화 시킬 수 있을까 적용한 순서를 알아보자
1. 톰캣의 실행을 중지한다
2. 기존 톰캣의 있는 war 파일을 삭제한다
3. 빌드된 war 파일을 Jenkins 디렉토리에서 Tomcat 디렉토리로 이동
4. 톰캣을 다시 실행한다

주의할 점은 내용 대로 진행하면 톰캣이 실행되지 않는데 해당 원인은 jenkins에서 job 빌드 수행이 완료되면 child process를 모두 kill하기 때문이라고 한다. 그렇기에 실행 명령어에 BUILD_ID=dontKillM 를 추가하면 문제를 해결할 수 있다.

추가적으로 프로젝트설정 시 DB connection 정보를 properties 파일로 관리하였는데, 해당 파일로 관리하여 GitHub에 푸쉬하게되면 비밀번호등이 노출되기에 보안에 취약할 수 있다. AWS Secret Manager를 통해 하는 방법도 있지만, 솔직히 너무 어려웠다. 그래서 가장 간단한 방법은 Jenkins의 pre action 쉘스크립트를 사용하는 것인데, ec2 내부에 DB설정 정보 properties파일을 생성 후에 빌드 되기 전에 해당 properties파일을 jenkins 하위 디렉토 프로젝트 내부에 폴더를 이동시켜 주면된다. 이렇게하면 db 커넥션 정보는 깃허브에 노출될 위험도 없고, properties파일도 손쉽게 관리할 수 있다.

728x90
반응형

'Study' 카테고리의 다른 글

DB- MYSQL  (0) 2022.09.27
OAuth란?  (0) 2022.09.07
동기 와 비동기의 개념  (0) 2022.08.18
forward proxy 와 reverse proxy의 차이  (0) 2022.08.18
쿠키(Cookie)와 세션(Session)  (0) 2022.08.14
Comments