본문 바로가기

728x90

DevOps/CI&CD

(5)
EC2에 SonarQube 설치 & Jenkins로 코드 분석하기 1. SonarQube란? 소스 코드의 실행 없이 정적으로 프로그램의 문제를 찾는 정적 분석 도구입니다. 지속적인 통합과 분석을 할 때 사용되는 솔루션으로 코드의 품질을 높이기 위해서 코드의 이슈, 복잡성 등을 분석해서 코드가 사용할 수 있는 가용 범위 혹은 문제가 있는 코드를 분석해 줍니다. 버그를 찾는다든가 아니면 취약성 있는 코드를 찾을 수 있다. 또한, 코드 smell을 감지하여 불필요한 코드와 코드의 이상 여부를 체크할 수 있습니다. 이러한 작업을 통해서 코드의 품질을 높일 수 있습니다. 다양한 언어에 SonarQube가 사용이 되고, 특히 CI/CD 부분에서 자주 사용이 됩니다. 2. 프로젝트에 SonarQube 적용 기존 프로젝트의 build.gradle 파일을 수정해줍니다. 기존 plugi..
Jenkins를 활용한 CI/CD 구축(4/4) - Pipeline 구축 ※ 1, 2, 3편을 안 보고 이 포스팅을 볼 경우에 이해가 안 될 수가 있습니다. 1, 2, 3편을 연달아 보시는 걸 추천드립니다. 1. 파이프 라인이란? 단일 작업이 아니라 연쇄적인 작업들을 이어주게 합니다. Jenkins에는 파이프 라인을 구축하는 2가지 방식이 있습니다. 1) Delivery Pipeline Item 타입의 프로트타입의 연장선입니다. Jenkins 프로젝트 마지막의 빌드 후 조치에서 Build other projects를 선택. Projects to build에서 첫 번째 단계 이후에 실행할 Jenkins 프로젝트명을 적으면 됩니다. (반드시 두 번째 단계에서 실행할 Jenkins 프로젝트가 구성되야 한다.) Trigger only if build is stable을 선택하여 안정..
Jenkins를 활용한 CI/CD 구축(3/4) - Docker를 활용한 무중단 배포 1. 무중단 배포가 필요한 이유 이전 포스팅에서 치명적인 결점이 무엇이라 생각하시나요? 배포할 때 프론트 엔드는 실시간으로 파일이 변경되는 반면, 백엔드는 새로운 Jar 파일이 실행되기 전까지 기존 Jar 파일을 종료시키기 때문에 서비스가 일시적으로 중단이 됩니다. 만약 배포하는 동안(downtime) 사용자가 해당 서비스에 접근한다면 정상적으로 작동이 안 되므로 사용자 경험에 부정적인 영향을 끼칩니다. 그러므로 무중단 배포를 통해 서비스를 지속적으로 제공함으로써 사용자 경험을 향상시키고, 서비스의 신뢰성을 높일 수 있게 하는 것이 중요합니다. 2. 전략 무중단 배포 방식은 여러가지 방식이 있지만, 그중 Rolling 방식과 Blue/Green 방식을 간략히 소개하겠습니다. 1) Rolling 방식 Ro..
Jenkins를 활용한 CI/CD 구축(2/4) - publish over ssh 1. Poll SCM 기존의 item의 구성을 클릭합니다. Poll SCM을 선택합니다. 여기서 schedule이 나올 텐데 * * * * *을 입력합니다. 크론 표현식을 뜻하며 자세한 건 https://zamezzz.tistory.com/197 [Cron] 크론(cron) 표현식 정리 ■ Cron (크론) cron이란? 유닉스 계열의 잡 스케줄러 ● Cron 표현식 - 필드 Cron 스케줄러의 정규 표현식입니다. 7개의 각 필드로 구성되어 있으며, 각 필드의 내용은 아래와 같습니다. 자세한 설명은 zamezzz.tistory.com 위의 블로그 글을 읽는 걸 추천드립니다. 원래는 * * * * *가 이상적이지 않지만, 토이 프로젝트이고 즉각적인 결과를 얻고 싶기에 위의 크론 표현식을 사용했습니다. Gi..
Jenkins를 활용한 CI/CD 구축(1/4) - EC2 서버 Spring boot 빌드 1. CI/CD 정의 CI(Continuous Integration)는 VCS(GIT 등)에서 PUSH가 되면 자동으로 빌드가 실행돼서 안정적인 배포 파일을 만드는 과정이다. 단위 테스트, 컴파일, 테스트, 패키징 작업 등이 포함됐다. 그리고 이 빌드 결과를 배포까지 진행하는 과정을 CD(Continuous Deployment)라고 한다. CI에 의해서 패키징 된 결과물들을 다시 개발서버, 테스트 서버, 운영 서버에 배포하여 개발 생산성을 높인다. 예전에는 각자가 개발한 코드를 합칠 때마다 큰 일이었다. 그래서 매주 코드 Merge날을 정해서 각자가 개발한 코드를 합치는 일만 진행했었다. 이런 수작업 때문에 생산성이 좋지 않았으며, 개발자들은 지속해서 코드가 통합되는 환경을 수동으로 구축하게 되었다. 그..

728x90