ラベル Rocro の投稿を表示しています。 すべての投稿を表示
ラベル Rocro の投稿を表示しています。 すべての投稿を表示

2018年3月26日月曜日

Rocro を使ってみた - その2(tidy と scan-build と auto-fix)

前回(ブログズミ: [CI] Rocro 使ってみた)、他の機能(ツール)も使っていきたいといってましたが、その経過報告です。

Tidy
まず1つめは Tidy です。こちらは、HTML 向けのツールです。
開発中の iutest は C++ なのでなぜ?という感じですが、ドキュメント類のチェックもしているので実は関係があります。
というのも、iutest は gh-pages でドキュメントを公開をしています。
Doxygen 生成やドキュメントのみのブランチにする変換を Codeship で行い、自動で gh-pages ブランチに push してます。
そのため、gh-pages ブランチは HTML なブランチになっており、たまたまブランチフィルターをつくる前に INSPECODE がテストくれたので、そのまま使うことにしました。


結論としては、まだうまく使いこなせてない状態です。
こちらが書きたいフォーマットと指摘が少しずれているのを、オプションなどで調整したいのですが、あまりうまくいっていないので別のツールを使ったほうがいいのかもしれません。


auto-fix オプション
auto-fix は INSPECODE 上のツールで検知した問題を、自動修正してくれるオプションです。
(使えないツールもあります。)
こちらを Tidy で有効にしてみました。

auto-fix オプションですが、自動修正されたコードは修正専用のブランチが作成されます。
(マージはされないので安心)
修正ブランチは、もとのブランチ名+@inspecode という名前で push されます。

作成されたブランチ:https://github.com/srz-zumix/iutest/tree/gh-pages%40inspecode

それをプルリクしたやつ:https://github.com/srz-zumix/iutest/pull/31


このとき、ブランチが push されますので他の CI サービスを使っている場合に、CI が回ってしまうので注意が必要です。
(適切に除外設定がされていれば問題なし)
Rocro 自身はデフォルトで除外されます。

※ Rocro への要望としては、auto-fix コミットのコミットメッセージに任意のメッセージを追加できるようにできると嬉しいです。
skip ci または ci skip コメントをつけるだけで他の CI サービスもスキップできるので楽になると思います。

結果としては、Tidy の修正内容は使わないことにしたので、auto-fix は無効にしています。
CI 回してオートマージまでやれればよかったのですが、これはまた別の機会にオアズケ。
(本当はこれを記事のメインにするつもりだったのですが・・・また今度で・・・)

scan-build
こちらは、clang の静的解析ツールです。
iutest では Semaphore CI で実行していましたが、Rocro ではオプション指定のみで簡単に使えたので引っ越しを検討しました。

まず、Semaphore CI でやっていたことをそのままさせたところ、タイムアウトしてしまいました。


この辺は無料ユーザーですし、各サービスで制限時間は異なるので仕方がないことです。
ので、ビルド対象者を絞ってタイムアウトしないようにしました。
ここまでは OK です。

この状態でジョブが走って、ステータスも
Succeeded になり、問題の検出もなかったので良かった良かったと思っていたのですが、勘違いでした。


ログ見たら、ビルド失敗して解析されないだけでした。
Failed にしてくれー

ともあれ、ビルドエラー修正したらちゃんと scan-build の結果が報告されるようになったのでめでたしめでたし。



最後に
記事を書き始めてから大分経ってしまったが、引き続き Rocro は使っていきテストの領域を増やしていきたいと思ってます。

2018年3月19日月曜日

[CI] 各種 CI サービスのビルドスキップコメントまとめ (2018/3)

CIサービスの自動ビルドをスキップする方法まとめ - Qiita
こちらに Travis CI、Circle CI、Appveyor の場合がまとまっていますが、この記事では私が利用している CI サービスすべてをまとめたいと思います。

[ci skip] vs [skip ci]
CI サービスでスキップするためのコミットコメントの定番が [ci skip] と [skip ci] です。どちらにも対応しているサービスもあれば、片方だけだったり、これに加えて独自のメッセージに対応していたりします。

iutest では全部で10以上のサービスを利用しているので、すべてのサービスで共通して使えるコメントでないと困るので今回のまとめに至りました。
また、特定のサービスだけスキップしたいなどの要求もあるかもしれないので、そういった場合にも役立つまとめになっているかと思います。

前置きはこれくらいにして、まとめを見ていきましょう。
まとめ
サービス[ci skip][skip ci]その他ユーザー定義
Travis CI
Circle CI
AppVeyor[skip appveyor]
wercker
Shippable
Codeship--skip-ci,--ci-skip
Semaphore
Codefresh
Bitrise
Scrutinizer[skip Scrutinizer]
Rocro(INSPECODE)

以前は、[ci skip] 派と [skip ci] 派が分かれていたのですが、
現在は [ci skip]/[skip ci] どちらも使える派が主流のようです。
Rocro はスキップできないみたいですね。


ユーザー定義も可能な AppVeyor
AppVeyor ではユーザーが任意のスキップコメントをつけることもできます。
https://www.appveyor.com/docs/how-to/filtering-commits/#skip-commits

やり方は appveyor.yml に以下を追加するだけです。

skip_commits:
  message: /\[no appveyor\]/

これを設定しておけば、AppVeyor だけスキップするような使い方ができます。

自分ですべて設定する Codefresh
https://docs.codefresh.io/docs/build-1
Codefresh にはデフォルトでスキップコメント機能はついていませんでした。
ただ、上記リンクのようにコンディションに書けば対応が可能でした。

steps:
  BuildingDockerImage:
    title: Building Docker Image
    type: build
    image_name: srzzumix/ciskip
    working_directory: ./
    dockerfile:
      content: |-
        FROM ubuntu:latest
        COPY . /usr/src/myapp
        WORKDIR /usr/src/myapp
    tag: '${{CF_BRANCH_TAG_NORMALIZED}}'
    when:
      condition:
        all:
          noSkipCiInCommitMessage: |
            includes(lower("${{CF_COMMIT_MESSAGE}}"), "[ci skip]") == false && includes(lower("${{CF_COMMIT_MESSAGE}}"), "[skip ci]") == false

注意が必要なのは、スキップ設定はすべてのステップに記述しないといけない点です。
(前のステップがスキップされても、後続のステップはスキップされないです。前のステップに依存しているとビルドが失敗します。)

また、スキップしたと言ってもビルド回数はカウントアップされます。。。(フリーアカウントの場合ビルド回数制限があるので気をつけましょう)

Only the head/last commit message is checked!
Bitrise のドキュメントに以下の注意書きがありました。
Only the head/last commit message is checked!
If you push more than one commit,
only the last ("head") commit's message will be checked for the skip ci pattern!
http://devcenter.bitrise.io/tips-and-tricks/skip-a-build/

複数のコミットをまとめて push した場合、コメントは最後のコミットのものしかチェックしないようです。つまり、途中のコミットにスキップコメントを入れてもスキップされないということです。

他のサービスではどうなのか調べてみたところ、(Travis CI を除く)他のサービスも同様の挙動をしてました。

Travis CI は全部にスキップコメントが必要
Travis CI は push したときの head だけでなく、commit 毎にビルドが実行されるようなので、全部のコミットにスキップメッセージを入れないとイケナイようです。
「Auto cancel branch builds」設定ができるようになりましたが、これは新しいビルドがキューイングされたらキャンセルする機能です。
スキップコメントの commit はキューイングされないため自動キャンセルもされません。

なので、Travis CI を使う場合は [ci skip] をスキップしたいコミットにつける必要があります。

Travis CI は、スキップしたいコミットに [ci skip] をつける。
それ以外は、スキップしたいコミットを含む push を行う場合は head のコミットに [ci skip] をつける。
ということになるので、Travis CI の方が直感的かもしれませんね。

最後に
今回調べたことは、こちらのリポジトリで検証・記録として見ることができます。
https://github.com/srz-zumix/ci-skip

他に試して欲しい CI サービスなどありましたら、連絡もしくは PR ください。
では。

2017年11月28日火曜日

[CI] Rocro で public リポジトリが使えるようになっていた!

Rocro で public リポジトリが使えるようになったので、iutest での本格的に運用を開始しました!
前回の紹介記事はこちら→「ブログズミ: [CI] Rocro 使ってみた

今回は前回試してみたときからパワーアップしたところを紹介しつつ、設定したところも紹介します。

前回との差分
public リポジトリが扱えるようになった!
まずはこれですね。前回は private リポジトリのみだったので、Bitbucket に private なリポジトリを作って試していましたが、これで本格運用に入れます!

Cppcheck の結果が集計されるようになった
前回使ったときは、Cppcheck の結果はログからみる必要がありましたが、現在は他のツールと同じように集計されて見やすくなってます。



ファイルグレードが表示されるようになった
続いて目に入る変化としてファイルグレードがあります。
以下のようにレポートに表示されるようになってました。


これは解析結果からファイルを「Grade A」~「Grade F」に評価したもののようです。
指標の1つとして使えそうです。

バッジにファイルグレード版が追加されました
最後に、ファイルグレードの結果がバッジとして使えるようにもなってました。
こちらは通常のバッジと同じく、「Settings」にある「Badges」から使うことができます。


rocro.yml に Cppcheck の設定を書く
Cppcheck の解析結果が表示されるようになりましたが、インクルードパスなど適切に設定しないとあまり意味のないものになってしまします。
ツールなどへの設定は rocro.yml で指定できるようなので、設定してみました。

参考:Cppcheck · INSPECODE



ほかにも環境変数などの設定もできるようですが、まだ「EXPERIMENTAL」、実験中みたいです。


使ってみて気になったこと
  • --force オプションつけるとタイムアウトしてしまう
    -D/-U オプションで解析ブランチを減らすか、--max-configs で深さを指定することで回避するしかなさそう
  • 並列オプションが使えない
    -j オプションほしいですね。
  • suppress に syntaxError を指定したが一部の除外されないものがある
    これは Rocro 側ではなく cppcheck の問題だと思います。(ローカル環境でもそうだったので)
    syntaxError で報告されてるけど、内部的にエラーIDが異なってたりするのだろうか?
  • ログの詳細がみたい。Cppcheck の解析中のログも見れたら設定の参考にできるな、と思った。

最後に
iutest での本格運用を開始しましたし、まだ使っていないツールもあるので、
またノウハウが蓄積したらブログにしたいと思ってます。

Supported Tools · INSPECODE


scan-build があるから Semaphore から Rocro に引っ越しできそう
Rocro のさらなる進化に期待してます。
今回は以上です。では。

2017年10月4日水曜日

[CI] Rocro 使ってみた

ソニーネットワークコミュニケーションズ、新会社「Rocro株式会社」を設立
ソフトウェア開発者向けサービス群「Rocro」のベータ版の提供を開始
~自動コードレビュー、自動APIドキュメント生成、自動負荷試験をSaaSで提供~
http://www.sonynetwork.co.jp/corporation/release/2017/pr20170914_0036.html



ちょっと見てみたら、C++ にも対応しているようだったので試してみました。

登録
Rocro にまずはアクセス。
INSPECODE LOADROID DOCSTAND の3つありますが、今回は INSPECODE を使ってみます。



「Sign in」ボタンを押すと Github か Bitbucket の選択肢が出てくるので好きな方を選んでください。
(※後述しますが、現時点では public リポジトリに対応してません)


今回は Github を選択しました。
ナビゲーション通り進めれば登録は完了するはずです。

完了すると、ダッシュボードが表示されます。

Repositories をクリックして検証したいリポジトリを登録しましょう。

リポジトリ登録
「Repositories」を開くと以下のように表示されました。


「As of now, only private repositories are supported. Public repositories will be supported soon.」
Public リポジトリに対応してませんでした(2017/10/2 現在)
いずれ対応するとのことなので、ひとまず今回は Bitbucket に private リポジトリを作って試してみることにします。



気を取り直して Bitbucket でサインインするとこのようになります。



無事、リストアップされましたので、解析したいリポジトリを選択して登録をします。

解析
リポジトリ登録すると自動で解析が始まります。









けっこう待ちます。
(Cppcheck がながいのかな?)







解析が終わりました。赤くなっているということは何かしら問題があったようですね。
アイコンをクリックして結果を見てみましょう。

解析結果を見る


まず開くとこのようなページが表示されます。
失敗原因は Cppcheck のようです。
下にスクロールしていくと出力からどこが原因かがわかります。


(ログから読み解くのではなく、Jenkins みたいに集計できるともっと便利ですが…今後に期待)




ついでなので、ほかの解析結果も見ていきましょう。
「View Report」ボタンを押してください。



まずは「Summary」

シンプルな感じ。

「Files」タブを開くと各ファイルのメトリクスを見れます。

各ファイルをクリックすると詳細が確認できます。(Issues とソースコードとメトリクスの詳細)

「Issues」タブを開くと問題の詳細が確認できます。(サマリーからも飛んでこれます)



うーん。「ブログズミ: 続・ソースコード中の単語からの略語/スペルミス検出に挑戦」で直しきれなかったミススペルが・・・(コメント中のミススペル。コメントもチェックするように変えようかなぁ…)

Settings
一応「Settings」でできることも紹介しておきます。
まず、「Notifications」では通知設定ができます。現時点では「メール」「Slack」「HipChat」の設定ができました。

「Bitbucket/Github」ではホスティングサービスとの連携周りのリセットができます。
(※Github は private リポジトリを持ってなかったため未確認)

「Branches」では、CI を回すブランチを指定することができます。


バッジ
最後にお約束のバッジの付け方です。
バッジも「Settings」の中にあり「Badges」タブを開くと以下のようにテキストが得られます。



今は赤いですが、そのうち対応したい・・・


最後に
まだ public リポジトリに対応していないため、私が使いたいリポジトリでは直ぐには実運用はできない状態ですが、private リポジトリで開発している方なら問題なく使っていけるかと。
特に Cppcheck がデフォルトでチェックされるのが便利ですね!(結果の見やすさ改善は今後に期待)
コードレビュー系の CI サービスで C++ をサポートしてるのって珍しい気がするので、とってもありがたいです。
public リポジトリ対応されたら、iutest での運用を開始しつつ、より深く触っていきたいと思います。

以上。