728x90
> JenKins 란 ?
- 젠킨스는 소프트웨어 개발 시 지속적으로 통합 서비스(Continuous Integration 이하 CI)를 제공하는 툴
- 하나의 프로그램 개발 시 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유영역에 있는 저장소에 지속적으로 업로드 함으로써 지속적 통합
- 소스의 커밋을 감지하면, 자동적으로 자동화 테스트가 포함된 빌드가 작동하도록 구성 가능
- Java Runtime Environment에서 동작
- 다양한 플러그인들을 활용해서 각종 자동화 작업을 처리
- AWS 배포, 테스트, 도커 빌드 등 할게 너무 많으니 각각의 컴포넌트들을 하나의 플러그인으로 모듈화를 해놓았는데 이를 활용하여 사용
- 플러그인들을 잘 조합해서 돌아가게 하는 게 Pipeline, 일련의 자동화 작업의 순서들의 집합인 Pipeline을 통해 CI/CD 파이프라인을 구축
1. 정의
- 빌드(Build) : 소스 코드를 컴파일하여 실행 가능한 바이너리나 실행 파일을 생성하는 과정이다.
- 배포(Deployment) : 빌드가 완료된 소프트웨어를 운영 환경이나 사내 저장소에 배포하는 과정이다.
2. 빌드/배포 과정
3. 빌드/배포 표준화
3.1. 프로젝트 빌드 도구
팀에서 사용할 빌드 도구를 결정한다. 각 언어에 따라 빌드 도구를 표준화 한다.
- Java
- Maven 3
- C#
- VisualStudio
- Javascript
- Javascript Framework 에 따라 유동적
- Vue - Vite
- React - Next ?, webpack ?
- Javascript Framework 에 따라 유동적
3.2. 프로젝트 빌드 및 배포 스크립트
개발 프로젝트별로 빌드 스크립트를 표준화하여 프로젝트들의 빌드 수행이 일관되도록 한다.
3.2.1. Java Project
Java 로 개발되는 제품들은 Maven Project 로 구성하며 빌드 설정 파일인 pom.xml 에 <build>
, <distributionManagement>
스크립트를 다음과 같이 작성한다
- 빌드 스크립트
- maven-compiler-plugin
- 3.8.1 version 이상으로 사용한다.
- Java version 은 11 version 이상으로 사용한다.
- maven-surefire-report-plugin
- 빌드 시 단위테스트 수행 결과를 Reporting File을 생성한다.
- 3.1.2 version 이상으로 사용한다.
<build> <plugins> <!-- Source Code Compile --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <!-- Maven Junit 단위테스트 결과 Report --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-report-plugin</artifactId> <version>3.1.2</version> <configuration> <outputName>UNIT-TEST-RESULT-REPORT</outputName> <outputDirectory>target/unit-test-result-reports</outputDirectory> </configuration> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.8.2</version> </dependency> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.8.2</version> </dependency> </dependencies> </plugin> </plugins> </build>
- maven-compiler-plugin
- 배포 스크립트
<distributionManagement> <!-- use the following if you are using a snapshot version. --> <snapshotRepository> <id>hanwha-snapshots</id> <name>hanwha-snapshots</name> <url>http://000.000.000.000:8081/repository/hanwha-snapshots/</url> </snapshotRepository> <!-- use the following if you're not using a snapshot version. --> <repository> <id>hanwha-releases</id> <name>hanwha-releases</name> <url>http://0.0.0.0:8081/repository/hanwha-releases/</url> </repository> </distributionManagement>
- snapshotRepository
- 사내 공용 Library Snapshots 저장소
- repository
- 사내 공용 Library 저장소
- snapshotRepository
3.3. 빌드/배포 자동화 서버
빌드/배포 자동화 서버에 Global 빌드 환경을 구축하여 일관성 있는 빌드를 보장할 수 있도록 설정한다. 빌드 자동화 서버로는 Jenkins 소프트웨어를 활용한다.
3.3.1. Jenkins 서버 정보
팀 내에서 공통으로 사용하는 Jenkins 서버 정보는 다음과 같다.
공용으로 사용되는 서버가 정해지면 해당 정보 수정 필요
- 접속 URL
- URL 주소
- 계정 정보
- username : test
- password : test
3.3.2. Jenkins Global 설정
- 배포 서버 설정배포 대상 서버가 정해지면 해당 서버 정보를 추가한다.
- Jenkins 를 통해 빌드가 수행되고 난 후 배포 할 서버를 등록한다.
- Jenkins 관리 > System > SSH Servers 설정
- SSH Server -> 배포 대상 SSH 서버 이름 설정
- Hostname -> 배포 대상 SSH 서버 HOST_IP 설정
- Username -> 배포 대상 SSH 서버 계정 설정
3.3.3. 빌드/배포 ITEM 생성
Jenkins를 통해 빌드/배포 하고자 하는 Item<프로젝트>를 생성한다.
Step 1 > Maven Project 생성
- Jenkins Dashboard 에서 새로운 Item을 선택한다.
- Jenkins에서 빌드/배포 자동화를 진행 할 Item을 생성한다.
- Item 이름을 넣은 후 Maven project를 클릭한 후 OK버튼을 클릭한다.
Step 2 > 소스코드관리 입력
- 사용하는 형상관리도구를 설정한다.
- 소스 코드를 관리할 형상관리도구 툴을 선택한다.
- Repository URL 항목에 빌드할 프로젝트 경로를 입력한다.
- Credentials에 SVN의 계정 아이디와 비밀번호를 입력한다.
- 해당 프로젝트에 접근 권한이 없는 경우 입력하지 않아도 상관없음.
Step 3 > 빌드 유발 및 빌드 환경 설정
- 빌드환경에서 Log를 확인하기 위해 'Add timestamps to th Console Output' 을 선택한다.
Step 4 > Build 설정
- pom.xml을 설정한다.
- Build 를 진행 할 프로젝트의 Root POM 파일 위치를 설정한다. 프로젝트의 Root 디렉토리에 pom.xml이 있다면 pom.xml 만 설정한다.
- Maven Build의 Goal아니 Phase 를 설정한다.
- clean -> 이전 Build 결과물 제거
- surefire-report:report -> 단위 테스트를 진행 결과에 대한 Report 생성
- package -> 프로젝트 Packaging
Step 5 > 빌드 후 조치 설정 - Publish HTML reports 추가
- 프로젝트 빌드 후 테스트 결과 Report를 생성하기 위해 빌드 후 조치 추가 선택 후 'Publish HTML reports' 를 선택한다.
- 추가 버튼을 선택하여 아래와 같이 정보를 입력한다.
- HTML directory to archive -> Maven surefire plugin을 통해 생성되는 report 파일의 생성 위치 설정
- Index page[s] -> 생성되는 report 파일명 설정
- Report Title -> HTML Report 보기 메뉴명
Step 6 > 빌드 후 조치 설정 - Send build artifacts over SSH 추가
- 프로젝트 빌드 후 테스트 결과 Report를 생성하기 위해 빌드 후 조치 추가 선택 후 'Publish HTML reports' 를 선택한다.
- 추가 버튼을 선택하여 아래와 같이 정보를 입력한다.
- SSH Server -> 시스템설정에서 배포대상 SSH로 등록한 정보 선택
- Transfer Set Source files -> Build를 통해 생성되는 Package 파일이 존재하는 경로 설정
- Remove prefix -> 위의 입력한 정보에서 삭제하고자 하는 Prefix 설정
- Remote directory -> 배포대상 SSH 서버의 원격 Directory 명 설정
3.4. Jenkins 빌드 스케쥴링 설정
각 프로젝트 별로 빌드의 스케줄을 추가하여 자동으로 빌드/배포가 수행될 수 있도록 등록한다.
다음은 스케쥴링을 등록하는 예시이다.
- 프로젝트 구성 페이지 이동
- Jenkins Dashboard > 프로젝트 > 구성
- 프로젝트 스케쥴링 설정
- 빌드 유발 챕터로 이동
- 일정한 시간 간격마다 빌드하는 옵션인, Build periodically 클릭 후 스케쥴링 설정
- 코드 저장소 변경을 주기적으로 감지하는 옵션인, Poll SCM 클릭 후 빌드를 트리거하는 방법을 사용
- Jenkins 스케쥴링 표현식
- Jenkins의 스케쥴링은 크론(Cron) 표현식과 유사한 형식으로 설정된다.
- 스케쥴링 표현식은 빌드나 작업이 언제 실행될지를 정의하는데 사용된다.
- 이 표현식은 다양한 필드를 사용하여 년, 월, 일, 시간 및 분을 지정하며, 각 필드는 공백 또는 구분 기호로 구분된다.
- 일반적인 크론 표현식 형식:
분
: 분 (0-59).시간
: 시간 (0-23).일
: 월의 일자 (1-31).월
: 월 (1-12).요일
: 요일 (0-6, 일요일부터 토요일까지)- 스케쥴링 표현식의 각 필드에는 숫자 또는 별표(
*
)를 사용하여 실행 시점을 지정할 수 있다. - 숫자는 특정 값, 별표는 모든 값(범위 내의 모든 값)을 의미합니다. 추가로, 몇몇 문자열 값과 특수 문자를 사용할 수 있다.
*
: 모든 값.*/n
: n 간격으로 실행.n
: 특정 값을 지정.n-m
: n부터 m까지의 범위.n,m,x
: n, m, 또는 x 중 하나를 선택.?
: 필드에 대한 지정 없음(일반적으로 요일 또는 일 필드에서 사용).L
: 마지막 값(월요일 또는 마지막 일).W
: 가장 가까운 평일.#
: 두 번째 또는 세 번째 특정 요일.- 예시
H/5 * * * *
: 5분마다 실행.H 2 * * *
: 매일 오전 2시에 실행.H H(9-18) * * *
: 매일 오전 9시부터 오후 6시까지 매 시간 실행.H 0/2 * * *
: 매 2시간마다 실행.H H 1 * *
: 매월 1일 오전 1시에 실행.
분 (0-59) 시간 (0-23) 일 (1-31) 월 (1-12) 요일 (0-6)
4. 교육과 지원
빌드와 배포에 대한 교육 및 실습을 통해 개발자 및 운영자들의 역량을 강화한다.
728x90
'Back > Spring' 카테고리의 다른 글
Maven Private 리포지토리 이용하기 private Setting.xml 작성 (0) | 2023.11.14 |
---|---|
Mock이란 (0) | 2023.10.22 |
Maven 이란? 개념 , 특징 , 정의 (0) | 2023.02.02 |
@Component , @Autowired ?? 사용하는 이유 (0) | 2022.09.01 |
Spring] AOP LOG 파일에 저장하기 (0) | 2022.08.29 |