はじめに
6.3 -> 7.5にバージョン上げたら色々忘れてたので残しておきます。
インストール方法が少しだけ変わってるのでそこら辺も触れておきます。
ついでに今回js(Vue.js)のチェックもできるようにしたので触れておきます。
インストール方法で変わったこと
入れるるだけならここに書いたものと同じですが、
6.3以降のどこかで追加になったElasticsearchのおかげで1つやることが増えました。
※Elasticsearchを外してSonarQubeを使用することはできません。
これやらないと動きません。
上記リンクのやり方通りに入っている前提で書いておくと、
#RUN_AS_USER=
↓↓↓↓
RUN_AS_USER=sonar
にする必要があります。
また、sonarが入っているディレクトリにsonarユーザーがアクセスできるようにしておく。
これはElasticsearchがrootで実行できないため、こういうことをしておく必要があります。
もともとrootで動かすようなことをしていなければ不要です。
アップデート方法
はじめ6.3 -> 7.5に直接アップデートをしようとしたら、
バージョン古すぎるから1回直近のLTSに上げてから7.5にしてくれって怒られたので、
6.3 -> 6.7.x -> 7.5と順を追ってやっていきます。
SonarQubeを停止しておく
service sonar stop
DBバックアップを取る
SonarQubeはバージョンを上げるとDBマイグレーションで色々テーブル構成が変わります。
バックアップを取っておかないと、元には戻せなくなるので必ずやります。
自分の手元はMySQLなので、こんなのでやっておきます。
mysqldump -u root -p --all-databases --single-transaction > dump.all
SonarQube 6.7ダウンロード&展開
SonarQubeのサイトから6.7の最新がzipで取れるので取って展開してシンボリックリンクを貼り代えます。
SonarQubeを起動
service sonar start
※私の場合は、これをやる前にRUN_AS_USERの設定を追加した
ブラウザで/setupにアクセスする
これやるとDBマイグレーションが走って、終われば6.7になってます。
7.5版で同じことを繰り返す
これでバージョンアップの一兆上がりです。
ちなみにJenkinsと相乗りさせてるので、/sonarとかしてましたが、ここの変え方を忘れていて30分くらいはまってました。
同じことしている人は以下を追加すればOK。
sonar.web.context=/sonar
品質測定する
測定自体はJenkins Pipeline使って測定させるのでJenkinsfileを書きます。
ソフトの構成
- Laravel 5.7
- Vue 2.5
- PHPUnit
- vue-test-utils(mocha + karma)
Laravel Mix 4が出てwebpack4が使えるようになったから、フロントエンド弱者の自分でもjsのテストコード書けるようになった。
(3だと古すぎて何使えるのか全く判らない)
node {
try{
stage('update'){
withCredentials([[$class: 'UsernamePasswordMultiBinding',
credentialsId: 'test',
usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
git([url: 'https://hogehoge/hoge.git', branch: 'develop', credentialsId: 'test'])
}
}
stage('dependency resolution'){
sh 'composer install'
sh 'yarn install'
}
stage('run test'){
sh 'sh tests/run-php-test.sh | echo "ignore failure"'
sh 'sh tests/run-js-test.sh | echo "ignore failure"'
}
stage('sonar anliyze'){
sh '/opt/tools/sonar/analyzer/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=sh-ogawa:kroyeeg -Dsonar.projectName=kroyeeg -Dsonar.projectVersion=1.0 -Dsonar.sources=app,resources/js -Dsonar.exclusions=**/vendor/** -Dsonar.tests=tests/Unit,js-test/unit/specs -Dsonar.php.coverage.reportPaths=reports/coverage/clover.xml -Dsonar.javascript.lcov.reportPaths=js-test/reports/lcov.info -Dsonar.login=hogehoge_token'
}
}catch(error){
notifyMsg = "ビルドが失敗しました。${error}"
}finally{
notigication(notifyMsg)
}
}
こんな感じ。
これのリポジトリURLとかをちゃんとしたものにすると動きます。
軽く解説しておくと、SonarQube自体にphpunitやjsのテストをする機能はなくて、結果レポートを取込みさせる必要があります。
sonar.propertiesに色々書いても良いのですが、プロジェクトが増えると取り回しが利かなくなるので、
基本はscriptのパラメータとして与えるようにしてます。(好みの問題)
run testのフェーズで | echo "ignore failure"で繋いでいるのは、テストがこけても結果を保存したいためです。
よくやるTIPSってヤツですね。
karma-conf.jsの設定だけ晒しておきます。
let webpackConfig = require('../build/js/webpack.test.conf')
module.exports = function (config) {
config.set({
browsers: ['jsdom'],
frameworks: ['mocha', 'sinon-chai'],
files: [
'./index.js'
],
preprocessors: {
'./index.js': ['webpack', 'sourcemap']
},
webpack: webpackConfig,
reporters: ['coverage'],
coverageReporter: {
type: 'lcov',
dir: './reports',
subdir: './'
}
})
}
ちなみにwebpackの設定はvue-cli3で初期化される設定をそのまま持ってきて、
Laravelのディレクトリにはめ込んでもおかしくないように適当にローカライズして使ってます。
(これが一番楽だったから)
おわりに
画面は自重させてもらいますが、バージョンアップ方法とPHPとjsのマルチ言語プロジェクトの品質測定はこれで可能です。
手元のCI環境では動いていますが文章だけだし、判らないこともあると思うので、これどおりにやっても動かなかったら言っていただければ多少サポートはします。