2.1.1.3 Jenkins와 파이프라인 구축
파이프라인 구축을 위한 Jenkinsfile 작성 방법
Jenkins 파이프라인은 소프트웨어 배포 과정에서 중요한 역할을 합니다. Jenkinsfile
을 사용하면 빌드, 테스트, 배포 등의 과정을 코드로 정의하여 버전 관리할 수 있으며, Jenkins가 이를 자동으로 실행하도록 설정할 수 있습니다.
기본 Jenkinsfile 구조
Jenkinsfile
은 Groovy 언어로 작성되며, 기본적으로 다음과 같은 구조를 가집니다.
pipeline {
agent any // 실행 환경 지정
stages {
stage('Build') { // 빌드 단계
steps {
// 빌드 명령어 실행
}
}
stage('Test') { // 테스트 단계
steps {
// 테스트 명령어 실행
}
}
stage('Deploy') { // 배포 단계
steps {
// 배포 명령어 실행
}
}
}
}
Jenkinsfile 작성 팁
-
agent 지정:
agent
지시어를 사용하여 파이프라인이 실행될 환경을 지정할 수 있습니다.agent any
는 Jenkins가 파이프라인을 실행할 수 있는 모든 노드에서 실행될 수 있음을 의미합니다. 특정 노드나 Docker 이미지를 지정할 수도 있습니다. -
환경 변수 사용:
environment
블록을 사용하여 파이프라인 전체에서 사용할 환경 변수를 정의할 수 있습니다. 이는 빌드나 배포 스크립트에서 중요한 설정 값을 관리하는 데 유용합니다.
environment {
MY_VARIABLE = "some-value"
}
- 조건부 실행:
when
지시어를 사용하여 특정 조건을 만족할 때만 단계를 실행하도록 설정할 수 있습니다. 예를 들어, 특정 브랜치에서만 배포가 이루어지도록 할 수 있습니다.
stage('Deploy') {
when {
branch 'master'
}
steps {
// 배포 명령어 실행
}
}
- 병렬 실행:
parallel
지시어를 사용하여 여러 단계를 동시에 실행할 수 있습니다. 이는 빌드 시간을 단축하는 데 도움이 됩니다.
stage('Test') {
parallel {
stage('Unit Test') {
steps {
// 단위 테스트 실행
}
}
stage('Integration Test') {
steps {
// 통합 테스트 실행
}
}
}
}
- 에러 처리:
post
블록을 사용하여 파이프라인의 실행 결과에 따라 추가 작업을 수행할 수 있습니다. 예를 들어, 실패한 경우 알림을 보낼 수 있습니다.
post {
failure {
// 실패 시 알림
}
}
실용적인 예시
다음은 실제 프로젝트에서 Jenkinsfile을 사용하여 Java 애플리케이션을 빌드, 테스트, 배포하는 간단한 예시입니다.
pipeline {
agent any
environment {
JAVA_HOME = "/usr/java/latest"
}
stages {
stage('Checkout') {
steps {
checkout scm // 소스 코드 체크아웃
}
}
stage('Build') {
steps {
sh './gradlew build'
}
}
stage('Test') {
steps {
sh './gradlew test'
}
}
stage('Deploy') {
steps {
sh 'scp build/libs/myapp.jar user@server:/path/to/app'
}
}
}
post {
success {
// 빌드 성공 시 실행할 작업
echo 'Build, Test and Deployment steps completed successfully.'
}
failure {
// 빌드 실패 시 실행할 작업
echo 'The build failed. Please check the console output for more details.'
}
}
}
이 Jenkinsfile
예시는 전체적인 자바 애플리케이션 빌드 프로세스를 보여줍니다. 각 stage
는 소프트웨어 개발 생명주기의 주요 단계를 나타냅니다:
- Checkout: 소스 코드를 SCM(Source Code Management) 시스템으로부터 체크아웃합니다.
- Build: 애플리케이션을 빌드하기 위해 Gradle이나 Maven과 같은 빌드 도구를 사용합니다.
- Test: 유닛 테스트 및/또는 통합 테스트를 실행하여 코드의 정확성을 검증합니다.
- Deploy: 빌드된 아티팩트(예: jar 파일)를 서버에 배포합니다.
post
블록에서는 빌드의 성공 또는 실패 여부에 따라 추가적인 단계를 정의할 수 있습니다. 이를 통해 빌드 과정의 성공 여부를 팀원들에게 알리거나, 실패 원인을 분석하기 위한 로그를 수집하는 등의 작업을 자동화할 수 있습니다.
알아두면 좋은 팁
- 스크립티드 파이프라인과 선언적 파이프라인: Jenkins는 두 가지 유형의 파이프라인 구문을 지원합니다. 스크립티드 파이프라인은 전통적인 방식으로 더 세밀한 제어가 가능하나 복잡할 수 있으며, 선언적 파이프라인은 가독성이 높고 구조화된 방식을 제공합니다.
- 파라미터화된 빌드: 파이프라인에 파라미터를 추가하여 빌드 시 다양한 옵션을 선택할 수 있도록 할 수 있습니다. 이는 다양한 환경에서의 빌드나 특정 테스트 케이스를 실행하는 데 유용합니다.
- 환경 분리: 개발, 테스트, 프로덕션 환경을 분리하여 각 환경에 맞는 파이프라인 스테이지를 구성함으로써 보안과 안정성을 높일 수 있습니다.
Jenkins와 Jenkinsfile
을 활용한 파이프라인 구축은 개발 팀의 CI/CD 프로세스를 자동화하고 효율화하는 강력한 방법입니다. 초기 설정에 시간을 투자하면, 장기적으로 보다 안정적이고 빠른 소프트웨어 개발 및 배포 프로세스를 구현할 수 있습니다.
source: DevOps/2.Continuous_Integration_(CI)/2.1.Jenkins_TravisCI_GitHubActions/2.1.1.Jenkins/2.1.1.3.md