여러분은 서버 개발할 때 어떤 방식으로 배포하고 수정하시나요 ?
소프트웨어 개발에서는 Git Flow
, Trunk-Based Development
, gitHub Flow
등 다양한 방식이 있습니다.
큰 규모의 복잡한 프로젝트에는 Git Flow가 적합할 수 있고,
빠른 개발과 배포를 원하는 프로젝트에서는 Trunk-Based Development가 적합할 수 있습니다.
모든 방식은 팀의 규모, 프로젝트의 복잡성, 배포 주기, 팀원들의 경험 및 선호 등을 고려하여 선택하시면 됩니다.
제가 포스팅할 방법은
Gitflow Workflow
의 방식으로
개발 브렌치(dev
)와 메인 브렌치(main
)를 나눠 개발을 진행할 예정입니다.
dev
는 개발을 위한 주요 브랜치로 사용됩니다.
새로운 기능 개발, 버그 수정, 퍼포먼스 개선 등의 작업이 이 브렌치에서 이루어집니다.
이 브랜치는 테스트서버(또는 스테이징 서버)에 배포되어 여러 가지 테스트(유닛 테스트, 통합 테스트, 사용자 테스트 등)를 거칩니다.
팀원들은 새로운 기능이나 수정 사항을 dev
브랜치에 병합하고, 충분한 테스트와 검증을 거친 후에 메인 브렌치로 이동하게 되죠.
메인 브랜치는 안정적인 버전의 코드를 유지하는 데 사용됩니다.
메인 브랜치의 코드는 실제 사용자가 사용하는 생산(프로덕션) 서버에 배포됩니다.
일반적으로 정해진 스케줄이나 특정기준(모든 테스트 통과, 스테이크 홀더의 승인 등)에 따라 이루어집니다.
저희 프로젝트에서는 매주 일요일 고정적인 회의를 통해 dev
브랜치 최종 검증 후에 코드 리뷰를 통해 main(master)
브랜치로 배포할 예정입니다.
메인 브랜치는 본 서버로 배포되는 브랜치로 한명의 개발자가 수정할 수 없도록 Protection되어야 합니다. 어떻게 Protection을 해야할 지 모르시겠다면 링크를 참고하시면 좋을 것 같습니다.
기존에 젠킨스로
main
브랜치에 대해 CI/CD를 구성했습니다.
dev 브랜치도 젠킨스로 파이프라인을 구성해보겠습니다.이미 설정한
main
의 파이프라인이 있으므로 빠르게 새로운dev
파이프라인을 생성하실 수 있습니다.
이전의 설정이 궁금하시다면 도커와 젠킨스(2)를 참고해주세요 !
가장 먼저 젠킨스에 접속하셔서 새로운 Item을 선택해주세요.
기존의 main
파이프라인 이름이 Everblaze로 설정했으므로
dev
의 파이프라인 이름은 Everblaze_dev로 설정하겠습니다.
그리고 Pipeline를 선택해주시고 다음 창으로 넘어갑니다.
충돌방지 옵션과 Webhook 관련 체크박스를 선택하시고 파이프라인을 구성해주시면 됩니다.
파이프라인 코드
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git branch: 'dev', // dev 브랜치를 체크아웃
credentialsId: '자격 증명 ID',
url: 'https://github.com/repoURL.git'
}
}
stage('Build') {
steps {
sh 'chmod +x ./gradlew'
sh './gradlew build'
}
}
stage('Dockerize') {
steps {
sh '''
docker stop dev_컨테이너 이름 || true
docker rm dev_컨테이너 이름 || true
docker rmi dev_이미지 이름 || true
docker build -t dev_이미지 이름 .
'''
}
}
stage('Deploy') {
steps {
sh '''
docker run -d --name dev_컨테이너 이름 -p 포트번호:8080 dev_이미지 이름
'''
}
}
}
}
이제 즉시 빌드를 하시면 됩니다 !
저의 경우는 한번 실패하게 되었는데 사용중인 포트번호와 충돌로 인해서 실패하게 되었더라구요. 다른 분들도 실행하면서 주의해주시면 좋을 것 같아요 !
마지막으로 저는 EC2 환경이므로 보안그룹에
dev
의 파이프라인을 넣어주셔야 정상적으로 연결이 되실겁니다 !