AWS EC2에서 Docker와 Jenkins로 CI/CD 환경 구축하기

2023. 10. 25. 21:20·DevOps
반응형

이번에는 EC2에서 Docker를 띄운 후 Jenkins를 구축해 보자

 


 

1. EC2 인스턴스에 SSH 접속


  • AWS 콘솔에서 EC2 인스턴스의 IP 주소를 확인한 후, 터미널을 열고 SSH로 접속한다.
  • 아래의 방법을 통해 Termius로 접속할수도 있다.

2023.10.25 - [AWS] - AWS - EC2 생성과 Termius 접속방법

 

AWS - EC2 생성과 Termius 접속방법

코딩은 글쓰기라고 생각한다. 꾸준히 기록하며 내 개발 실력을 키울것이다.

curiousjinan.tistory.com

 


 

2. 패키지 업데이트와 Docker 설치


2-1. 먼저 패키지 업데이트를 진행한다.

sudo apt-get update

sudo apt-get update
sudo apt-get update

 

2-2. Docker 설치에 필요한 패키지 설치

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

docker package
docker package

 

2-3. Docker 공식 GPG 키 추가하기

  • GPG키란?
    • GPG(GnuPG, GNU Privacy Guard)는 데이터 암호화와 디지털 서명을 위한 도구이다.
    • 이는 PGP(Pretty Good Privacy)의 자유 소프트웨어 구현으로, 공개 키 암호화를 사용한다.

  • GPG 키 추가의 목적
    • 신뢰성: GPG 키를 통해 다운로드한 패키지가 실제로 Docker에서 배포한 것이라는 것을 검증할 수 있다.
    • 무결성: 패키지가 전송 중에 손상되거나 변경되지 않았음을 확인한다.
    • 보안: 악의적인 소프트웨어나 위조된 패키지의 설치를 방지한다.

  • GPG키를 꼭 추가해야 하는가?
    • 보안과 신뢰성을 유지하기 위해서는 GPG 키를 추가하는 것이 좋다. 만약 이 단계를 생략한다면, 패키지의 신뢰성을 보장할 수 없으므로 보안 문제가 발생할 가능성이 있다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • GPG키를 추가하던 도중 경고 메시지가 발생했다.
    • 아래처럼 마지막에 "OK"라고 뜨면 GPG 키가 성공적으로 추가된 것이다. 그러나 "apt-key is deprecated"라는 경고 메시지가 나타나고 있다. 이는 apt-key 명령이 더 이상 권장되지 않고 곧 사용이 중단될 예정이라는 것을 의미한다.

GPG key warn
GPG key warn

 

2-4. Docker 레포지토리 추가

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
  • 명령어를 치고나면 진행도중 아래와 같이 메시지가 나오는데 enter를 클릭하면 계속 진행한다.

Docker repository
Docker repository

 

2-5. 패키지 업데이트 및 Docker 설치

sudo apt-get update
sudo apt-get install docker-ce
  • 아래 사진과 같이 동작하면 완료다. Done표시가 나온다.

docker install
docker install

 

2-6. 설치한 Docker 서비스 시작 및 확인

# Docker 서비스 시작
sudo systemctl start docker

# Docker 서비스 상태 확인
sudo systemctl status docker
  • 아래와 같이 나올것이다.

docker start
docker start

 


 

3. Jenkins 설치 (Docker 이용)


3-1. LTS(Long Term Support) 버전의 Jenkins Docker 이미지를 다운로드한다.

# Jenkins 이미지 다운로드
sudo docker pull jenkins/jenkins:lts

jenkins docker image download
jenkins docker image download

 

3-2. Jenkins 컨테이너 실행하기

  • d:  백그라운드에서 실행한다.
  • p 8080:8080 -p 50000:50000:  포트를 매핑한다.
  • v jenkins_home:/var/jenkins_home:  볼륨을 설정하여 데이터를 영구적으로 저장한다.
# Jenkins 컨테이너 실행
sudo docker run -d -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins:lts

jenkins container start
jenkins container start

  • -p 50000:50000 는 어떤 의미로 작성된 것일까?
    • 50000:50000 포트는 Jenkins 마스터와 에이전트 노드 간의 통신을 위한 것이다. 이 포트는 Jenkins의 분산 빌드 환경에서 중요한 역할을 한다. 분산 빌드 환경이란, 하나의 마스터 서버와 하나 이상의 에이전트 노드를 사용하여 빌드와 테스트 작업을 병렬로 수행하는 구성을 말한다.

    • 상세한 역할
      1. 작업 할당: 마스터는 이 포트를 통해 에이전트 노드에 빌드나 테스트 작업을 할당한다.
      2. 작업 실행: 에이전트 노드는 할당받은 작업을 수행하고, 그 결과를 다시 이 포트를 통해 마스터에게 전달한다.
      3. 상태 모니터링: 마스터는 이 포트를 통해 에이전트 노드의 상태를 확인하고, 필요한 경우 작업을 재할당할 수 있다.

    • 필수성과 선택성
      • 단일 마스터 환경:
        • 단일 Jenkins 마스터만을 사용하고, 별도의 에이전트 노드를 사용하지 않는 경우에는 이 포트를 열어둘 필요가 없다.
      • 분산 빌드 환경:
        • 여러 개의 에이전트 노드를 사용하여 작업을 분산시키는 경우에는 이 포트가 열려 있어야 마스터와 에이전트 간의 통신이 원활하게 이루어진다.

    • 보안 측면
      • 이 포트는 내부 네트워크에서만 열어두는 것이 일반적이다. 외부에 노출되면 보안 문제가 발생할 수 있으므로, 방화벽 등의 보안 설정을 통해 외부 접근을 차단해야 한다.

 

3-3. Jenkins 접속 후 초기 설정

  • 브라우저에서 http://<EC2_IP_ADDRESS>:8080으로 접속한다. (젠킨스 웹페이지 접속)
    • 여기서 aws의 인바운드 규칙에서 8080포트를 열어줘야만 접속이 가능하다.

인바운드 규칙 설정
인바운드 규칙 설정

 

  • 인바운드를 열어주고 다시 접속하면 아래와 같은 설정 페이지가 나올것이다.

jenkins getting started
jenkins getting started

 

  • 여기서 form에 적을 unlock key를 얻기 위해 터미널에서 다음 명령어를 실행하자
sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

 

  • 명령어 맨앞에 sudo를 안붙이면 아래와 같은 permission에러가 발생한다.

permission error
permission error

 

  • sudo를 붙여서 정상적으로 동작시키면 아래와 같이 key값이 나올것이다.

key

 

이제 웹 페이지의 입력 form에 발급받은 unlock key를 입력하고, 초기 설정을 완료한다.

 


 

4. Jenkins 웹페이지 세팅


4-1. 플러그인 선택

  • key를 입력하고 다음 단계로 넘어가면 plugins 설치가 나오는데 추천 플러그인을 선택하고 넘어갔다.

plugin setting

 

  • Install suggested plugins를 선택하면 아래와 같이 다운로드와 설치를 진행한다.

plugin download
plugin download

 

4-2. Admin User 세팅

  • 위의 플러그인 설치를 완료하면 아래와 같이 Admin유저를 세팅하는 창이 나온다.

jenkins admin user setting
jenkins admin user setting

 

4-3. domain 세팅

  • 계정정보를 적어서 저장하고 넘어가면 다음과 같이 나온다. 이 페이지는 Jenkins 접속 url을 설정하는 곳이다. 구매해서 설정한 domain이 없으니 그냥 aws ec2 서버를 그대로 적어주면 된다.

domain setting
domain setting

 

4-4. 최종 설정화면

jenkins setting finish
jenkins setting finish

 

4-5. Jenkins Dashboad

  • "Start using Jenkins" 버튼을 누르면 아래와 같이 Dashboard가 나올것이다.

jenkins dashboard
jenkins dashboard

 

 

 

여기까지가 Aws(Ec2)안에 Docker를 띄우고 그 위에 Jenkins 컨테이너를 올려서 설정까지 한 내용이다. 
다음 포스트에서는 Freestyle 방식으로 CI만 구축하는 방법을 설명하겠다.

 

 

 


 

2023.10.26 - [DevOps] - Jenkins로 시작하는 CI: Freestyle 프로젝트 구축 가이드

 

Jenkins로 시작하는 CI: Freestyle 프로젝트 구축 가이드

이번 포스트에서는 Jenkins에서 Freestyle방식을 사용해서 Item을 구축하는 방법에 대해서 설명한다. 요즘은 Pipeline을 많이 사용하지만 Freestyle도 나름 간단하게 적용시켜서 사용하기에는 나쁘지 않은

curiousjinan.tistory.com

 

2023.10.25 - [AWS] - AWS - EC2 생성과 Termius 접속방법

 

AWS - EC2 생성과 Termius 접속방법

코딩은 글쓰기라고 생각한다. 꾸준히 기록하며 내 개발 실력을 키울것이다.

curiousjinan.tistory.com

 

반응형

'DevOps' 카테고리의 다른 글

단일 장애 지점(SPOF)이란?  (0) 2023.11.21
ECR Docker 이미지 Push 오류: M1 아키텍처와 exec format 문제  (0) 2023.10.28
Pipeline 방식으로 Jenkins구축 - SpringBoot CI/CD 구축  (0) 2023.10.27
Jenkins로 시작하는 CI: Freestyle 프로젝트 구축 가이드  (2) 2023.10.26
'DevOps' 카테고리의 다른 글
  • 단일 장애 지점(SPOF)이란?
  • ECR Docker 이미지 Push 오류: M1 아키텍처와 exec format 문제
  • Pipeline 방식으로 Jenkins구축 - SpringBoot CI/CD 구축
  • Jenkins로 시작하는 CI: Freestyle 프로젝트 구축 가이드
Stark97
Stark97
소통 및 문의: dig04059@gmail.com (편하게 연락주세요!) 링크드인 소통이나 커피챗도 환영합니다!
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (250)
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (6)
      • MSA (15)
      • DDD (12)
      • gRPC (9)
      • Apache Kafka (19)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
      • 채팅 서비스 (1)
      • AI 탐험대 (1)
      • 팀 Pulse (0)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
AWS EC2에서 Docker와 Jenkins로 CI/CD 환경 구축하기
상단으로

티스토리툴바