백엔드

AWS EC2 활용한 CI/CD 구축 (2)

CyberI 2024. 1. 25. 09:56

 

안녕하세요. 

2편에서는 1편에서 설명드렸던 CI/CD를 실제로 구축해보도록 하겠습니다.

 

1편을 확인하고 싶으신 분들은 아래 링크를 눌러주세요.

AWS EC2 활용한 CI/CD 구축 (1)

 

1. 아키텍처

아키텍처는 아래 순서대로 진행합니다.

 

개발자 작업사항 커밋 →  jenkins 빌드 실행 →  GitHub 프로젝트 파일 빌드 →  jenkins 빌드한 파일을 배포서버 ec2 인스턴스에 배포 배포 서버 ec2 톰캣 실행 →  스프링 부트 프로젝트 실행 완료

 

2. 구축순서

구축은 아래 순서대로 진행하도록 하겠습니다.

 

1. 개발 프로젝트 github 연동 

2. AWS 계정 생성  → 2번 단계까지는 별도 설명없습니다.

3. IAM 사용자 추가 (그룹 생성, 권한 추가)

4. EC2 서비스 인스턴스 생성

5. EC2 인스턴스 SSH 접속 방법

6. Git 설치, 자바 설치, 젠킨스 설치

7. 젠킨스 파이브라인 스크립트 작성

8. 빌드 및 배포

 

3. 구축

이제 CI/CD를 구축해보도록 하겠습니다.

 

우선 IAM 사용자를 추가해줍니다.

필요한 작업만을 수행할 수 있도록 권한을 최소한으로 할당함으로써 보안 강화 및 관리 용이성 등에 이유들로 사용자를 추가해서 사용합니다.

 

접속 경로 : IAM → 사용자 → 사용자 생성

1. 사용자 이름 입력 → 2. 사용자 엑세스 권한 제공 체크 →  3. “IAM 사용자를 생성하고 싶은” 체크 →  4. 사용자 지점 암호 입력

 

1. 그룹에 사용자 추가 → 2. 그룹생성 체크 → 3. ec2FullAccess 권한 추가

 

추가한 사용자 디바이스 인증을 추가합니다. (선택 사항 AWS 로그인 시 디바이스 인증 절차가 추가됨)

 

접속 경로 : IAM → 사용자 → 보안자격 증명 접속

1. 디바이스 할당 클릭

 

디바이스 인증을 하기 위해선 Authenticator 앱 인증이 필요합니다. (앱 스토어를 통해 Authenticator App 다운로드 필요)

 

2. Authenticator 앱을 접속해 큐알 인증 → 3. MFA 코드 작성

 

 

이제 EC2 서비스 인스턴스를 생성해보도록 하겠습니다.

EC2 서비스는 AWS에서 제공하는 가상 서버 클라우드 컴퓨팅 서비스입니다. 젠킨스 서버와 배포서버 인스턴스 생성합니다.

 

접속 경로 : EC2 → 인스턴스 →  인스턴스 시작

1. 인스턴스 이름 입력 → 2,3. 사용하고자 하는 운영체제 선택 → 4. 인스턴스 유형 선택 → 5. 새 키 페어 생성

 

 

생성한 ec2 인스턴스에 접속하기 위해 키패어를 생성합니다.

1. 키 페어 입력 → 2. 키 페어 생성 클릭

 

3. 요약 사항을 확인후 “인스턴스 시작” 클릭

 

 

다음으로 EC2 인스턴스 ssh 접속 방법을 설정해보도록 하겠습니다.

1. 연결

 

1. 주소 복사

 

SSH 접속을 위한 MobaXterm 다운로드가 필요합니다.

MobaXterm은 Windows 운영 체제에서 사용할 수 있는 강력한 터미널 및 ssh 클라이언트입니다.

1.다운로드한 풀더에서 MobaXterm.exe 실행 → 2. Session 클릭

 

접속 완료

 

 

이제 Git와 자바를 설치해보도록 하겠습니다.

SSH 접속 후 작업 입니다.
# Git을 설치합니다
sudo yum install git -y
git –version
# /sw/jvm풀더 생성 
# sw -> jvm 풀더 접속  
# wget 명령어 통해 jdk 다운로드 
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
# /sw/jvm 풀더 하위에 파일 풀기
tar -zxvf jdk-17_linux-x64_bin.tar.gz
# 환경변수 설정
vi ~/.bashrc 
# 추가 
export JAVA_HOME=/sw/jvm/jdk-17.0.9
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bashrc

 

jenkins를 설치해보도록 하겠습니다.

SSH 접속 후 작업 입니다. 
# /sw/jenkins풀더 생성 
# sw -> jenkins풀더 접속
wget https://get.jenkins.io/war-stable/2.426.2/jenkins.war
sudo vi /etc/systemd/system/jenkins.service //루트 계정으로
# jenkins.service 안에 작성 
[Unit]
Description=Jenkins Service
After=network.target
[Service]
User=dev_user # 해당 접속 사용자로 변경 필요
ExecStart=/sw/jvm/jdk-17.0.9/bin/java -Djava.awt.headless=true -jar /sw/jenkins/jenkins.war --httpPort=9090
WorkingDirectory=/sw/jenkins
[Install]
WantedBy=default.target  
# 실행
sudo systemctl daemon-reload
sudo systemctl enable jenkins
sudo systemctl start jenkins
# 중지
sudo systemctl stop jenkins 
# 확인
sudo systemctl status jenkins.service
sudo yum install freetype // 자바버전에 따라 라이브러리 추가설치

 

설치 완료 후 9090포트를 활성화한 보안그룹(보안그룹 만들기 설명 PASS)을 만들고 추가해줍니다.

1. 보안그룹 변경 → 2.보안그룹 선택 → 3. 저장

 

 

보안 그룹 추가 후 활성화된 포트로 jenkins 접속합니다.

빨간 줄이표시된 디렉토리로 접속해서 비밀번호를 확인한 후 비밀번호를 입력해줍니다.

 

기본 인스톨을 설치해줍니다.

 

Jenkins 계정을 생성합니다.

 

 

이제 jenkins 파이프라인 스크립트를 작성해보도록 하겠습니다.

 

Item을 생성합니다.

1. 파이프라인 type 선택 → 2. 저장

 

파이프라인 스크립트 작성하기 이전에 git hub 자격증명을 추가해주세요.

Jenkins 파이프라인 스크립트 작성

1. git hub 빌드 → 2. 프로젝트 파일 jar 파일로 출력 → 3. 배포 서버에 배포,실행

 

1. 빌드 → 2. 빌드 성공

 

 

이제 CI/CD 구축이 완료되었습니다.

 

지금까지 AWS EC2 서비스를 통해 CI/CD를 구축하는 법에 대해 알아보았습니다. 

이 글을 보시는 여러 개발자분들께 도움이 되었길 바랍니다.