안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다.
이번 글은 Jenkins - Docker -AWS를 활용하여 CI/CD를 구축하는 과정을 정리하고자 합니다.
제 운영 환경은 ubuntu22.04이므로 linux 기준으로 정리하도록 하겠습니다.

 

 

1. Jenkins를 왜 써야 할까요?

 

Jenkins는 빌드와 배포를 자동화해주는 기능을 가지고 있습니다. 
저는 AWS로 배포를 할 때 jenkins를 사용하지 않았었습니다. 사용하기 복잡하고 jar로 빌드하고 도커 이미지로 만들고
바로 서버로 배포하면 되기 때문에 초기 설정하는 과정을 생략하고 진행했습니다.
하지만, 한 두번은 할 수 있지만, 실제 local 서버와 AWS dev 혹은 prod 환경은 매우 다르기 때문에 빌드한 결과물이 실제
dev 서버에서는 제대로 작동하지 않는 문제가 발생했습니다.
이때마다 다시 코드를 수정하고 jar로 빌드하고, 도커로 이미지 생성 후 tar 파일로 변환하고 ssh로 aws로 전송 후
다시 aws 에서 해당 도커 이미지를 실행하는 과정이 매우 복잡했습니다.

이미지로 보면 다음과 같습니다.

 

만약 실제 서버에서 error가 발생한다면 Jar 빌드부터 다시 개발자가 진행해야 했습니다.
그 결과 정말 많은 시간을 투입하게 되었습니다. 시간도 시간이지만, AWS EC2의 경우, 비용이 발생하기 때문에
비효율적인 방법이었습니다.
따라서, 이러한 빌드 -> 배포 -> 운영 하는 과정을 하나로 통합하여 관리할 수 있는 Jenkins를 선택하여 활용하고자 하였습니다. 

 

2. Jenkins 설치

 

sudo apt-get install jenkins

 

설치가 완료되면, localhost:8080으로 접속할 수 있습니다.
접속하면 다음과 같은 화면이 나옵니다.

 

 

만약 도커로 jenkins를 실행하면 console로 확인할 수 있지만, jenkins가 설치되면서 바로 실행된 경우는
직접 terminal에서 password를 확인해야 합니다.

 

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

 

해당 코드를 터미널에 입력하면 패스워드를 확인할 수 있습니다. 터미널 내용을 복사하여 접속하면 초기 플러그인 설정 관련 나옵니다. 
왼쪽에 기본적으로 필요한 플러그인을 설치할 수 있도록 돕는 것을 선택하면 로딩과 함께 플러그인이 설치됩니다.

 

 

도중에 플러그인 설치를 실패할 수 있는데, 넘어가서 다시 플러그인을 재설치할 수 있습니다. 따라서, 기본 플러그인 설치가 실패하더라도 크게 걱정하지 않으셔도 괜찮습니다.!

 

설치가 완료되면 다음과 같은 화면을 확인할 수 있습니다.

 

 

 

하단으로 내리면 plugin을 추가로 설치할 수 있는 항목이 있습니다. 해당 항목을 클릭한 후, 이전에 실패했던 모듈을 추가로 
설치하였습니다.  또한, post build task를 추가하여 빌드 후 작업을 수행할 수 있도록 플러그인을 설정하였습니다.

 

 

 

3. 필요한 SSH 키 준비하기


보통 깃허브를 사용하시면 ssh로 전송을 많이 이용하셨을 것입니다.
ssh 관련 키는 아래 코드로 접속하여 확인할 수 있습니다.

cat id_rsa를 입력하면 해당 private key를 확인할 수 있습니다. 

추후, ssh 인증을 하기 위해 미리 복사를 해두도록 하겠습니다.

(중요한 점은 -----BEGIN OPENSSH PRIVATE KEY-----  -----END OPENSSH PRIVATE KEY-----

jenkins에 ssh 인증 정보를 입력할 때 이것까지 모두 복사하셔야 합니다!)

 

cd ~/.ssh
cat id_rsa

만약 ssh 키가 등록되어 있지 않다면 키를 생성한 후, id_rsa.pub를 github에 등록하여야 합니다.
이번 포스팅에서는 ssh 키를 등록하는 방법은 다루지 않도록 하겠습니다.

 

 

4. Security 및 Credential 등록하기 

 

 

먼저 Configure Global Security를 클릭하여 Git Host Key Verification Configuration 설정을 Accept first Connection으로 설정합니다. Accept first Connection은 최초 요청 검증 후에 추후 요청을 검증하지 않는다는 것입니다. 만약 production 환경이라면 
문제가 발생하지만 현재 저는 dev 환경을 테스트하고 있기 때문에 해당 설정을 하였습니다.

 

 

이후, Manage Credentials을 클릭하여 새로운 Credential을 생성합니다.

 

 

하단의 Global credentials을 클릭하면 아래의 환경으로 이동합니다. 이후 Add Credentials를 클릭합니다.

 

 

현 버전은 최신 Jenkins 버전이기 때문에, username - password 방식은 지원하지 않는다고 하여, SSH 연결을 하는 Credential을 생성하였습니다.

 

 

하단의 key를 등록하는 과정에서 앞 선 3. 번에서 진행했던 id_rsa private key를 복사하여 입력합니다.
이후 등록을 누르면 키가 생성된 것을 확인할 수 있었습니다.

 

 

 

 

5. Item 등록하기

 

대시보드로 이동 후 add Item을 클릭하면 다음의 화면으로 이동합니다.

해당 프로젝트명과 Freestyle project를 클릭합니다.

 

 

이 후, Git repository에서 관리하고 있는 repository를 등록합니다.
(private repository는 ssh 링크와 credential이 필요합니다) 
이 후, private Repository에서 빌드할 브랜치를 설정하여 확인을 누릅니다.
저는 main 브랜치를 사용하였기 때문에 */main으로 설정하였습니다.

 

 

 

빌드 테스트 결과 성공하였습니다.

 

추가적인 build script를 작성하여 실제 jar 파일로 빌드를 하면 다음과 같습니다.

Build Steps에 ./gradlew clean build를 작성하여 저장합니다.

 

이 후 다시 빌드하면, 빌드 성공과 동시에 작업 공간에 빌드 폴더와 파일이 생성되게 됩니다.!

 

script로 빌드를 자동화할 수 있는 것의 장점은 configuration이나 yml 혹은 기타 스프링 빈들이 환경에 따라 다르게 작동될 수 있습니다. 따라서 젠킨스로 여러개의 프로젝트를 개별적으로 빌드하고 관리할 수 있으므로 효율적인 관리 체계를 유지할 수 있습니다.!

 

이 후 2편에서 jenkins에서 빌드 후 AWS로 배포하는 과정을 작성하도록 하겠습니다.!
부족하지만 읽어주셔서 감사드립니다.!

'DevOps' 카테고리의 다른 글

[DevOps] Docker Container  (1) 2023.11.04
[DevOps] 깃 액션/코드 디플로이를 활용한 배포  (0) 2023.10.29

+ Recent posts