Git&Docker&Jenkins을 이용한 CI/CD
Part1. CI/CD란?
CI란 Continuous Integration 즉, 지속적인 통합이라는 의미이다.
지속적인 통합이란, 어플리케이션의 소스 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레파지토리에 통합하는 것을 의미한다.
CD는 Continuous Delivery 혹은 Continuous Depolyment 두 용어 모두의 축약어이다.
전자인, Continuous Delivery는 공유 레파지토리로 자동으로 Release 하는 것을 의미하며, 지속적인 서비스 제공을 뜻한다.
후자인, Continuous Depolyment는 Production 레벨까지 자동으로 deploy 하는 것을 의미하며, 고객에게 배포하는 것을 뜻한다.
정리하면,
CI는 에플리케이션의 소스를 빌드, 테스트, 병합하는 것을 의미하고,
CD는 개발자의 변경 사항이 레파지토리를 넘어, 고객에게 배포하는 것까지를 의미한다.
이러한 CI/CD를 git과 연동된 소스를 기반으로 자바애플리케이션을 가상컨테이너화 시킨 후 젠킨스 파이프라인을 통해 적용해볼 예정이다.
- 개발자가 코드를 깃에 푸시한다.
- 젠킨스는 파이프라인에 따라 도커를 사용하여 빌드 및 배포를 한다
Part2. JIB란?
자바 애플리케이션을 컨테이너화 하기 위한 도구이다.
기존 애플리케이션을 컨테이너화 할때 사용하는 것은 DockerFile이다. 자바애플리케이션을 컨테이너화 하기위해 jar혹은 war 파일을 만들고 Dockerfile 을 작성해서 원하는 베이스 이미지에 빌드된 결과물을 저장하는 형태로 만들 수 있지만 해당 방법은 자동화하기 복잡하다.
이를 개선하기 위해 나온 것이 JIB이다.
JIB는 프로젝트를 빌드함과 동시에 컨테이너 이미지까지 만들어서 원하는 레포에 푸시까지 해준다.
JIB 설정 및 작성 방법
build.gradle 파일에 jib 라이브러리를 추가해 준다.
plugins {
id 'org.springframework.boot' version '2.5.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'com.google.cloud.tools.jib' version '3.1.2'
}
그리고 jib 관련된 설정을 build.gradle 파일에 추가한다.
jib는 다양한 설정 값들을 가지고 있지만 주요하게 설정하는 항목은 아래와 같다.
jib {
from {
}
to {
}
container {
}
}
1. from 구문에서 설정할 수 있는 가장 중요한 항목은 image 이다.
jib 라이브러리가 애플리케이션을 컨테이너 이미지로 만들 때 사용하는 베이스 이미지를 지정하는 항목이고 아무것도 설정하지 않으면 adoptopenjdk:11-jre이 기본값이 된다.
- to 구문에서 설정할 수 있는 가장 중요한 항목은 image와 tags이다.
여기에서의 image는 from 과는 반대로 생성된 컨테이너 이미지가 저장될 레포지터리를 의미한다. 그
리고 tags는 이 이미지에 설정될 태그를 의미한다.
- container 구문은 컨테이너 이미지가 컨테니어화 되어서 실행될 때 필요한 자바 애플리케이션의 설정들을 지정할 수 있고 jvmFlags가 가장 중요한 항목이다.
Part3. Jenkins란?
Jenkins란 레파지토리를 대상으로 소스를 가지고 와서 빌드 및 테스트를 한 후 배포까지의 일련의 작업들을 자동화해주는 툴이다.
즉, Jenkins는 Commit - Build - Test - Stage - Deploy 라는 일련의 CI/CD 프로세스를 자동화해줄 수 있다.
Jenkins 사용하기
- SSH 서버 등록
[Publish over SSH] 설정으로 이동하여 인증 정보를 입력한다.
- Passphrase : 접속하려는 서버의 로그인 패스워드
- Name : 임의의 서버 이름
- Hostname : 접속하려는 서버의 IP 주소
- Username : 접속하려는 서버의 로그인 아이디
- Git Tocken 발급
해당 프로젝트 → Settings → Access Tokens → Tocken 등록
- Add Credential
Git에서 발급받은 Tocken 사용
- Job 등록
새로운 Item → Pipeline 선택 → 원하는 General 옵션 선택 → pipeline적용
이때 Pipeline은 2가지를 선택해 사용할 수 있고 pipeline 적용은 아래에 자세하게 작성한다.
Part4. Pipeline
젠킨스 파이프 라인이란 연속적인 작업들을 젠킨스에서 하나의 파이프라인(작업)으로 묶어서 관리할 수 있게 만드는 플러그인이다.
-
- Pipeline script : 위의 사진과 같이 Jenkins내에서 Script를 작성하여 Pipeline을 구성한다. Jenkins내에서 작성을 하기 때문에 간편하다는 이점이 있다.
- Pipeline script from SCM : SCM은 Git이나 SVN과 같이 형상관리툴을 의미하며, 소스쪽에 Jenkins 파일을 생성하여 별도로 Script를 작성하여 구성하는 방식이다. 보안상의 이점이 있기때문에 이 방식을 많이 사용한다.
'Web > others' 카테고리의 다른 글
[Git] push한 commit 메시지 수정하기 (0) | 2022.08.30 |
---|---|
[java] 자바 웹개발 기술면접 정리 (0) | 2021.09.01 |
[Chrome오류] 크롬 자동 완성, 노란색 줄 표시 떴을 때 해결방법 (0) | 2021.04.02 |
[WSL/Docker] WSL2을 이용하여 Docker을 실행해보자(1) (0) | 2021.04.02 |
[Web/용어 정리] 동적(Dynamic) VS 정적(Static) (0) | 2021.04.01 |