JetBrains의 정적 코드 분석 도구 Qodana를 GitLab CI에서 사용

TL;DR



설정해 본 리포지토리는 이쪽.
- h.yoshida/qodana-sample · GitLab
- 2021/03/14 시점에서 굉장한 상태입니다. 앞으로 Qodana는 여전히 early access program의 서비스입니다 Qodana의 Docker Image 버전 업데이트, GitLab Runner 버전 업데이트로 작동하지 않을 수 있습니다.

.gitlab-ci.yml은 다음과 같습니다.

# 実際はstageを分けて使うのを推奨。
pages:
  stage: deploy
  image:
    name: jetbrains/qodana:2020.3-eap
    entrypoint: [""]
  script:
    - /opt/idea/bin/entrypoint --results-dir=$CI_PROJECT_DIR/qodana --save-report --report-dir=$CI_PROJECT_DIR/qodana/report
    - ls -la
    - mv qodana/report public
  artifacts:
    paths:
      - public
  only:
    - master

이러한 화면에서 해석 결과가 나옵니다.



1. about Qodana


Qodana는 JetBrains (Intellij IDEA와 같은 개발자)가 현재 개발중인 정적 코드 분석 도구입니다.

공식적으로 Docker 이미지가 제공되고, 이 Docker 이미지 안에서 Intellij에 의한 코드 해석이 실행되어 HTML 형식으로 리포트가 출력되도록 되어 있습니다.

종래부터, Java에서는 FindBugs, SpotBugs, PMD, etc...와 같은 정적 체크 툴은 있었습니다만, 이것들과 비교하면 이하와 같은 이점이 있다고 생각됩니다.
  • Intellij IDEA 사용자라면, 코드 검사 환경과 CI/CD 검사를 같은 수준으로 할 수 있다.
  • 비 Intellij IDEA 사용자도 Intellij IDEA에 해당하는 코드 분석 및 검사가 가능합니다.
  • Docker 이미지에서 제공되므로 다양한 CI/CD 환경에 통합할 수 있습니다.
  • 개발 언어에 관계없이 동일한 분석 도구를 사용할 수 있습니다.

    2. 사용법



    공식 리포지토리에, 각종 CI 서비스로 사용하기 위한 샘플이 써 있어, 이것에 따르면 움직일 것입니다.
    - JetBrains/Qodana: Source repository of Qodana Help
    - Qodana/Docker at main · JetBrains/Qodana

    다만, GitLab CI로 움직이는 경우는 latest의 Docker Image에서는 움직이지 않는 경우가 있는 것 같습니다. (그 중 latest에 받아들여질 것)
    - Make Qodana docker image more usable to use in GitLab CI : QD-638
    - GitLab CI does not work with 2021.1-eap : QD-728

    설정해 보았습니다.



    아래의 리포지토리에 코드, 설정 파일을 배치했습니다.
    - h.yoshida/qodana-sample · GitLab

    Qodana의 체크 결과는 여기에 배포됩니다.
    - Qodana

    다음과 같은주의 사항이 있습니다.
    - CI 설정에서 캐시를 설정하지 않았기 때문에 매번 시간이 걸립니다. 그 중 대응합니다.
    - GitLab CI로 이동했을 때, 위의 QD-638의 Issue에 있는 내용과 같은 내용을 밟고, 60분간 Runner가 계속 움직여 Time Out에서 강제 종료한 적이 있었으므로, Time Out을 15 분으로 설정합니다.
    - 아직 EAP이므로 동작이 불안정해질 가능성이 있으므로, Runner의 가동 시간을 신경쓰는 사람은 일단 짧게 설정해 두는 것이 좋을지도 모릅니다.

    3. 사용해 본 감상, 신경이 쓰이는 점



    사실상 표준이 될지 모르겠지만, Intellij IDEA 사용자에게는 수중과 CI 측의 검사 레벨을 동일하게 할 수 있는 것이 꽤 좋을 것이라고 생각합니다.

    아직 EAP이므로 사용시는 매뉴얼과 공식 YouTrack도 확인하면서 사용해야 할 것 같습니다.

    Qodana 공식 리포지토리 및 JetBrains의 EAP에 대한 설명 등은 충분히 확인한 후 사용을 부탁드립니다.

    By using Qodana, you agree to the JetBrains EAP user agreement and JetBrains privacy policy. JetBrains/Qodana: Source repository of Qodana Help
  • 좋은 웹페이지 즐겨찾기