[Jenkins] 무중단 배포를 위한 CI/CD 파이프라인 구현 (2)- EC2 젠킨스 설치 및 셋팅

서론

  • 이번 글에서는 EC2 Ubuntu 인스턴스에 Jenkins를 설치하고 설정하는 방법을 단계별로 정리해보겠습니다.

1. EC2 인스턴스 생성 및 Java 설치

1) EC2 인스턴스 생성

  • AWS EC2에서 Ubuntu 인스턴스를 선택해줍니다.
  • jarDocker Image 빌드를 위해 저장공간은 10GB 이상으로 설정해줍니다.
  • Public Subnet 에 배치하여 외부 접속이 가능하도록 설정합니다.

2) Java 설치

  • Jenkins는 Java 기반으로 동작하기 때문에 Java 설치가 필요합니다.
  • 아래 명령어로 Java를 설치해줍니다.

설치 명령어

sudo apt update 
sudo apt install fontconfig openjdk-17-jre 
java -version
  • 설치가 성공적으로 완료되면 다음과 같은 출력이 나타납니다.
openjdk version "17.0.13" 2024-10-15 OpenJDK Runtime Environment (build 17.0.13+11-Ubuntu-2ubuntu124.04) OpenJDK 64-Bit Server VM (build 17.0.13+11-Ubuntu-2ubuntu124.04, mixed mode, sharing)

2.Jenkins 설치

1) Jenkins 설치

  • Ubuntu 용 Jenkins를 다음 명령어로 설치합니다.
  • 자세한 내용은 Jekins 공식문서 를 참고해주세요!
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins

2)Jenkins 서비스 설정

  • Jenkins를 부팅 시 자동 실행되도록 설정합니다.
sudo systemctl enable jenkins

Synchronizing state of jenkins.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.  
Executing: /usr/lib/systemd/systemd-sysv-install enable jenkins

3) Jenkins 실행 및 상태 확인

  • Jenkins를 실행하고 상태를 확인합니다.
sudo systemctl start jenkins 
sudo systemctl status jenkins
  • 다음과같이 나오면 성공입니다.


3. Jenkins 초기 설정

1) Jenkins 접속

  • EC2 IP와 8080 을 이용하여 접속해줍니다. (http://<EC2_IP>:8080)

  • 접속을위해 초기 비밀번호가 필요합니다.
  • 터미널을 열고 다음 명령어로 password 확인후 입력해줍니다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

2) Admin 계정 생성

  • 초기 화면에서 Jenkins 어드민 계정을 생성해줍니다.

3) github 연결용 플러그인 추가

  • github Repositorypush 이벤트를 webkooking 할것이기 때문에 다음 플러그인들을 설치해줍니다.
Generic Webhook Trigger Plugin  
GitHub Integration Plugin  
GitHub API Plugin

4) (문제해결) Memory Swap 공간 만들기

  • jar 파일 build중 인스턴스가 멈추는현상이 발생하였습니다.
  • EC2 인스턴스의 메모리가 부족해서 생긴 현상으로, 단순히 Jenkins만 돌리는 상황에서도 메모리가 부족한것을 확인할 수 있었습니다.

부족한 메모리 용량

  • t2.micro 인스턴스에서 제공하는 메모리는 1GB 뿐이므로, gradle을 돌리기엔 메모리가 부족합니다.

t2.micro 인스턴스

  • 이럴경우 보조기억장치를 Swap Memory로 활용해야합니다. 설정방법은 아래글을 참고해주세요!

2024.12.16 - [AWS/EC2] - [EC2] Ubuntu Swap Memory 설정으로 메모리 부족 문제 해결(EC2 멈춤 해결)


4. Github - Jenkins 연동

1) GitHub Access Token 생성

  • Jenkins 가 github 에 접근할 수 있도록 access tokern 생성해줍니다.
  1. github 설정의 Develpoer setting -> Personal access tokens -> Generate new token(classic)을 클릭합니다.

  1. repo 권한과 repo_hook 권한을 선택해줍니다.

  1. 생성된 토큰을 복사합니다. 생성된 토큰은 다시 확인할 수 없으니 별도로 저장해야 합니다.

2) Jenkins Credentials

  • docker 와 github 접근을 위한 권한을 생성해줍니다.
  1. Credentails 생성 페이지 접속
  • Jenkins 관리-> Credentials -> (global) ->add credentials 클릭하여 페이지로 접속합니다.

2) github credentials 생성

  • Kind : username wity password 선택합니다.
  • Scope : Global 선택합니다.
  • UserName : github 계정명을 입력합니다.
  • Password : 위에서 만든 github access 토큰을 입력합니다.

3) Github Repository Webhook 설정

  1. GitHub Repository에서 Settings > Webhooks로 이동한후 아래와 같이 셋팅해줍니다.
    • Payload URL에 http://<Jenkins_URL>/github-webhook/ 형태로 입력해줍니다.
    • Contnetn Type : application/json.
    • Event Type :Just the push Event.

5. Docker Credentials 생성

  • Jenkins에서 Docker Hub에 이미지를 푸시하기 위해 Docker Credentials를 생성합니다.

  •  
    • Kind : username wity password 선택합니다.
    • Scope : Global
    • Username : Docker 가입된 이메일을 입력합니다.
    • Password : Docker 비밀번호를 입력합니다.

 


4. AWS EC2 Auto Scaling Group 접근을 위한 셋팅

  • 여기부터는 EC2 Auto Scaling Group 접근을 위한 셋팅방법입니다.

1) AWS CLI 다운로드

  • Jenkins 인스턴스에서 AWS 접근하기위해 AWS CLI설치를 진행합니다.
  • 보다 자세한 내용은 AWS 공식문서 를 확인해주세요!
  1. unszip 설치
  • AWS CLI 설치를 위해 unzip 패키지가 필요합니다. 아래 명령어를 실행해 설치합니다.
sudo apt update
sudo apt install unzip -y
  1. AWS CLI 설치
  • AWS CLI zip 파일을 다운받고 설치합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
  1. 설치 확인
  • 설치후 버전을 확인하여, 정상적으로 설치되었는지 확인합니다.
    aws --version
    aws-cli/2.22.17 Python/3.12.6 Linux/6.8.0-1019-aws exe/x86_64.ubuntu.24

2) IAM Role 생성

  • Jenkins 인스턴스가 EC2 Auto Scaling Group에 접근할 수 있도록 IAM Role을 생성하고 설정합니다.
  1. IAM 역할 생성
  • IAM -> 역할->역할생성 에서 AutoSaclingFullAccess를 추가해줍니다,

  1. Jekins 인스턴스 IAM 역할에 위에서 만들어둔 역할을 추가합니다.

결론

  • 이번 글에서는 EC2 Ubuntu 인스턴스에 Jenkins를 설치하고 GitHub 및 Auto Scaling Group과 연동하는 방법을 살펴보았습니다. 이를 통해 Jenkins가 기본적인 CI/CD 환경을 지원할 준비를 마쳤습니다.
  • 다음 글에서는 Jenkins 파이프라인을 구성하고, 실제로 애플리케이션을 빌드 및 배포하는 자동화 과정을 만들어보겠습니다.