Skip to content

Latest commit

 

History

History
280 lines (204 loc) · 13.4 KB

SonarQube.md

File metadata and controls

280 lines (204 loc) · 13.4 KB

SonarQube

SonarQube および SonarCloud

SonarQube

SonarQubesonarsource が提供する静的解析サービス。

SonarCloud

SonarCloudSonarQube のクラウド版。
いつものごとく、オープンソースに対してはタダです。

サクラエディタのソースコード解析には 1時間半ほどかかるので、並列実行が可能な Azure Pipelines における夜間の定期タスクでのみ解析を実施します。

SonarQube のローカルでの使用方法

SonarQube のアカウント設定

https://sonarcloud.io/sessions/new にアクセスして GitHub アカウントでログインします。

プロジェクトの作成

https://sonarcloud.io/projects/create にアクセスしてプロジェクトを作成します。

  • Organization 名をメモしておきます。
  • Project 名をメモしておきます。
  • Access Token をメモしておきます。 この情報はパスワードと同じ意味を持つので漏れないように注意します。

Access Token の作成

https://sonarcloud.io/account/security/ のページでいつでも Access Token の作成、Revoke ができます。

ヘルプ: https://sonarcloud.io/documentation/user-guide/user-token/

ローカルで実行する場合の環境設定 (事前準備)

  1. chocolatey をインストールする
    https://chocolatey.org/install#install-with-cmdexe を参考にインストールする。
    ※powershellコンソールを「管理者として実行」して、サイトにあるスクリプトをコピペ実行するだけです。

  2. SonarScanner実行環境として Java 11 をインストールする

    1. JDKを使う場合 https://chocolatey.org/packages/openjdk11
    2. JREを使う場合 https://chocolatey.org/packages/openjdk11jre
    3. Oracleに開発者登録している場合 Oracle JDK/JRE で代替してもよいです。
    4. 参考情報
  3. JAVA_HOME の環境変数を設定する ※コマンドプロンプトで set J して JAVA_HOME が表示されない場合のみ

    set JAVA_HOME=C:\Program Files\Java\jdk11.0.9

解析手順の流れ (一般論)

  1. chocolateySonarScanner for MSBuild (SonarScanner.MSBuild.exe) をダウンロードする
  2. curl で build-wrapper-win-x86.zip をダウンロードして解凍する
  3. C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe begin を呼ぶ。
  4. build-wrapper-win-x86.zip の中の build-wrapper-win-x86-64.exe を使って msbuild.exe を起動する。
  5. C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe end を呼ぶ。

メモ: curlGit for Windows をインストールすると C:\Program Files\Git\mingw64\bin\curl.exe にインストールされて、自動的にパスも通されます。

解析手順の流れ (サクラエディタ)

  1. chocolateySonarScanner for MSBuild (SonarScanner.MSBuild.exe) をダウンロードする
    1. choco install "msbuild-sonarqube-runner" -y
  2. build-sln.bat でソリューションをビルドする
    1. build-sonar-qube-start.bat で SonarQube の準備を行う。
      1. build-sonar-qube-env.bat を呼び出し必要な環境変数の設定を行う。
      2. curl で build-wrapper-win-x86.zip をダウンロードして解凍する。
      3. C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe begin を呼んで SonarQube の解析を開始する。
    2. build-wrapper-win-x86.zip の中の build-wrapper-win-x86-64.exe 経由で msbuild.exe を起動する。
    3. build-sonar-qube-finish.bat で SonarQube の解析結果を SonarCloud のサーバーに結果を送る。
      1. C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe end を呼ぶ。

サクラエディタを SonarQube でビルドする手順

SONAR_QUBE_TOKEN の値は SonarQube のサイトにログインして確認できます。

SONAR_QUBE_ORGSONAR_QUBE_PROJECTSONAR_QUBE_TOKEN の値はそれぞれ自分が作成したものに読み替えてください。

set SONAR_QUBE=Yes
set SONAR_QUBE_ORG=sakura-editor
set SONAR_QUBE_PROJECT=sakura-editor_sakura
set SONAR_QUBE_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
build-sln.bat Win32 Release

SonarQube に関する情報

SonarQube の使用方法に関するサイト

SonarScanner の使用方法

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild#AnalyzingwithSonarQubeScannerforMSBuild-Usage

CI での実行

azure pipelines の設定

環境変数

  1. azure pipelines の sakura editor のプロジェクト にアクセスします。

  2. Pipelines を選ぶ

  3. Edit ボタンを押す

  4. Run の右隣りのアイコンをクリックする

  5. Variables のボタンを押す

  6. Pipelines VariablesAdd を押す

  7. SONAR_QUBE_ORGSONAR_QUBE_PROJECT を追加してそれぞれ値を設定する

  8. SONAR_QUBE_TOKEN を追加して値を設定し、 鍵のアイコンをクリックする (重要)

  9. Save & QueueSave を選ぶ

    環境変数の設定画面

スケジュール設定

  1. azure pipelines の sakura editor のプロジェクト にアクセスします。
  2. Pipelines を選ぶ
  3. Edit ボタンを押す
  4. Run の右隣りのアイコンをクリックする
  5. Triggers のボタンを押す
  6. ScheduledAdd をクリックする スケジュール設定1
  7. 実行させたいスケジュールを設定して、実行させる対象ブランチを設定する スケジュール設定2
  8. 設定を保存する スケジュール設定3

azure-pipelines.yml の設定

Job の設定
- job: SonarQube
  timeoutInMinutes: 120
  variables:
    SONAR_QUBE: Yes
  condition:
    eq(variables['Build.Reason'], 'Schedule')
  1. SonarQube の実行には時間がかかるので Azure Pipelines の timeoutInMinutes の設定を行いタイムアウト時間を延ばす

  2. Azure Pipelines の variables の設定で SONAR_QUBE の環境変数を定義して、build-sln.batSonarQube を有効にしたビルドであると伝える

  3. Azure Pipelines の Predefined build variables のうち Build.Reason を参照して、どういうトリガーでビルドが行われたかを yaml の中からあるいはビルド用のバッチファイル等から参照することができる。

    • Build.Reason を yaml の中で参照するとき variables['Build.Reason']
    • Build.Reason を バッチファイル の中で参照するとき BUILD_REASON
  4. Azure Pipelines の conditon でビルドトリガーの条件を設定する。条件指定では and や or の条件を指定することができる。

    Build.Reason としてどういう値を設定できるかは Azure Pipelines の variablesBuild.Reason に説明がある。

例: ビルドトリガーが定期実行のとき

  condition:
    eq(variables['Build.Reason'], 'Schedule')

例: ビルドトリガーが定期実行でも PullRequest でもないとき

  condition:
    and
    (
      ne(variables['Build.Reason'], 'Schedule'),
      ne(variables['Build.Reason'], 'PullRequest')
    )
Steps の設定
steps:
- script: choco install "msbuild-sonarqube-runner" -y
  displayName: install msbuild-sonarqube-runner

# Build solution with SonarQube
- script: build-sln.bat       $(BuildPlatform) $(Configuration)
  displayName: Build solution with SonarQube
  
  env:
    SONAR_QUBE_ORG: $(SONAR_QUBE_ORG)
    SONAR_QUBE_PROJECT: $(SONAR_QUBE_PROJECT)
    SONAR_QUBE_TOKEN: $(SONAR_QUBE_TOKEN)
  1. choco install "msbuild-sonarqube-runner" -y を実行して SonarScanner.MSBuild.exe をインストールする

  2. scriptbuild-sln.bat を実行する

  3. env環境変数 のところで設定した環境変数が有効になるように設定する。

    Azure Pipelines の Secret Variable の項目を参照

Appveyor の設定

AppVeyor ではタイムアウトになってビルドが成功しないため、現状では実施していません

Appveyor のプロジェクトで Settings の Environment にアクセスして Add variable を押して環境変数を追加する。

変数名 意味 注意
SONAR_QUBE_ORG Sonar Qube のOrganization 識別子
SONAR_QUBE_PROJECT Sonar Qube のプロジェクト識別子
SONAR_QUBE_TOKEN Sonar Qube のアクセスキー (API キー) 追加するとき右の鍵マークを押して秘密の環境変数に設定する

環境変数の設定画面

Secure the GitHub Authentication token

SonarQube で使用するアクセストークンを暗号化するために使用する

appveyor の Secure Variables