Jenkins 를 활용한 CI/CD구축하기

2023. 4. 7. 02:19초기 과업/BackEnd

작성자알 수 없는 사용자

728x90
반응형

 

안녕하세요. 기깔나는 사람들에서 백앤드를 맡고있는 Hardy입니다.

 

오늘 주제는 JenKins + SonarQube + Nginx를 활용하여 CI/CD를 구축하는 글을 작성하려고 합니다.

작성하는 글에 이상이 있거나 , 부족한 부분이 있다면 언제든지 피드백 해주시면 감사하겠습니다.

그럼 시작하겠습니다.

 

JenKins + SonarQube + Nginx 및 모든 필요한 것들은 Docker로 구성하였습니다.

 

 


 

 

🚀 목차

1. CI/CD 구축하기 - Jenkins 및 Gitea 연동하기

2. CI/CD 구축하기 - SonarQube 및 Jenkins연동하기

3. CI/CD 구축하기 - Nginx를 활용한 블루/그린 배포 방식
4. CI/CD 구축하기 - Jenkins파일 작성 및 필요 파일 생성

 

 

 

EC2 인스턴스 생성하기

ec2-생성하기

 

우선 여러가지 인스턴스를 활용하기 위해 AWS EC2를 사용했어요. AWS는 회원가입을 하게되면 몇가지는 무료로 사용할 수 있기 때문에 그만큼 좋은게 없습니다.

 

회원가입을 하시고 EC2를 생성하는 페이지 입니다. 지금은 우선 Ubuntu를 사용했습니다. EC2를 만드실때 꼭 키페어는 생성해서 사용해주세요! 키를 생성하면 로컬에 다운로드를 받게 되는데 적절한 위치로 옮기시고 EC2에 접속하실때 사용하시면 됩니다.

 

인스턴스 시작을 누르시면 바로 생성된 EC2 인스턴스를 사용할 수 있어요.

 

 

인스턴스가 생성이 되었다면 아래와 같이 생성된 인스턴스를 보실 수 있어요

 

ec2

 

 

 

 

 

이제 EC2에 접속 해보겠습니다. 저는 MAC 유저라 터미널로 바로 들어가도록 하겠습니다.

 

ec2 접속하기

 

인스턴스를 생성할때 키페어를 생성하셨을꺼에요! 그 키페어는 해당 처럼 접속 할때 사용됩니다. 저는 jenkins.pem으로 만들었기에 위 이미지처럼 접속을 진행했습니다. ubuntu@3.34.99.51 에서 ubutnu는인스턴스서버에 사용자 명이고 @ 뒤에는 인스턴스 ip주소입니다.

 

 

 


도커 설치하기

이제 Jenkins를 설치하기 위해 도커를 설치해보도록 하겠습니다.

 

apt-get update

 sudo apt-get update

 

도커 설치에 필요한 패키지 설치

sudo apt-get install \ 
    ca-certificates \
    curl \
    gnupg \
    lsb-release

 

도커에 GPG 키 등록

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 

stable repository 등록

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

업데이트 및 도커 설치

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

 

 

여기 까지 완료 되었다면 터미널에 docker ps명령어를 한번 입력해 봅시다

docker.sock permission denied

 

이런 오류가 발생할꺼에요. 이거는 docker.sock에 대한 권한이 없어서 발생하는 문제입니다.

권한 주기

 

sudo chmod 666 /var/run/docker.sock으로 권한을 부여해 봅시다. 그 이후에 docker ps를 입력하면 아까와 다르게 성공한걸 보실 수 있어요

 

 

Docker-Compose설치 하기

sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

실행 권한 주기

 

sudo chmod +x /usr/local/bin/docker-compose

 

여기까지 하셨다면 Jenkins를 설치하는 기초적인 단계는 끝이 났습니다.

 


젠킨스 설치하기

 

docker는 명령어로 이미지를 pull받아오고 직접 명령어를 통해 구동 시킬 수 있지만 저는 개인적으로 docker-compose를 선호합니다.

 

docker-compose.yml

docker-compose.yml

 

여기서 봐야할 부분은 image부분 입니다. 제 코드 베이스가 Java17이기 때문에 17을 지원하는 버전을 사용했습니다.

 

Volume은 호스트와 도커 컨테이너가 공유하는 폴더 공간이라고 생각하시면 됩니다. 

/home/ubuntu/docker/jenkins/home에 /var/jenkins_home이 연결 된다고 보시면 편해요!! 그럼 컨테이너가 종료되어도 데이터가 남아있답니다!

 

ports는 8080:8080이라고 되어 있는데 외부에서 해당 인스턴스 8080 포트에 대한 요청을 docker-container의 8080으로 보내준다 라고 생각하시면 됩니다.

 

해당 파일을 작성하고 해당 docker-compose.yml 파일이 있는 곳에서 아래 명령어를 입력 하시면 컨테이너가 구동되기 시작할꺼에요!

docker-compose up

 

 

그럼 컨테이너가 구동되는 로그들이 보일꺼에요!!

jenkins 컨테이너 로그

사진에서 보이는 8ae2155b898046499f6b41445fe789b5 값은 jenkins의 초기 비밀번호니 꼭 기억하세요

 

 

 

 

젠킨스가 설치된 서버의 주소 : 8080을 입력 하셔서 들어가볼까요? 그럼 당연히 연결이 안될꺼에요!

EC2에서 보안 그룹을 설정하셔야 해요!

 

보안 그룹

위에서 보안 그룹을 클릭하시면 아래 이미지가 나오는데

 

인바운드규칙

인바운드 규칙 편집을 누르시고 IPv4에 대한 8080요청을 설정해주시면 됩니다.

 

 

이제 서버주소:8080 으로 접속을 하면 해당 페이지가 나오고 아까 위에서 기억하라는 초기 비밀번호를 입력하시면 됩니다.

들어가면 plugin을 설치하라는 화면이 나오는데 Install suggeted plugins을 설치하시면 됩니다,

 

 


 

GITEA 연동하기

 

jenkins 관리 화면

 

Jenkins 관리를 누르시면 Plugins라는게 보이실꺼에요 해당 버튼을 클릭합시다

 

plugin

저는 이미 설치가 되어 있어서 ... 설치가 안되어 있다면 Available plugins에서 gitea를 입력하시고 설치하시면 됩니다.

 

 

gitea 설정

 

GITEA에 접속을 하고 오른쪽 상단에 있는 그림 버튼을 누르고 설정을 누릅니다.

 

액세스 토큰

어플리케이션에 가면 액세스 토큰이 있는데 하나 생성해줍니다. 해당 액세스 토큰은 jenkins가 에 접근 하기 위한 하나의 열쇠라고 생각하시면 됩니다.

 

global에 생성하기

 

Jenkinsr관리 > Credentials 에 가시면 해당 페이지가 나올꺼에요

 여기서 글로벌을 선택하시면 아래와 같은 페이지가 나옵니다.

 

 

crendential

Add Crednetials를 선택합니다.

 

gitea credential

 

여기에 아까 GITEA에서 발급 받은 AccessToken을 입력하고 저장해줍니다. 반드시 Gitea Personal Access Token 을눌러주세요

 

 

system설정

 

Credential이 등록 되었다면 System으로 가줍니다.

 

gitea server 등록

 

GITEA PLUGIN을 설치했다면 해당 탭이 보여야 합니다. 여기에 GITEA주소와 Credentials를 등록해줍니다. 여기서 Credential은 아까 AccessToken으로 생성한 Credential입니다

 

여기서 모든것을 입력했을때 반드시 GITEA VERSION이 SERVER URL밑에 노출이 되어야 합니다.

 

 

이제 새로운 ITEM을 생성해 봅시다.

 

item

 

새로운 ITEM을 클릭 해줍니다.

 

item생성

저는 Multibranch Pipleine으로 구성했어요

Multibranch Pipeline은 여러개의 브랜치를 자동으로 탐지하고 각 브랜치에 대한 파이프라인을 생성 , 실행 기능을 제공해요 즉 브랜치 전략이 있을때 사용하면 좋아요!

 

완료를 누르면 아래 화면이 나와요

branch sources등록

 

GITEA를 사용하기 때문에 Branch Source를 GITEA로 선택해주세요

그 이후 GITEA SERVER , Credential , Owner(gitea 아이디 or 이름) 을 입력해주세요  GITEA와 정상적으로 연결이 되어 있다면

Repository는 내가만든 GITEA레퍼지토리들이 자동으로 감지 될거에요 여기서 원하시는 프로젝트를 선택해주시면 됩니당

 

branch 설정

그 이후에 위와 같이 원하시는 브랜치를 정규식으로 넣어주세요 . 해당 정규식에 해당하는 브랜치들에 변동사항이 있으면 자동으로 감지해서 파이프라인을 실행할꺼에요!

 

여기 까지 완료가 되었다면 새로운 아이템이 생성이 되었을꺼에요!!! 

 

생성된 아이템

 

여기까지 간단한 Jenkins설치와 GITEA연동을 알아 보았습니다.

 

다음챕터에서는 SONAR QUBE연동과 간단한 Jenkinsfile을 작성해 보도록 하겠습니다.!!!

 

 

 

728x90
반응형