Parallel Tests in Jenkins Pipeline
RECOMMEND POSTS BEFORE THIS
0. 들어가면서
젠킨스(jenkins) 파이프라인은 필요하다면 병렬로 처리할 수 있습니다. 프론트엔드, 백엔드 서비스 코드를 모두 가진 하나의 프로젝트를 가지고 파이프라인 병렬 처리 방법을 알아보겠습니다.
1. 프로젝트 구조
코드는 중요하지 않으니 프로젝트 구조만 살펴보겠습니다.
- backend 폴더는 Spring Boot 프로젝트입니다.
- BackendApplicationTests 클래스는 단위 테스트를 수행합니다.
- BackendApplicationIT 클래스는 결합 테스트를 수행합니다.
- frontend 폴더는 React 프로젝트입니다.
- App.test.js 파일은 단위 테스트를 수행합니다.
- docker-compose.yml 파일을 통해 프론트엔드, 백엔드 서비스를 로컬에 배포합니다.
- Jenkinsfile 파일에 작성된
Declarative방식의 스크립트를 통해 젠킨스 파이프라인을 제어합니다.
├── Jenkinsfile
├── README.md
├── backend
│ ├── Dockerfile
│ ├── HELP.md
│ ├── action-in-blog.iml
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── action
│ │ │ └── in
│ │ │ └── blog
│ │ │ └── BackendApplication.java
│ │ └── resources
│ │ ├── application.properties
│ │ ├── static
│ │ └── templates
│ └── test
│ └── java
│ └── action
│ └── in
│ └── blog
│ ├── BackendApplicationIT.java
│ └── BackendApplicationTests.java
├── docker-compose.yml
└── frontend
├── Dockerfile
├── README.md
├── conf
│ └── nginx.conf
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
└── src
├── App.css
├── App.js
├── App.test.js
├── index.css
├── index.js
├── logo.svg
├── reportWebVitals.js
└── setupTests.js
2. Jenkinsfile 작성하기
각 스테이지(stage) 별로 동작하는 모습을 살펴보겠습니다.
tests스테이지parallel블록을 사용하여 백엔드, 프론트엔드 테스트를 병렬로 수행합니다.dir블록을 사용하여 특정 경로에서 명령어를 실행합니다.backend test스테이지에서 백엔드 프로젝트의 단위, 결합 테스트를 수행합니다.frontend test스테이지에서 프론트엔드 단위 테스트를 수행합니다.
build스테이지- 도커 컴포즈(compose)를 사용하여 실행 중인 서비스가 있다면 종료하고, 새로운 이미지를 빌드합니다.
deploy스테이지- 도커 컴포즈를 사용하여 백엔드, 프론트엔드 서비스를 백그라운드에서 실행합니다.
pipeline {
agent any
stages {
stage('tests') {
parallel {
stage('backend test') {
steps {
dir('backend') {
sh 'mvn verify'
}
}
}
stage('frontend test') {
steps {
dir('frontend') {
sh 'npm install && npm test'
}
}
}
}
}
stage('build') {
steps {
sh 'docker-compose down && docker-compose build'
}
}
stage('deploy') {
steps {
sh 'docker-compose up -d'
}
}
}
}
3. Jenkins Pipeline 설정 변경
GitHub 웹 훅(web hook)이 연결된 젠킨스 파이프라인 잡(job) 하나를 만들고 Jenkinsfile을 등록합니다.
GitHub 웹 훅이 연결된 젠킨스 파이프라인 만드는 방법은 젠킨스(Jenkins) GitHub Webhooks 연동 포스트를 참고하시기 바랍니다.
다음과 같이 파이프라인 설정을 변경합니다.
- Definition - Pipeline script from SCM
- SCM - Git
- Repository URL - 웹 훅이 등록된 원격 저장소 주소
- Credentials(optional) - 저장소에서 소스 코드를 받을 때 필요한 인증키
- Branch Specifier - 원격 저장소에서 사용하는 특정 브랜치
- Script Path -
Jenkinsfile이 위치한 경로와 파일명- 프로젝트 루트 경로에 위치하였기 때문에 파일명만 추가합니다.
4. Trigger Pipeline by Web Hook
원격 저장소에 변경 이력을 만들면 웹 훅을 통해 파이프라인이 실행됩니다.
Jenkinsfile에 정의한대로 파이프라인이 실행되는지 확인합니다.
Pipeline Graph View 플러그인을 설치하면 병렬로 실행됐는지 여부를 확인할 수 있습니다.
파이프라인 동작
Pipeline Graph View 플러그인으로 확인한 실행 결과
댓글남기기