Kubernetes 를 공부하고 프로젝트에서 개발 작업에 들어가며 서버 배포를 적용하기전 CI 에 대해 알아봤습니다.
CI(Continuous-Integration)는 무엇인가요?
CI 란 우리말로 지속적인 통합 이라고 하며 소프트웨어 개발 과정에서 발생하는 여러 문제를 해결하기 위해 도입된 방법론 중 하나입니다. 이 방법론은 소스 코드 변경 사항이 지속적으로 통합되고 테스트되어 공유 저장소에 자동으로 빌드되는 개발 프로세스를 갖추고 있습니다. 이를 통해 개발자들은 코드 변경 사항이 실제 환경에 반영되기 전에 품질을 확인할 수 있습니다.
CI 의 핵심 목표
- 빠른 피드백 : 소스 코드 변경 사항이 통합되고 테스트되는 프로세스를 자동화함으로써 빠른 피드백을 제공합니다. 이는 버그를 조기에 발견하고 수정함으로써 전체 개발 주기를 단축합니다.
- 품질 향상 : 지속적으로 통합하고 테스트함으로써 소프트웨어의 품질을 향상시킵니다. 이는 안정적이고 견고한 소프트웨어 제품을 개발하는 데 도움이 됩니다.
- 통합 충돌 해결 : 여러 개발자가 동시에 작업할 때 발생하는 통합 충돌을 줄입니다. CI는 변경 사항이 공유 저장소에 통합되기 전에 충돌을 탐지하고 해결할 수 있는 기회를 제공합니다.
- 자동화 : 반복적이고 지루한 작업들을 자동화 함으로써 개발자들이 더 많은 시간을 실제 개발에 집중할 수 있도록 돕습니다.
Kubernetes와 CI 는 서로 다른 영역이지만, Kubernetes와 함께 CI를 사용하는 것은 개발자들이 코드를 더욱 신속하게 배포하고 관리할 수 있도록 도와줍니다. CI 시스템은 새로운 코드를 빌드하고 테스트하여 Docker 이미지를 생성하고 Kubernetes 클러스터에 배포할 수 있습니다. 이를 통해 소프트웨어의 품질을 유지하고 배포 프로세스를 자동화 할 수 있습니다.
CI 도구 선택
CI 도구는 스크립트 언어를 통해 다양한 작업을 수행하며, 소스 코드를 버전 관리 시스템으로부터 주기적으로 업데이트 받고 수정된 코드에 대한 빌드와 테스트를 자동으로 실행하는 역할을 합니다. 이를 통해 개발자들은 소프트웨어를 지속적으로 통합하고 테스트할 수 있습니다.
대표적인 CI 도구로는 Jenkins, Team City, Travis CI 등이 존재합니다. 유명 오픈소스 이며 Travis CI 보다 많은 레퍼런스가 있다는 장점이 있어 Jenkins로 선택했습니다.
빌드 자동화 툴
소스파일을 컴파일 하고 실행 파일인 war 또는 jar 파일을 생성하는 여러 단계를 자동화 한 것을 빌드 자동화라고 합니다. 프로젝트 마다 차이가 있겠지만, 수정사항에 따라 빌드가 하루에 수 백번 발생하는 프로젝트도 존재합니다. 빌드를 자동화 한다면 많은 시간을 절약시켜 줌과 동시에 컴파일 오류, 통합 에러, 또는 빌드 에러가 조기에 발견이 가능합니다.
대표적인 빌드 자동화 툴로는 Maven, Gradle, Ant 가 있습니다.
테스트 자동화 툴
테스트 자동화를 통해 배포에 걸리는 시간을 감소시켜주는 작업이 필요합니다. Java 언어로 개발하고 있다면 JUnit 과 같은 툴이 대표적인 테스트 자동화 툴입니다.
그럼 이제 Jenkins 를 이용해볼까 합니다.
시작하기
1. Jenkins 설치하기
docker pull jenkins/jenkins
docker run -d -v jenkins_home:/var/jenkins_home -p 8088:8080 -p 50000:50000 --restart=on-failure --name jenkins-server jenkins/jenkins:lts-jdk11
Jenkins 초기 설정하기
/var/jenkins_home/secrets/initialAdminPassword는 컨테이너 내부의 경로 및 파일을 나타냅니다.
아래와 같이 명령어를 실행하면 Administrator password 정보를 확인할 수 있습니다.
docker exec jenkins-server cat /var/jenkins_home/secrets/initialAdminPassword
Administrator password 정보를 입력한 뒤 다음으로 넘어가면 플러그인 설치 화면이 나옵니다. 초기 설정에서는 기본 설치를 진행하고, 추후에 필요한 플러그인들을 설치합니다.
기본 설치를 클릭하면 위와 같이 설치가 진행됩니다.
모든 설치가 완료되면 Admin 계정 입력하면 됩니다.
이제 대시보드 화면을 볼 수 있습니다.
초기화면에서 Jenkins 환경설정 진행
Deploy to container 를 설치합니다.
빌드 성공 후 container에 war 파일을 배치시켜주는 플러그인
Publish ssh 플러그인을 설치합니다.
SSH를 통해 빌드 산출물을 전송하기 위해 사용하는 플러그인
Jenkins 프로젝트 생성
소스코드 관리 > Git 설정
소스코드 관리에서 Git을 선택하고 프로젝트 주소를 적습니다.
ID 는 본인 이름(hyerin) 의 하단의 회색 별칭을 입력합니다.
Password : GitHub Password 를 적습니다.
빌드 환경에서 Send files or execute conmmands over SSH after the build runs 옵션을 체크해줍니다.
Build Stemp dptj Add build step - Invoke top-level Maven targets 를 추가해줍니다. Goal 에는 clean package war:war 넣어줍니다.
마무리
이제 Jenkins 환경 설정이 끝났습니다. 앞으로 다양한 배포 상황을 다루어 보도록 하겠습니다. 처음에는 무작정 어려워 보였던 환경이 직접 구성해보니 재밌었습니다. 더 알아가는 그 날 까지 노력해보겠습니다.
'Kubernetes' 카테고리의 다른 글
Github WebHooks 연동하여 Jenkins 빌드 자동화 (0) | 2024.03.13 |
---|---|
Jenkins를 Kubernetes 에 구성하기 (0) | 2024.03.11 |
[CKA] Mock Exam - 3 (0) | 2023.11.30 |
[CKA] Mock Exam - 2 (0) | 2023.11.20 |
[CKA] Mock Exam - 1 (0) | 2023.11.15 |