-
[CI/CD] Spring, Jenkins, Nginx, EC2, Docker로 무중단 배포 구현 (2) Jenkins-Gitlab 연동 및 CI 환경 구축Dev Ops/CI-CD 2023. 8. 6. 22:35반응형
지난 번 포스팅 이후로 많은 시간이 지나버렸다...
까먹어서 기억을 되덤어 볼 겸 다시 작성! (싸피가 최근 프로젝트 하느라 조회수가 잘나오더라^_^)
지난 번엔 자동배포 환경에 필요한 툴들을 다운로드 하는 방법에 대해 작성했고,
이번 포스팅에서는 젠킨스로 CI 환경 구축하는 방법까지 작성하고자 한다.참고로 지금 구축하고 있는 환경은 백엔드용 환경이다. 프론트엔드 배포는 별도로 다룰 예정.
[지난 포스팅]
1편. EC2 서버 기본 설정 (도커, 젠킨스, Nginx, JDK, MySQL, Redis 설치)
[ Service Architecture ]
이번 포스팅에서 구현할 서비스 구조도는 아래와 같다.
포트를 2개로 구분하여, 서버를 새로 빌드하고 배포하는 과정에서 생기는 서버다운타임 없이 서비스가 운영될 수 있도록 했다.
1. 깃랩에서 브랜치에 변경사항이 생길 때마다 웹훅을 통해 Jenkins에게 신호를 보냄
2. Jenkins가 이를 감지하여 새롭게 업데이트된 Git을 clone하고 빌드 시작하며, 파이프라인에 따라 스크립트 실행
3. 빌드한 파일을 Dockerfile을 통해 이미지화 (Dockerfile에 이미지를 생성할 때 사용할 커맨드 라인을 작성)
4. 빌드된 도커이미지를 도커허브로 푸쉬
5. 배포 스크립트에 따라 배포 진행(유휴포트 확인 후 도커허브에서 최신 도커이미지 다운 받아 배포)
6. 배포가 성공하면 Nginx에서 새로운 포트로 세팅을 변경하고 기존 포트의 컨테이너는 삭제
7. 빌드가 성공하면 Mattermost 알람 발송1. Jenkins - GitLab 연동
1) GitLab에서 토큰 발급하기
- GitLab project → Settings → Access Tokens 에서 신규 엑세스 토큰 발급 (권한이 없을 경우 프로젝트 소유자가 권한을 풀어야 함)
- 아래와 같이 설정 후 토큰 생성
2) Jenkins에서 GitLab 연결해주기
- Jenkins 관리 → 시스템 설정의 Gitlab 탭에서 아래와 같이 설정
- Connection name : 원하는 이름 입력
- Gitlab host URL : 깃랩 메인 주소 입력
- Credentials : +Add 버튼을 눌러 Credential 추가페이지로 이동- Kind : GitLab API token
- Scope : Global
- API token : 깃랩에서 생성한 엑세스 토큰 입력2. Web-hook 설정
: 이제 깃랩에서 특정 브랜치에 업데이트가 되면 자동으로 젠킨스가 감지하여 빌드할 수 있도록 Web-hook을 설정
1) Jenkins 프로젝트 생성
- Jenkins 대시보드 화면에서 [새로운 Item] 클릭
- Pipeline 클릭하여 신규 프로젝트 생성해주기2) Jenkins - Build Trigger 설정
- OK를 누르면 Build Triggers 항목이 나오는데 여기서 Build when a change is push to Gitlab~ 항목 체크
- 뒤에 나와 있는 URL 저장해 놓기- [고급] 버튼 누르고 Secret token에서 Generate 버튼 클릭 후 토큰 저장
3) GitLab에서 Web-hook 연결
- 깃랩 설정의 Webhook 탭으로 이동하여 2)에서 저장한 URL과 secret token 입력
- trigger의 Push events에서 트리거를 발생시킬 브랜치 이름 입력 (ex. backend_develop)
- add webhook 버튼을 눌러 완료
반응형'Dev Ops > CI-CD' 카테고리의 다른 글
[CI/CD] Jenkins 스크립트에서 프로젝트 빌드시 Dockerfile 경로 설정하는 법 (0) 2023.04.17 [CI/CD] Spring, Jenkins, Nginx, EC2, Docker로 무중단 배포 구현 (1) EC2 서버 기본 설정 (도커, 젠킨스, Nginx, JDK, MySQL, Redis 설치) (0) 2023.03.30 [CI/CD] Jenkins 기본 개념 및 구성 요소 (0) 2023.01.21 [CI/CD] CI, CD, CI/CD 파이프라인 기본 개념 (0) 2023.01.21