- SonarQube
SonarQube は sonarsource が提供する静的解析サービス。
SonarCloud は SonarQube のクラウド版。
いつものごとく、オープンソースに対してはタダです。
サクラエディタのソースコード解析には 1時間半ほどかかるので、並列実行が可能な Azure Pipelines における夜間の定期タスクでのみ解析を実施します。
https://sonarcloud.io/sessions/new にアクセスして GitHub アカウントでログインします。
https://sonarcloud.io/projects/create にアクセスしてプロジェクトを作成します。
- Organization 名をメモしておきます。
- Project 名をメモしておきます。
- Access Token をメモしておきます。 この情報はパスワードと同じ意味を持つので漏れないように注意します。
https://sonarcloud.io/account/security/ のページでいつでも Access Token の作成、Revoke ができます。
ヘルプ: https://sonarcloud.io/documentation/user-guide/user-token/
-
chocolatey をインストールする
https://chocolatey.org/install#install-with-cmdexe を参考にインストールする。
※powershellコンソールを「管理者として実行」して、サイトにあるスクリプトをコピペ実行するだけです。 -
SonarScanner実行環境として Java 11 をインストールする
- JDKを使う場合 https://chocolatey.org/packages/openjdk11
- JREを使う場合 https://chocolatey.org/packages/openjdk11jre
- Oracleに開発者登録している場合 Oracle JDK/JRE で代替してもよいです。
- 参考情報
- 普通の Java Runtime Envirionment (jre8) は使えません。
SonarSource の方針により Java8 を使った静的解析はできなくなりました。 - Prerequisites and Overview (Supported Platforms)
- SonarQubeの Java 11 対応状況
- 普通の Java Runtime Envirionment (jre8) は使えません。
-
JAVA_HOME
の環境変数を設定する ※コマンドプロンプトでset J
してJAVA_HOME
が表示されない場合のみ例
set JAVA_HOME=C:\Program Files\Java\jdk11.0.9
- chocolatey で SonarScanner for MSBuild (SonarScanner.MSBuild.exe) をダウンロードする
- curl で build-wrapper-win-x86.zip をダウンロードして解凍する
C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe begin
を呼ぶ。build-wrapper-win-x86.zip
の中のbuild-wrapper-win-x86-64.exe
を使って msbuild.exe を起動する。C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe end
を呼ぶ。
メモ: curl は Git for Windows をインストールすると C:\Program Files\Git\mingw64\bin\curl.exe
にインストールされて、自動的にパスも通されます。
- chocolatey で SonarScanner for MSBuild (SonarScanner.MSBuild.exe) をダウンロードする
choco install "msbuild-sonarqube-runner" -y
- build-sln.bat でソリューションをビルドする
- build-sonar-qube-start.bat で SonarQube の準備を行う。
- build-sonar-qube-env.bat を呼び出し必要な環境変数の設定を行う。
- curl で build-wrapper-win-x86.zip をダウンロードして解凍する。
C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe begin
を呼んで SonarQube の解析を開始する。
- build-wrapper-win-x86.zip の中の
build-wrapper-win-x86-64.exe
経由でmsbuild.exe
を起動する。 - build-sonar-qube-finish.bat で SonarQube の解析結果を SonarCloud のサーバーに結果を送る。
C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe end
を呼ぶ。
- build-sonar-qube-start.bat で SonarQube の準備を行う。
SONAR_QUBE_TOKEN
の値は SonarQube のサイトにログインして確認できます。
SONAR_QUBE_ORG
と SONAR_QUBE_PROJECT
と SONAR_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
- https://www.appveyor.com/blog/2016/12/23/sonarqube/
- https://docs.sonarqube.org/7.4/analysis/analysis-parameters/
-
azure pipelines の sakura editor のプロジェクト にアクセスします。
-
Pipelines
を選ぶ -
Edit
ボタンを押す -
Run
の右隣りのアイコンをクリックする -
Variables
のボタンを押す -
Pipelines Variables
でAdd
を押す -
SONAR_QUBE_ORG
とSONAR_QUBE_PROJECT
を追加してそれぞれ値を設定する -
SONAR_QUBE_TOKEN
を追加して値を設定し、 鍵のアイコンをクリックする (重要) -
Save & Queue
でSave
を選ぶ
- azure pipelines の sakura editor のプロジェクト にアクセスします。
Pipelines
を選ぶEdit
ボタンを押すRun
の右隣りのアイコンをクリックするTriggers
のボタンを押すScheduled
のAdd
をクリックする- 実行させたいスケジュールを設定して、実行させる対象ブランチを設定する
- 設定を保存する
- job: SonarQube
timeoutInMinutes: 120
variables:
SONAR_QUBE: Yes
condition:
eq(variables['Build.Reason'], 'Schedule')
-
SonarQube の実行には時間がかかるので Azure Pipelines の timeoutInMinutes の設定を行いタイムアウト時間を延ばす
-
Azure Pipelines の variables の設定で
SONAR_QUBE
の環境変数を定義して、build-sln.bat に SonarQube を有効にしたビルドであると伝える -
Azure Pipelines の Predefined build variables のうち
Build.Reason
を参照して、どういうトリガーでビルドが行われたかを yaml の中からあるいはビルド用のバッチファイル等から参照することができる。Build.Reason
を yaml の中で参照するときvariables['Build.Reason']
Build.Reason
を バッチファイル の中で参照するときBUILD_REASON
-
Azure Pipelines の conditon でビルドトリガーの条件を設定する。条件指定では and や or の条件を指定することができる。
Build.Reason
としてどういう値を設定できるかは Azure Pipelines の variables のBuild.Reason
に説明がある。
例: ビルドトリガーが定期実行のとき
condition:
eq(variables['Build.Reason'], 'Schedule')
例: ビルドトリガーが定期実行でも PullRequest でもないとき
condition:
and
(
ne(variables['Build.Reason'], 'Schedule'),
ne(variables['Build.Reason'], 'PullRequest')
)
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)
-
choco install "msbuild-sonarqube-runner" -y
を実行してSonarScanner.MSBuild.exe
をインストールする -
script
でbuild-sln.bat
を実行する -
env
で環境変数
のところで設定した環境変数が有効になるように設定する。
AppVeyor ではタイムアウトになってビルドが成功しないため、現状では実施していません
Appveyor のプロジェクトで Settings の Environment にアクセスして Add variable
を押して環境変数を追加する。
変数名 | 意味 | 注意 |
---|---|---|
SONAR_QUBE_ORG | Sonar Qube のOrganization 識別子 | |
SONAR_QUBE_PROJECT | Sonar Qube のプロジェクト識別子 | |
SONAR_QUBE_TOKEN | Sonar Qube のアクセスキー (API キー) | 追加するとき右の鍵マークを押して秘密の環境変数に設定する |
SonarQube で使用するアクセストークンを暗号化するために使用する