Jenkins
젠킨스는 지속적 통합, 배포를 용이하게 관리해주는 CI/CD이다.
젠킨스에서 제공하는 브라우저(UI)는 UX가 좋다는 것을 느꼈고
이를 통해 불편함 없이 점진적으로 확장 가능한 것이 장점이라고 생각했다.
파이프라인을 직접 작성하여 의도대로 프로세스(배치 등)를 나누어
예상 가능한 작업이 가능하도록 분기할 수 있었고 staging, build,
deploy 등 에러 발생 시 빠르게 파악가능하여 디버깅 및 대응이
빠른 것이 가장 큰 이점이라고 생각했다.
PipeLine
젠킨스 내에서 프로젝트를 구성하고 해당 프로젝트 내로 들어갔을때
좌측 상단메뉴를 통해 접근할 수 있다.
- 구성 -> pipeline
위와 같이 파이프라인을 작성할 수 있는 Pipeline script 블록에서 작성할 수 있다.
Script
pipeline {
agent any
tools {
nodejs 'NodeJS 20.16.0'
}
stages {
stage('Checkout') {
steps {
cleanWs()
git branch: 'main', credentialsId: 'your-project-token', url: 'project-git-repository-url'
}
}
stage('Build') {
steps{
sh'''
echo Install Node.js and npm...
npm --version
node --version
npm install
npm run build
'''
}
}
stage('Deploy') {
steps{
sshPublisher(
publishers:
[
sshPublisherDesc(
configName: 'linux-server',
transfers:
[
sshTransfer(
cleanRemote: false,
execTimeout: 120000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '/opt/project',
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: '.next/**, public/**, package.json, .env.development, .env.production',
excludes: '',
execCommand: 'cd /opt/project && npm install && pm2 restart ecosystem.config.json',
)
]
)
]
)
}
}
}
}
필자는 Next.js 14버전 app-router 프로젝트를 기반으로 작성하였고
간단하게 Checkout, Build, Deploy로 나누었다.
Checkout: 빌드하게 될 깃 레포지토리를 지정
Build: 젠킨스 os환경에서 sh 명령문을 활용하여 npm install, build를 실행
Deploy: sshPublisher의 transfers를 통해 포함할 파일을 지정하여
배포될 서버 환경으로 전달해주고 execCommand를 통해 배포서버
환경에서 실행시킬 명령어를 전달하여 pm2를 활용한 서버 재시작으로
변경사항이 배포사이트에 적용될 수 있도록 해주었다.
마치며...
주로 프론트엔드 기술을 주력으로 개발자로 종사하고 있지만, 기회만 주어지게 된다면 개발자적 시야를 넓히고자 자발적으로 업무를 맡아보고 있다. 실제로 개발은 프론트와 서버로 나눈다는 개념보다는 프로그램을 만드는 것 자체가 개발이라고 생각하기 때문에 앞으로도 더 다양한 분야의 개발을 경험할 예정이다. 실제로 지금 java 언어와 스프링부트 프레임워크에 대해 공부도 겸하고 있다. 언제나 새로운 개념을 알았을 때, 그리고 그러한 개념이 지금까지의 기술력과 이어질 때만큼은 정말 보람차고 즐거운 것 같다😊