[K8S] CI/CD Pipeline, 모니터링, 로깅 시스템 구축 프로젝트 - CI/CD 파이프라인 구축:1

mDev_97·2023년 10월 26일
0

Kubernetes

목록 보기
6/10
post-thumbnail

📌 프로젝트 주제에 대한 자세한 설명은 [K8S] CI/CD Pipeline, 모니터링, 로깅 시스템 구축 프로젝트 - 프로젝트 소개 게시글을 확인해주세요.

이번 게시글에서 진행할 내용을 CI/CD 파이프라인 구축하기 중에서 Jenkins 서버 구축하기 입니다.

CI/CD 파이프라인은 어플리케이션 소스 코드 GitHub 리포지토리, Kubernetes GitHub 리포지토리, Jenkins, Docker Hub를 사용하여 구축합니다.

CI/CD 파이프라인 실행 과정은 다음과 같이 진행됩니다.

  1. 어플리케이션 소스 코드를 GitHub 리포지토리에 푸시하면 Jenkins 서버에 Webhook 요청을 보냅니다.

  2. Jenkinsfile을 작성하여 푸시된 코드를 통하여 Docker Image를 빌드하고 빌드된 이미지를 도커 허브에 Push 합니다.
    그리고, Jenkins 서버는 빌드된 이미지의 태그 값으로 쿠버네티스 메니페스트가 저장되어 있는 GitHub 리포지토리를 수정해줍니다.

  3. ArgoCD가 GitHub의 변경된 메니페스트를 감지고 메니페스트와 Cluster의 Sync를 맞춥니다.



CI/CD PipeLine 구축 - Jenkins 서버 구축

Jenkins의 서버는 외부에 공개된 IP가 필요합니다.
EXTERNAL IP를 편하게 구성하기 위해서 Google Cloud Platform에서
VM 인스턴스를 생성하여 Jenkins 서버를 구축하겠습니다.

GCP VM 인스턴스 생성

GCP에서 VM 인스턴스를 생성하기 위해서

GCP 콘솔에서 좌측 메뉴를 통해 [Compute Engine] -> [VM 인스턴스]로 접근합니다.

상단에 [인스턴스 만들기]

VM 인스턴스의 이름은 jenkins

부팅 디스크 설정은 아래와 같이 설정

운영체제: Ubuntu 20.04 LTS
크기: 100GB

방화벽의 경우 설정은 쉽게 하기 위해서 HTTP와 HTTPS 트래픽을 허용해주겠습니다.

[만들기] 클릭

Jenkins 서버 구축

그럼 조금의 시간이 지나면 VM 인스턴스가 생성된 것을 보실 수 있습니다.
그럼 이제 VM 인스턴스에 SSH로 접속하여 Jenkins 서버를 구성해보도록 하겠습니다.

Jenkins 서버를 구축하는 것은 빠르고 쉽게 설치를 진행하기 위해서 도커 이미지를 사용해서 Jenkins를 배포하겠습니다.
또한, Jenkins를 배포할 때는 일부의 디렉토리를 공유하도록 설정하였으며, 도커의 소켓도 함께 공유하도록 구성하여 Jenkins가 호스트에 설치된 도커를 사용할 수 있도록 구성하였습니다.

sudo -i

apt update
apt install -y docker.io

# 도커 소켓 공유 및 도커를 통해 jenkins 구성
docker run -d -p 8080:8080 --name jenkins -v /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts

도커를 사용해서 jenkins를 구성하는 과정에서 두 개의 볼륨을 공유합니다.
앞에 볼륨은 jenkins의 데이터를 보존하기 위함이고, 뒤에 볼륨의 경우 jenkins에서 Ubuntu에 설치된 도커를 컨트롤할 수 있도록 소켓을 공유하기 위해서 입니다.

그리고 8080 포트로 포워딩 해주었기 때문에 Google Cloud 명령어를 통해서 방화벽을 열어주어야만 합니다.
Google Cloud 명령어는 콘솔에 우측 상단에 있는 Cloud Shell에서 입력해야 합니다.

gcloud compute firewall-rules create jenkins-ci --allow=tcp:8080

Jenkins 서버 구축 확인

Jenkins 서버가 정상적으로 구축되었는지 확인하기 위해서는 VM 인스턴스의 외부 IP를 통해서 접근하면 됩니다.
이때 포트는 8080입니다.

그럼 아래와 같이 Jenkins에 잘 접속하는 것을 볼 수 있습니다.

그리고 jenkins에서 도커를 사용하기 위해서는 Docker 클라이언트가 필요합니다.
이를 위해서 jenkins에도 Docker를 설치해주도록 하겠습니다.

docker exec jenkins apt update
docker exec jenkins apt install -y docker.io

그리고 Jenkins 초기 화면에서 나온 것과 같이 Init Password를 화면에 나온 명령어를 통해서 조회해보겠습니다.

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 

조회된 초기 패스워드를 통해서 Jenkins 서버에 접속해보겠습니다.

Jenkins 서버 설정

초기 패스워드를 입력해주면 아래와 같이 플러그인 설치가 나옵니다.
저는 그냥 Install suggested plugins를 선택하겠습니다.

플러그인 설치가 완료되면 관리자 계정을 만들도록 합니다.
여러분에게 맞는 계정명과 암호를 입력하여 관리자 계정을 만드시고 기억해두시면 됩니다.

그럼 Jenkins 서버의 공인 ip와 포트가 나오게 됩니다.
공인 ip와 포트는 뒤에서 GitHub Webhook으로 요청을 보내는 데에 사용이 됩니다.

그럼 이제 Jenkins 서버 구성은 끝났습니다.
하지만, 저희가 구축하고자 하는 CI/CD 파이프라인에서는 도커 이미지 빌드와 푸시가 이루어지기 때문에
도커를 빌드하는 데에 필요한 도커 파이프라인 플로그인을 설치해주도록 하겠습니다.

왼쪽 메뉴에서 [Jenkins 관리] -> [Plugins] -> [Available plugins]

docker pipeline 검색 후 설치(install as restart)

재시작은 조금의 시간이 걸릴 수 있습니다.

재시작 후에 이전에 설정했던 아이디와 비밀번호를 통해서 로그인하면 Jenkins 구성은 완료입니다.

profile
안녕하세요. 백엔드, 클라우드, 인프라에 관심과 열정이 있는 김문성입니다. 😊

0개의 댓글