현대 소프트웨어 개발 환경에서는 빠른 배포와 안정성을 유지하기 위해 자동화된 프로세스를 사용하는 것이 필수적입니다. 오늘은 Jenkins와 GitLab CI/CD를 이용한 자동화 및 서버 구성 관리에 대해 자세히 알아보겠습니다.
1. CI/CD의 이해
CI/CD는 지속적 통합(Continuous Integration)과 지속적 배포(Continuous Deployment)의 약자로, 소프트웨어 개발의 여러 단계를 자동화하는 것을 의미합니다. 이를 통해 개발자는 코드를 빈번하게 통합하고, 자동 테스트 및 배포를 통해 빠르게 피드백을 받을 수 있습니다.
1.1 지속적 통합(Continuous Integration, CI)
CI는 개발자가 코드를 자주(하루에도 수십 번) 공유하는 과정입니다. 이를 통해 코드 변경이 발생할 때마다 자동으로 빌드 및 테스트가 실행되어 문제가 조기에 발견될 수 있습니다.
1.2 지속적 배포(Continuous Deployment, CD)
CD는 CI를 통해 통합된 코드를 자동으로 프로덕션 환경에 배포하는 과정입니다. 이는 개발자가 코드 변경이 있을 때마다 수동으로 배포할 필요 없이 자동으로 이루어지도록 합니다.
2. Jenkins란?
Jenkins는 오픈 소스 자동화 서버로, 소프트웨어 빌드 및 배포의 자동화를 지원합니다. 다양한 플러그인을 통해 CI/CD 파이프라인을 쉽게 구성하고, 관리할 수 있습니다.
2.1 Jenkins 설치
Jenkins를 설치하는 방법에는 여러 가지가 있지만, 가장 일반적인 방법은 Docker를 사용하는 것입니다. 다음은 Docker를 사용하여 Jenkins를 설치하는 예제입니다.
docker run -d -p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
위 명령어는 Jenkins 최신 LTS 버전을 다운로드하고, 8080 포트에서 서비스를 실행하게 됩니다.
2.2 Jenkins 설정
Jenkins를 처음 실행하면, 초기 관리자 비밀번호를 입력해야 합니다. 이는 Jenkins 설치 후 제공되는 /var/jenkins_home/secrets/initialAdminPassword 파일에서 확인할 수 있습니다. 로그인 후, 플러그인 설치 화면이 나타납니다. 기본 설정을 사용하여 플러그인을 설치해 주세요.
3. GitLab CI/CD란?
GitLab CI/CD는 GitLab에 내장된 CI/CD 도구로, 소스 코드 저장소와 비슷하게 구성되어 있어 GitLab 레포지토리에 직접 선언적인 방식으로 배포 파이프라인을 설정할 수 있습니다.
3.1 GitLab CI/CD 파이프라인 구성
GitLab CI/CD 파이프라인을 구성하는 데 필요한 것은 .gitlab-ci.yml
파일입니다. 이 파일은 프로젝트 루트에 위치하며, 파이프라인의 모든 단계를 정의합니다.
예제 .gitlab-ci.yml
stages:
- build
- test
- deploy
build:
stage: build
script:
- echo "Building the application..."
- npm install
test:
stage: test
script:
- echo "Running tests..."
- npm test
deploy:
stage: deploy
script:
- echo "Deploying the application..."
- ./deploy.sh
4. Jenkins와 GitLab CI/CD의 비교
Jenkins와 GitLab CI/CD 모두 강력한 CI/CD 도구지만, 여러 가지 점에서 차이가 있습니다.
- 설정과 관리: Jenkins는 플러그인과 다양한 설정이 필요하여 초기 설정이 복잡할 수 있습니다. 반면 GitLab CI/CD는 GitLab의 일부로 통합되어 있어 설정이 간편합니다.
- 사용자 인터페이스: Jenkins는 UI가 다소 복잡할 수 있으나, GitLab은 직관적인 UI를 제공합니다.
- 호스팅: Jenkins는 자체 서버에 설치하여 사용하는 반면, GitLab CI/CD는 GitLab의 클라우드 서비스 또는 셀프 호스팅에 통합되어 사용할 수 있습니다.
5. Jenkins를 사용한 배포 자동화
다음 단계로 Jenkins를 사용한 간단한 배포 자동화 설정을 설명드리겠습니다.
5.1 Jenkins 파이프라인 구성
Jenkins에서 파이프라인을 구성하기 위해 “Pipeline” 플러그인을 이용합니다. Jenkins 대시보드에서 “새로운 Item”을 클릭한 후, “Pipeline”을 선택합니다.
예제 Jenkinsfile
pipeline {
agent any
stages {
stage('Build') {
steps {
script {
echo 'Building...'
sh 'npm install'
}
}
}
stage('Test') {
steps {
script {
echo 'Testing...'
sh 'npm test'
}
}
}
stage('Deploy') {
steps {
script {
echo 'Deploying...'
// 배포 스크립트를 실행
sh './deploy.sh'
}
}
}
}
}
6. 결론
자동화된 배포는 소프트웨어 개발에서 매우 중요한 요소입니다. Jenkins와 GitLab CI/CD를 통해 CI/CD 파이프라인을 구축하면 배포 주기를 단축하고, 코드 품질을 높일 수 있습니다. 코드 변경 시 자동 테스트와 빌드가 이루어져, 안정적인 배포와 스케일업을 통해 더 나은 사용자 경험을 제공할 수 있습니다.
다양한 도구와 기술들이 파트너가 되어 여러분의 개발 환경을 안정적이고 효과적으로 만들 수 있기를 바랍니다.