Skip to content

[infra] Jenkins CICD 구축 정리

이은비 edited this page Dec 22, 2022 · 4 revisions

Jenkins를 이용한 CICD 구축 - 정리편

해당 위키 페이지는 Jenkins를 이용한 CICD 구축 과정을 정리한 것이다.

▶️ CICD 구축 Flow

  1. EC2 서버 생성
  • 젠킨스용 서버와 운영용 서버를 분리해서 인스턴스를 생성한다.
  1. 젠킨스용 서버 ssh 접속

[EC2] > [인스턴스 대시보드] > [젠킨스용 서버] 선택 > [연결] 버튼 클릭 > ssh 접속 명령어 복사 후, 해당 key.pem 파일이 있는 곳에서 터미널 명령 실행

  1. EC2 서버 swap 메모리 늘리기
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo swapon -s
$ sudo vi /etc/fstab
/swapfile swap swap defaults 0 0
  1. 젠킨스 LTS 버전으로 설치

EC2에서 젠킨스 설치 및 설정하기 참고

도커를 이용해 젠킨스를 컨테이너로 구동하려 했으나, 도커 안에서 도커 명령어를 실행하는 등의 다소 복잡해보이는 설정으로 도커 없이 젠킨스를 설치해서 사용하였다.

  1. 웹브라우저를 통해 젠킨스 GUI 관리자 화면 접속

"EC2 서버 퍼블릭 주소":8080 으로 접속하기

만약 접속이 안된다면, AWS EC2 인스턴스 대시보드에서 젠킨스용 서버의 [보안] > [인바운드규칙] 편집 > 8080 포트 열어주기

image
  • IPv4와 IPv6 모두 열어주었다.

이 부분도 사실 젠킨스 설정파일에서 9000 포트로 변경하였으나 왜인지 8080으로만 접속이 된다. 젠킨스 설정 변경 후, 재시작을 안해서일까? 확인 안해봐서 추측이다..

  1. 젠킨스 초기 설정
  • 가장 먼저 보이는 화면에서 암호를 입력할 것을 요구한다. 이때의 암호는 서버 터미널에서 아래 명령어를 입력하면 확인할 수 있다.

위에 젠킨스 설치 블로그 내용 참고.

가장 먼저 보이는 화면이다.

image
  1. 젠킨스 관리 > ssh 플러그인 설치 및 ssh 키 생성

[젠킨스 관리] > [플러그인 관리] > [설치 가능 플러그인] > "publish over ssh" 검색 후, 클릭

image
  • ssh 키 생성

젠킨스와 깃헙 연동을 위한 ssh 키 생성 참고

  1. [젠킨스 관리] > [manage credentials] 클릭
  • github 연동을 위한 ssh 정보 추가
  1. 아이템 생성

(1) 프로젝트명 입력 예) pome_jenkins
(2) Freestyle project 선택 후, 확인
(3) General 탭에서 github 선택 후, repo url 입력
(4) 소스 관리 탭에서 git 선택 후, repo git url 입력 & 브랜치명 지정 예) */main
(5) 그 아래, credentials에 기존에 생성했던 ssh 정보 선택
(6) Build 탭에서 [execute shell] 선택 후, ./gradlew clean build 입력
(7) [execute shell] 선택 후, 아래 스크립트 내용 입력

# Docker Hub로 로그인
docker login -u [username] -p [password]
# 도커 이미지 생성
docker build -t [username]/[repository] .
# 도커 이미지 push
docker push [username]/[repository]

(8) Build 환경 탭에서 Send files or execute commands over SSH after the build runs 선택
(9) Execute command 칸에 아래 스크립트 내용 입력

# DEV 혹은 PROD 환경 서버에서 Docker Hub로 로그인
sudo docker login -u [username] -p [password]
# 현재 실행 중인 컨테이너 확인 | 중지 | 삭제
sudo docker ps -a -q --filter "name=[container_name]" | grep -q . && docker stop [container_name] && docker rm [container_name] | true
# 현재 도커 이미지 삭제
sudo docker rmi [username]/[repository]
# 도커 이미지 pull
sudo docker pull [username]/[repository]
# 도커 컨테이너 실행
docker run -d -p 8085:8080 --name [container_name] [username]/[repository]
# 현재 실행 중인 컨테이너 이미지 제외 타 이미지 삭제
docker rmi -f $(docker images -f "dangling=true" -q) || true

(10) 여기까지 입력 후, 저장 버튼 클릭

[지금 빌드] 클릭 시, 빌드 성공으로 위의 과정은 마무리하겠다.

(11) Github repo -> [settings] -> webhook -> 젠킨스 url/github-webhook 입력 -> application/json 선택 후 저장

CI/CD 워크 플로우

pome_cicd 아키텍처

현재 프로젝트의 CI/CD 워크플로우를 담은 그림이다.