지금 까지 작성했던 과정들을 Jenkins Pipeline으로 작성해보려고 합니다.
Jenkins Pipeline?
Jenkins Pipeline은 Jenkins에서 사용할 수 있는 여러 플러그인으로 구성된 도구 모음입니다. Pipeline은 파이프라인 DSL(Domain-Specific Language) 구문을 통해 간단하거나 복잡한 전달 파이프 라인을 코드로 생성 할 수 있는 확장 가능한 자동화 서버를 갖추고 있습니다.
Jenkins Pipeline 사용하는 이유
Jenkins Pipeline 다양한 장점이 있습니다.
코드로 자동화 프로세스를 정의할 수 있습니다. 버전 관리를 통해 관리하기 편합니다.
또한 유연하게 확장 가능합니다. 다양한 외부 도구와 통합하고 조건 분기, 루프 등을 사용하여 유연하게 구현 가능합니다.
그리고 직관적입니다. 코드로 관리하기 때문에 CI/CD 과정을 직관적으로 파악할 수 있습니다.
새로운 아이템 생성하기
파이프라인을 만들려면 Pipeline Plugin이 설치되어 있어야 합니다.
item명을 입력하고 Pipeline을 선택해 생성하면 됩니다.
Pipeline을 생성하고 하단으로 내려가면 Pipeline을 입력하는 탭이 나옵니다.
총 세가지 단계로 stage를 구성했습니다.
- tools, environment 설정
- Git Clone
- Build
- Deploy
1. tools, environment 설정
빌드하고 배포하기 위해서 사용하고 있는 버전에 맞게 사용할 Gradle과 JDK을 설정했습니다.
소스 코드 관리 서비스에 접속 정보와 서버 접속 정보를 미리 Jenkins Credentials에 등록했고 ID를 설정했습니다.
pipeline {
agent any
tools {
gradle 'Gradle 8.5'
jdk 'openjdk-17'
}
environment {
TARGET_HOST = '서버 사용자@서버 IP'
PULL_TOKEN_ID = 'Bitbucket Credential ID'
SSH_TOKEN_ID = 'Server Credential ID'
}
stages {
stage('Git Clone') {
}
stage('Build') {
}
stage('Deploy') {
}
}
}
2. Git Clone
프로젝트 레포지토리에 접속합니다.
Jenkins에서 개발 브랜치의 최신 코드를 자동으로 가져옵니다.
stage('Git Clone') {
steps {
script {
def scmEnv = checkout([
$class: 'GitSCM',
branches: [[name: '*/develop']],
doGenerateSubmoduleConfigurations: false,
userRemoteConfigs: [[
credentialsId: PULL_TOKEN_ID,
url: '프로젝트 주소'
]]
])
}
}
}
3. Build
Gradle 빌드 도구를 사용하여 프로젝트를 빌드하는 작업을 수행합니다.
배포에 필요한 *.jar 파일을 생성합니다.
stage('Build') {
steps {
script {
sh 'chmod +x ./gradlew'
sh './gradlew clean build -x test'
}
}
}
4. Deploy
SSH 접속을 사용해 생성된 *.jar 파일을 서버 특정 경로에 복사합니다.
원격 서버에 접속한 후 서비스를 재시작합니다.
stage('Deploy') {
steps {
sshagent([SSH_TOKEN_ID]) {
sh """
scp -o StrictHostKeyChecking=no build/libs/allso-0.0.1-SNAPSHOT.jar ${TARGET_HOST}:/srv/project/allso.onoffmix.xyz/deploy/
"""
sh """
ssh -o StrictHostKeyChecking=no ${TARGET_HOST} 'sudo systemctl restart allso.service '
"""
}
}
}
Stage View 배포 상태 보기
지금 빌드를 누르면 현재 빌드 상태를 확인 할 수 있습니다.
어느 Stage에서 실패를 했는지 어떤 이유 때문에 실패했는지 확인 할 수 있습니다.
로그 보기 Console OutPut
Console Output 탭에 들어가서 구성에서 작성한 대로 진행 되고 있는지 실시간으로도 확인 가능합니다. 해당 Console로 디버깅 하면서 Pipeline을 작성 했습니다.
다양한 기능들을 추가할 수도 있습니다. Trigger를 추가해서 소스 변경 상황을 감지해 자동으로 Jenkins 빌드가 실행될 수 있도록 할 수도 있고 성공 실패 여부를 slack이나 mail로 받아 볼 수도 있습니다.
배포 자동화를 통해서 효율적으로 배포하는 방법을 배웠습니다. 다음에는 ansible과 Terraform과 같은 서버 구축 자동화를 도전해보려고 합니다.
'DevOps' 카테고리의 다른 글
[DevOps] 배포 전략에 대해서 알아보자 (3) | 2025.02.05 |
---|---|
[Ansible] 왜 Ansible을 사용하게 되었는가? (2) | 2024.12.23 |
[Ansible] 어플리케이션 배포 자동화 (2) | 2024.12.10 |
[Docker] 도커 배포 vs 일반 배포 (6) | 2024.07.24 |
[Jenkins] Spring Boot Application 배포 자동화 (1) (1) | 2024.05.09 |