-
Notifications
You must be signed in to change notification settings - Fork 1
[infra] Jenkins CICD 구축 정리
해당 위키 페이지는 Jenkins를 이용한 CICD 구축 과정을 정리한 것이다.
- EC2 서버 생성
- 젠킨스용 서버와 운영용 서버를 분리해서 인스턴스를 생성한다.
- 젠킨스용 서버 ssh 접속
[EC2] > [인스턴스 대시보드] > [젠킨스용 서버] 선택 > [연결] 버튼 클릭 > ssh 접속 명령어 복사 후, 해당 key.pem 파일이 있는 곳에서 터미널 명령 실행
- 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
- 젠킨스 LTS 버전으로 설치
도커를 이용해 젠킨스를 컨테이너로 구동하려 했으나, 도커 안에서 도커 명령어를 실행하는 등의 다소 복잡해보이는 설정으로 도커 없이 젠킨스를 설치해서 사용하였다.
- 웹브라우저를 통해 젠킨스 GUI 관리자 화면 접속
"EC2 서버 퍼블릭 주소":8080
으로 접속하기
만약 접속이 안된다면, AWS EC2 인스턴스 대시보드에서 젠킨스용 서버의 [보안] > [인바운드규칙] 편집 > 8080 포트 열어주기
- IPv4와 IPv6 모두 열어주었다.
이 부분도 사실 젠킨스 설정파일에서 9000 포트로 변경하였으나 왜인지 8080으로만 접속이 된다. 젠킨스 설정 변경 후, 재시작을 안해서일까? 확인 안해봐서 추측이다..
- 젠킨스 초기 설정
- 가장 먼저 보이는 화면에서 암호를 입력할 것을 요구한다. 이때의 암호는 서버 터미널에서 아래 명령어를 입력하면 확인할 수 있다.
위에 젠킨스 설치 블로그 내용 참고.
가장 먼저 보이는 화면이다.
- 젠킨스 관리 > ssh 플러그인 설치 및 ssh 키 생성
[젠킨스 관리] > [플러그인 관리] > [설치 가능 플러그인] > "publish over ssh" 검색 후, 클릭
- ssh 키 생성
- [젠킨스 관리] > [manage credentials] 클릭
- github 연동을 위한 ssh 정보 추가
- 아이템 생성
(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 워크플로우를 담은 그림이다.