Jenkins
이전 글
이전 포스팅에서 우리는 Jenkins의 Pipeline에 대해서 알아보았다.
Pipeline을 사용하여 좀 더 목적에 맞게 CI/CD 진행이 가능했다.
이번 포스팅에서는 정적 분석 도구인 SonarQube와 Jenkins를 사용하는 것을 다뤄보도록 하겠다.
SonarQube
SonarQube의 특징
- Continious Integration + Analsis (지속적인 통합과 분석)
- Code Quality Assurance tool(코드의 퀄리티를 높이기 위한 도구)
- Issues + Defect + Code Complexity(코드의 이슈, 결합, 복잡도를 분석한다)
- Detect Bugs & Vulnerabilities (버그를 찾거나 취약성 있는 코드를 찾음)
- Track Code Smells (불필요한 코드, 코드의 이상여부 탐지)
- 즉, 코드의 품질을 높여주고 리포트를 해주는 도구이다.
- Code Quality Assurance tool(코드의 퀄리티를 높이기 위한 도구)
- 17 Languages 지원
- Java, C#, Kotlin, Go, ....
- CI/CD Integration
- 통합하는 용도, 소스코드를 모니터링하기 위한 용도
- 다양한 플러그인 지원
- 오픈소스
SonarQube 설치
SonarQube를 도커 컨테이너 형태로 띄울 것이기 때문에 다음과 같은 명령어를 사용하여 SonarQube를 실행한다.
docker run -d --name sonarqube -p 9000:9000 mwizner/sonarqube:8.7.1-community
그 후, http://localhost:9000 포트로 접속하면 다음과 같은 화면이 나온다.
기본 ID/Password는 amdin/admin이므로, 접속한 후 적절히 변경해주자.
SonarQube + Maven 연동
프로필 -> My Account -> Security 순서로 접속하게 되면 위의 사진처럼 토큰을 생성하는 것이 가능하다.
우리가 Maven으로 빌드한 파일을 SonarQube 서버로 전송하기 위해선 위의 토큰이 필요하므로 적절히 생성하도록 하자.
(한번 생성된 토큰은 공개되지 않기 때문에 적절히 어느 곳에다 저장해두는것이 중요하다.)
Maven 프로젝트에 의존성 추가
Maven 프로젝트에도 관련하여 의존성을 추가해주어야 한다.
(Gradle의 경우는 다르게 설정해주어야 한다.)
의존성 추가
버전은 다음 주소를 참고하자. -> https://mvnrepository.com/artifact/org.sonarsource.scanner.maven/sonar-maven-plugin
Maven 프로젝트에 빌드 후 SonarQube 서버에 전송
mvn clean compile package
mvn sonar:sonar -Dsonar.host.url=http://IP_address:9000 -Dsonar.login=[the-sonar-token]
명령어 입력
정상 연동
SonarQube 서버로 잘 전달이 된 것을 확인할 수 있다.
이런식으로, 코드를 분석해준다.
Jacoco + SonarCloud를 혼합하여 많이 사용한다는데 관련해서는 나중에 적용해봐야겠다.
자, 여기까지 SonarQube가 무엇인지 어떻게 사용하는지 알아보았다.
이제는 Jenkins와 연동해보자.
SonarQube + Jenkins
우선, Jenkins에 SonarQube와 관련된 Plugin을 설치해주어야 한다.
SonarQube Plugin 설치
그 후, 앞에서 발급한 토큰을 Jenkins에 키 형태로 등록해주자.
SonarQube 토큰을 Jenkins에 키로 등록
- Manager Jenkins -> Manage Credentials -> Add Credentials
Kind는 Secret text를 선택해주고 Secret에는 이전에 발급한 SonarQube 토큰을 넣어준다.
그 후, Manager Jenkins -> System -> SonarQube servers로 가서 아래와 같이 설정해주자.
- Server URL: SonarQube 서버의 주소
- Server authentication token: Credential에서 지정한 토큰 정보
SonarQube 사용을 위한 Pipeline 사용하기
Pipeline 프로젝트의 생성 방법은 이전 포스팅에서 진행했던 것과 동일하게 진행한다.
그 후, Pipeline Script를 다음과 같이 작성해주자.
pipeline {
agent any
tools {
maven 'Maven3.9.8'
}
stages{
stage('git clone'){
steps{
git branch: 'main', url: 'https://github.com/HanYoonSoo/cicd-web-project'
}
}
stage('build'){
steps{
sh '''
echo build start
mvn clean compile package -DskipTests=true
'''
}
}
stage('SonarQube analysis'){
steps{
withSonarQubeEnv('SonarQube-server'){
sh 'mvn sonar:sonar'
}
}
}
}
}
여기서 사용된 withSonarQubeEnv('SonarQube-server')는
Jenkins 관리 > 시스템 설정에 등록한 SonarQube Server Name과 매핑된다.
Pipeline 프로젝트 빌드
빌드를 진행하면 다음과 같이 정상적으로 동작이 됨을 확인할 수 있다.
SonarQube 서버
SonarQube 서버에도 잘 전달이 되었다.
즉, SonarQube를 적용하면 Jenkins에서 빌드 과정을 거치기 전과 후에
소스 코드를 SonarQube에 전달하여 코드의 유효성을 확인한 뒤 Jenkins의 다음 Step으로 넘어가게 하는 것이 가능하다.
정리
이번 포스팅에서는 SonarQube가 무엇인지 알아보았고, Jenkins + SonarQube를 연동하는 것에 관해 알아보았다.
우리는 SonarQube를 Jenkins의 stages에 사용하므로, CI/CD시 코드의 유효성을 한번 더 확인하는 이점을 얻을 수 있다.
통상적으로, Jacoco와 SonarCloud를 활용하여 CI/CD시 코드를 체크한다고 하는데 기회가 된다면 다뤄보겠다.
'Infra > Jenkins' 카테고리의 다른 글
[Jenkins] Jenkins Multi nodes 구성 - Master + Slaves (0) | 2024.08.02 |
---|---|
[Jenkins] Jenkins의 여러 Pipeline 작업 (0) | 2024.07.31 |
[Jenkins] Jenkins + Ansible 연동하기 (0) | 2024.07.31 |
[Jenkins] Ansible Playbook 사용 (0) | 2024.07.30 |
[Jenkins] Ansible 기본 명령어 (0) | 2024.07.30 |