개발 기록
> [ CI/CD ] Docker & Jenkins & Spring boot CI/CD - 1.설계 본문

★ CI(Continuous Integration)
: 코드 변경 사항을 소스 코드 리포지토리에 자동으로 통합하는 것을 말한다.
★CD(Continuous Delivery/Deployment)
- 지속적 제공 : 빌드와 단위 및 통합 테스트를 자동화한 다음 검증된 코드를 리포지토리로 릴리스하는 것의 자동화
- 지속적 배포 : CI 부터 배포까지 모든 과정 자동화
★ CI/CD Tool: Jenkins, CircleCI, Travis CI, AWS Code Pipeline/CodeDeploy, GithubAction 등
(CI/CD 더 알아보기)
■
1. CI/CD 환경 준비
▶ 1. AWS EC2 인스턴스 생성 (Ubuntu)
▶ 2. EC2 도커 설치
▶ 3. Docker Hub Repository 생성
▶ 4. Github Repository 에 Spring Boot Project 올리기
■
2. CI/CD 시나리오
(0) 시나리오
▶ 시나리오 A - 컨테이너로 빌드/배포 서버 구분

▶ 시나리오 B - 빌드/배포 서버 분리하여 운영

(1) CI/CD 진행 순서
① branch push 이벤트 발생시 Webhook이 걸려 젠킨스 Pipeline 진행
② 젠킨스가 Build 해 준 결과 도커 이미지로 빌드한다.
③ 도커허브에 ②번에서 발생한 이미지를 올린다.
④ 시나리오 A: host 도커에서 이미지를 pull 받아 컨테이너를 실행한다.
④ 시나리오 B : 배포 서버에서 이미지를 pull 받아 컨테이너를 실행해 자동 배포한다.
(2) CI/CD 구성 순서
▶젠킨스 서버 생성
ⓛ Pull Jenkins image
② 젠킨스 컨테이너에 도커 설치(DIND or DOOD)
③ Jenkins 이미지를 컨테이너로 실행
▶ 젠킨스 환경 설정
ⓛ 도커허브/깃허브 인증정보 등록
▶ Github Wehook 생성
: -젠킨스에서 Github 에서 발생하는 event 구독
▶ 젠키스 파이프 라인 구성
ⓛ Github repository 소스코드 내려받기
② Gradle Build : 프로젝트 내부의 gradlew로 build 수행
③ Docker Image Build
: 해당 이미지 기반의 컨테이너로 실행될 떄 jar 파일 실행
: 이미지 태그: github Commit id
④ Docker Hub Image Push
▶ EC2 SSH 원격 접속
ⓛ Pull Docker Image
② Docker Run
- 기존에 실행중인 컨테이너 종료
- 새로운 컨테이너 구동
■
3. 배포 이슈
젠킨스 서버에서 이미지를 빌드하고, Spring boot Project 컨테이너를 띄우는 방법에 대해서 여러가지를 시도를 해봤는데 답을 못찾았다..
▶ 방법 1
: 호스트 도커에 Spring boot Project 컨테이너를 띄운다.
1-1. DOOD 일 때
: 젠킨스 컨테이너와 호스트 도커의 docker.sock 을 볼륨으로 연결한다. 젠킨스 컨테이너에서 발생하는 클라이언트 명령어를 호스트 도커의 데몬이 받도록 한다. (jenkins pipeline ssh step)
1-2. DIND 일 때
㉮ EC2 에 원격접속하여 도커 명령어 실행
㉯ TCP 소켓 통신으로 호스트 네트워크와 연결하여, 호스트 네트워크에 도커 명령어를 실행한다.
(TCP 활성화 방법, 원격으로 Host Docker 이용방법)
docker.withServer('tcp://swarm.example.com:2376', 'swarm-certs') {
docker.image('mysql:8-oracle').withRun('-p 3306:3306') {
/* do things */
}
▶ 방법 2
: 빌드서버, 배포서버를 각각 운영한다. 젠킨스 서버에서 배포서버로 원격접속(SSH)을 하여 이미지를 pull 받고 실행한다.
참고
https://www.itworld.co.kr/howto/212219#csidx41203997a02377aac4696432a0305c0
'인프라' 카테고리의 다른 글
| >[ CI/CD ] Docker & Jenkins & Spring boot CI/CD - 3. Jenkins 접속 및 Github 연동 (0) | 2024.03.08 |
|---|---|
| > [ CI/CD ] Docker & Jenkins & Spring boot CI/CD - 2. 호스트 도커에 젠킨스 구축하기 (DIND, DOOD) (0) | 2024.03.08 |
| > [AWS] EC2 인스턴스 SSH 접속 (0) | 2024.03.08 |
| > [AWS] AWS 프리티어 EC2 인스턴스 생성 방법 (0) | 2024.03.05 |
| > [Docker] Ubuntu에 Docker 설치하기 (0) | 2023.11.27 |