목차
0. 포스팅 계기
1. CI/CD 개념
2. OverView : GitLab + Jenkins + Nginx + AWS EC2
3. EC2에 Jenkins 설치 후 초기 설정
4. GitLab - Jenkins 설정
5. Jenkins - EC2 연결
6. 방화벽 설정
7. Nginx로 reverse_proxy 설정
8. 빌드 스크립트 (deploy.sh) 작성
0. 포스팅 계기
한이음 중간보고서 제출 전 구글링하다 얻어걸린 블로그에서 GitLab + Jenkins + Docker + EC2를 활용한 CI/CD를 구축했길래 우리도 비슷하게 하면 되겠거니 생각해서 보고서엔 멋드러지게 위의 기술들을 활용하겠다고 작성했다.
막상 본격적인 개발 시작 전에 다시 블로그를 읽어보니 1편만 작성하셔서... 어 답지 보다가 답지 뺏긴 느낌이였다. 울며 겨자먹기로 일주일 동안 엉망진창 헤매가며 겨우 구축하긴 했지만 기록해두지 않으면 다시 잊어버릴 것 같아 포스팅을 결심하게 되었다.
이젠 저 저 Jenkins 아재 사진만 봐도 쫌 킹받지만
이 글을 읽는 사람들은 나보다 저 아재를 덜 미워하길 바라면서 포스팅 시작 ★
1. CI/CD 개념
CI
- 빌드/테스트 자동화 과정
- CI는 개발자를 위한 자동화 프로세스인 지속적인 통합 의미
- 커밋할때마다 빌드와 일련의 자동화 테스트가 이루어짐
→ 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장 - ex) main 브랜치로 commit or pull request가 발생할 때마다 항상 검증
CD
- 지속적인 서비스 제공/배포 의미
- 코드 변경이 main에 커밋되면, 자동화된 빌드 및 테스트 프로세스를 거쳐 문제가 발견되지 않으면 최종적으로 배포
- ex) main 브랜치에 커밋 후 CI를 통과 > gradle.yml workflow에 따라 Docker Image를 생성 > Docker Image를 EC2에 자동 배포
2. OverView
시스템 아키텍쳐 사진은 다음과 같다.
3. EC2에 Jenkins 설치 후 초기 설정
나는 EC2에 직접 Jenkins를 설치하는 방법을 선택했다.
Docker를 사용했다면 Jenkins 환경을 격리해서 관리하기 용이했을 것 같긴 하지만, 아직 Docker 사용하는게 익숙하지 않기도 하고 EC2에서 직접 Jenkins를 설치했을 때 더 직관적으로 이해하고 제어하기 편할 것 같아서 후자의 방법을 선택했다.
a. 패키지 관리자 업데이트 + JDK 설치
Jenkins를 설치하기 전 가장 먼저 패키지 관리자를 업데이트 해주었고, JDK를 먼저 설치해주었다.
나는 프로젝트에서 Java 11 버전을 사용했기 때문에 이에 맞는 JDK를 설치해주었고, 본인 프로젝트에 맞는 JDK를 찾아서 설치해주면 된다.
# 패키지 관리자 업데이트
$ sudo apt-get update
$ sudo apt-get upgrade
# JDK 설치
$ sudo apt-get install openjdk-11-jdk
$ java -version
b. Jenkins 설치
- Jenkins는 CI/CD를 제공하는 툴
- 파이프라인 스크립트에 따라 자동으로 빌드와 배포를 진행
- 연도마다 새로운 레포지토리 서명 키를 사용하므로 설치 중 에러가 발생하면 공식 문서를 보기!
- 23.07.30 기준 아래 링크 참고
https://myminju.tistory.com/115
Ubuntu에 Jenkins 설치하기 (23.3.28 서명키 업데이트)
설치 환경 NHN Cloud Ubuntu 20.04 LTS Jenkins 2.397 ⚠️ 주의 ! 2023년 3월 28일부터 Linux 설치 패키지에 대한 새로운 레포지토리 서명 키를 사용합니다. Jenkins 2.397 설치하기 전에 새 서명 키로 설치해야 합
myminju.tistory.com
# 시스템에 젠킨스 레포지토리 추가
$ curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
$ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
# apt 업데이트
$ sudo apt-get update
# 젠킨스 설치
$ sudo apt-get install jenkins
c. Jenkins 데몬 실행 + 방화벽 확인
- ⚠️ 접속이 안된다면 EC2 인스턴스 인바운드 규칙에 8080 포트를 열어줬는지 확인
# jenkins status 확인
$ sudo systemctl status jenkins
# jenkins 시작
$ sudo systemctl start jenkins
# 8080 포트 열려있는지 확인
sudo ufw status
# Status: inactive 라면
sudo ufw allow 8080
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
d. Jenkins 접속
http://[도메인]:8080/ 접속해서 Jenkins 설정을 이어가야 한다.
처음 위의 url로 접속하면 다음과 같은 화면이 보일 것이다.
초기 비밀번호를 입력하라는 메시지가 나오는데 아래 명령어로 얻은 값을 넣어주면 된다!
# 초기 비밀번호 확인
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Continue를 선택하면 Customize Jenkins 메뉴가 나온다. 여기서 Install suggested plugins를 선택하면 된다.
이제 Admin 계정을 생성하는 단계이다. 계정명과 암호, 이름, 이메일 주소 등을 입력하면 된다. 이 값들은 앞으로 계속 사용해야하므로 꼭 기억하고 있어야 한다.
값을 모두 입력 후 Save and Continue를 선택하면 Jenkins 접속 URL을 설정해주어야 한다. 도메인을 구매했거나 8080 외에 다른 포트번호를 사용하고 싶다면 이때 설정해주면 된다! 나는 이전과 동일한 주소를 사용했다.
Save 하면 초기 설정은 완료되었다고 할 수 있다 .
마지막으로 Dashboard > Jenkins 관리 > Plugins > Available plugins를 선택하여 추가 플러그인을 설치해주어야 한다.
필요한 플러그인만 선택해서 설치해주면 되고, 나는 다음과 같은 플러그인들을 설치해주었다.
설치 플러그인 |
|
'Server > CI&CD' 카테고리의 다른 글
[CI/CD] Github Actions + Elastic Beanstalk를 활용한 Node.js CI/CD 구축 (2) (0) | 2024.03.11 |
---|---|
[CI/CD] Github Actions + Elastic Beanstalk를 활용한 Node.js CI/CD 구축 (1) (2) | 2024.02.18 |
[CI/CD] GitLab + Jenkins를 활용한 SpringBoot CI/CD 구축 (3) - 完 (2) | 2024.02.13 |
[CI/CD] GitLab + Jenkins를 활용한 SpringBoot CI/CD 구축 (2) (0) | 2023.10.20 |
[CI/CD] Github Action을 활용한 SpringBoot CI/CD 구축 (0) | 2023.08.16 |