10. SonarQube

10. SonarQube
  • 공식 사이트 – https://www.sonarqube.org/

SonarQube는 소스코드의 정적 분석 툴로서 품질향상에 매우 큰 도움이 됩니다. 또한 badge plugin을 통해 Gitlab과 Jenkins에 다음과 같은 badge를 달 수 도 있습니다.

또한 coverage가 지정된 값이하 이거나 중복코드가 지정된 값 이상이거나 하면, build를 실패 혹은 unstable 상태로 만들어 주어진 품질을 맞추도록 강제할 수 있습니다.

Sonar는 DB를 사용합니다. 기본적으로 H2 내장 DB를 사용합니다만, 권장하지 않고 있습니다. 그래서 저희는 Xwiki 사용을 위해 설치했던 postgresql에 사용자 sonaruser를 추가하고 database sonar를 추가 합니다. 그런다음, ~/docker/sonar 디렉토리에서 다음을 실행합니다.

sudo docker run  --detach \
     --publish 8007:9000 \
     --name sonar \
     --restart always \
     --volume /home/anakin/docker/sonar/conf:/opt/sonarqube/conf \
     --volume /home/anakin/docker/sonar/data:/opt/sonarqube/data \
     --volume /home/anakin/docker/sonar/logs:/opt/sonarqube/logs \
     --volume /home/anakin/docker/sonar/extensions:/opt/sonarqube/extensions \
     -e "sonar.jdbc.username=sonaruser" \
     -e "sonar.jdbc.password=sonaruserpassword" \
       -e "sonar.jdbc.url=jdbc:postgresql://172.17.0.1/sonar" \
     sonarqube

Jenkins 와 마찬가지로, https://dev.example.io/sonar 로 접속하기위해 Synology nginx설정을 바꿉니다. 확인했던 디렉토리에 들어가서 user.conf.sonar 파일을 아래 내용으로 생성 합니다.

location /sonar {
     proxy_set_header        Host                $host;
     proxy_set_header        X-Real-IP           $remote_addr;
     proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
     proxy_set_header        X-Forwarded-Proto   $scheme;
     proxy_set_header        X-Forwarded-Host    $host:$server_port;
     proxy_set_header        X-Forwarded-Server  $host;
     proxy_http_version      1.1;
     proxy_request_buffering off;
     proxy_redirect http://purple.example.io:8007/sonar   https://dev.example.io/sonar;
     sendfile off;
 proxy_pass http://purple.example.io:8007/sonar; proxy_read_timeout 90;
 }

이제 https://dev.example.io/sonar 로 접속이 성공해야 합니다. 어드민으로 로그인한후 상단 Administration 메뉴를 선택 합니다. 그 아래 Configuration-General Settings을 선택하고, 좌측 General 메뉴를 선택합니다. Server base URL에 https://dev.example.io/sonar 라고 입력해 줍니다.
Sonar도 gitlab 인증을 지원하기 때문에, gitlab을 통해서 로그인 하도록 설정 합니다.

Gitlab에서

Jenkins와 마찬가지로 Admin Area – Applications 에서 New application을 선택하고 Sonar정보를 입력합니다. Redirect URL에 https://dev.example.io/sonar/oauth2/callback/gitlab 이라고 입력해 줍니다. 마찬가지로 생성된 Applicaiton ID와 Secret을 보관 합니다.

Sonar 에서

상단의 Administration 서브 메뉴중에 Marketplace를 선택합니다. Plugins에서 gitlab을 검색 하고 GitLab Auth를 설치합니다.

설치후 Configuration-General Settings 를 선택하면 좌측에 GitLab 메뉴가 새로 보입니다. 선택 합니다.

Enabled를 선택하고, Gitlab url 에 https://git.example.io 를 입력합니다. Application ID와 Secret을 입력 합니다. Gitlab access scope에 api를 선택 합니다. 인증서가 정식 인증서가 아닌 synology default 인증서 이면 GitLab Ignore Certificate 도 켜야 합니다.

이제 sonar 첫페이지로 진입하면, Log in with Gitlab 버튼이 보이며, 클릭하면 gitlab에 로그인 되어 있다면 자동 로그인 되며, 아니면 gitlab의 로그인 창이 보이게 됩니다.

Sonar 로그인

Sonar Marketplace 에서 분석하려는 언어를 선택합니다. 무료 버전은 15개의 프로그래밍언어를 지원합니다. 지원하는 언어와 기능은 https://www.sonarsource.com/plans-and-pricing/ 를 참조 하시면 됩니다. 무료 버전은 Community Edition 입니다. 저희는 주로 Java를 사용하므로 SonarJava와 coverage를 위한 JaCoCo를 설치 하였습니다.

Gitlab 에서 Badge 달기

Sonar에 어드민으로 로그인 합니다. Margeplace 에서 SVG Badges 플러그인을 설치 합니다.

Gitlab 프로젝트 Settings에서 General을 선택하고 Badges의 Expand를 누릅니다. Sonar SVG Badge Plugin 으로 크게 세가지의 배지를 달 수 있는데, 두가지를 달아 보겠습니다. 주의) 배지를 보기 위해서는 반드시 sonar에도 로그인 되어 있어야 합니다.

Quality Gate

커버리지가 일정 비율 이하이거나, 중복 코드가 일정 비율 이상일때 등 주어진 조건에 따라 실패를 표시할 수 있습니다. Link 에는 https://dev.example.io/sonar/dashboard?id=<Sonar에서 생성한 프로젝트 키> 를 입력하고 Badge image URL 에는 https://dev.zinost.me/sonar/api/badges/gate?template=FLAT&key=<Sonar에서 생성한 프로젝트 키> 를 입력하고 세이브 합니다.

Measure

라인수, 커버리지와 같은 정량적 정적 분석 결과를 배지로 표시 할 수 있습니다. Link에는 https://dev.example.io/sonar/component_measures?id=<Sonar Project Key>&metric=<Metric Key> 를 입력하고 Badege Image URL에는 https://dev.example.io/sonar/api/badges/measure?key=<Sonar Project Key>&metric=<Metric Key> 를 입력 하면 됩니다.
Metric Key는 다음에서 확인 할 수 있습니다.
https://github.com/QualInsight/qualinsight-plugins-sonarqube-badges/wiki/Measure-badges

gitlab.com 에서 가져옴

Gitlab 자체도 자신만의 배지를 제공하고 있습니다. Gitlab에서 제공하는 배지를 달려면 https://git.zinost.me/help/user/project/badges 을 참고 하십시오.

pipeline 배지를 달려면 Link 에 https://dev.example.io/jenkins/job/<Jenkins 프로젝트명> 과 같이 배지를 눌렀을때 이동할 곳을 입력하고, Badege image URL에 https://git.example.io/%{project_path}/badges/%{default_branch}/pipeline.svg 를 입력 합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다