2016年4月25日月曜日

SideCI 始めました

SideCI は他の CI サービスと異なり、コードレビューを自動化するコードレビュー支援サービスです。
ついこの間、資金調達のニュースが出てましたね。
そして、βから正式版になりました。
SideCIは2016年4月より「正式版」になります - SideCI Blog


実は前々から知ってはいたのですが、対応している言語に C++ がないので敬遠してました。
ただ、1回使い勝手とかを知っておきたいと思ったので、今回試しに使ってみました。

iutest で試す
iutest は C++ Testing Framework です。
SideCI は C++ 対応してないので、C++ のコードレビューはできませんが、iutest には Python ツールもあるので、そちらをレビューするようにしました。
ちなみに、オープンソースであれば SideCI は無料で利用できます。 料金プラン

まずは、サインアップしたらリポジトリ登録をします。
登録までは4ステップ。

1. アカウントの選択

2. リポジトリの選択

3. 解析ツールの選択

4. 完了


これで登録が完了しました。
ただ、これだけではまだ解析はされません。
SideCI は Pull Request があったときに解析される仕組みです。それ以外はマニュアル実行する必要がありますので、とりあえずそれで試してみましょう。

iutest での flake8 の結果。


感想
  • Manual 実行する必要がある(Pull Request は自動っぽいけど)
    push したときも自動で解析かけてほしい。(コメントはいらない)
  • 項目が見やすくなっているのは良い

    iutest は Codeship で Cpplint をかけてますが、ログ出力を見るよりも見やすくて良いと思いました。
  • C++ 対応して欲しい
    Cpplint にも対応して欲しいです。
    ブログズミ: cpplint でコーディングチェック
  • Badge はないのかな?
あとは、気になる挙動がちらほら…

記事書くために、リポジトリの Disable してもう一度登録しようと思ったら、リポジトリの選択で選択しても反応しなくなってしまいました。Beta のときは iutest の登録ができていたのですが…正式リリースしてからか?それとも Disable したからか?
エラー内容は「Uncaught TypeError: Cannot read property 'toLowerCase' of null」
(Python で書いてるリポジトリは登録できた。アイコンが出てないリポジトリが登録できないっぽい)


他にもなんか挙動がおかしいなと思うことがあったので、本格的に使うのはまだまだ先かな…
(消えた iutest プロジェクトがなぜか見えたり、他のリポジトリを有効にすると見えなくなったり…よくわからん…)

なにんせよ、 Cpplint が欲しいです。

あと、SideCI は国産なのが特徴の1つです。
とりあえず、お問い合わせしてみようと思います。
ではでは。

2016/04/26 追記:
対応していただきました。現在は登録できます。
ただし、一度 Disable にしたリポジトリは別のエラーが出てダメでした。
2016/04/27 追記:
C++ のリポジトリでエラーになっていたようでした。
こちらもご対応頂いたので、現在は問題なく登録できると思います。
SideCI チームの方々ご対応ありがとうございましたm(__)m

2016年4月18日月曜日

[Jenkins] 複数ある上流ジョブの成果物を使う

Jenkins での成果物コピーには Copy Airtifact Plugin を使うことが多いと思います。
Copy Airtifact Plugin は、指定のジョブ、指定のビルドの成果物をワークスペースにコピーするプラグインです。

今回は、以下のようなパイプラインがあったとき、下流ジョブ(TEST)が上流ジョブ(BUILD_DEBUG or BUILD_RELEASE)から成果物をコピーして利用したいケースを考えます。

TEST は BUILD_DEBUG,BUILD_RELEASE のどちらからも流れてきます。
そして TEST ジョブではそれぞれ上流の成果物を利用するとします。

通常、成果物のコピーをする場合、Copy Airtifact Plugin を使うと思いますが、
不特定のジョブからコピーを行う場合も、このプラグインを使います。


まず、コピー元のジョブ名には環境変数を使えます。
2017/2/9 追記
執筆時は、ビルドパラメーターへの設定は必須ではありませんでしたが、現在はここで設定する変数をビルドパラメーターとしておく必要があるようです。

ここでは、ARTIFACT_JOB としました。
この ARTIFACT_JOB を上流ジョブ名にするために、Parameterized Trigger Plugin を使ってジョブ名をパラメータとして引き渡します。
(同様に、ビルド番号も環境変数 ARTIFACT_NUMBER に設定し、上流ジョブから受け取るようにしています。)


設定としては、「Predefined parameters」に
AIRTIFACT_JOB=$JOB_NAME
AIRTIFACT_NUMBER=$BUILD_NUMBER
として引き渡します。

もう1つ重要な設定があります。
コピー元のジョブ名に環境変数を使用した場合、コピー元のジョブからコピーの許可を得る必要があります。
コピー元のジョブの設定に「成果物のコピーの許可」がありますので、コピー先のジョブ名を入力してください。


設定は以上で完了です。
実際に動かしてみましょう。

動作結果
BUILD_DEBUG から実行した場合



BUILD_RELEASE から実行した場合



このように BUILD_DEBUG から debug.txt、BUILD_RELEASE から log.txt が利用されるようになりました。
処理する内容は同じで、対象だけが異なる場合に役立つと思います。
(※ マトリックスを組む手もあります)

今回は以上です。

2016年4月11日月曜日

[C++] Include-What-You-Use で依存関係を確認する

ブログズミ: [C/C++][Clang] include 解析ツールを作った
ちょっと前に clang で include 依存関係解析を書きましたが、最終的にやりたいことができるツールが既にあったので使ってみました。

Include-What-You-Use
ツールは Include-What-You-Use といいます。
こちらの存在は以下の記事を見て知りました。
Include-What-You-Use も clang の AST を利用して解析しているそうです。

ホームページのダウンロードリンクに Windows バイナリがあったので、今回はこれを使いました。
Downloads

また、使用方法は Github のドキュメントを参照。
How to Run
CXX を include-what-you-use にしてビルドすれば良いようです。

iutest で試した結果がこちら。
$ make CXX=include-what-you-use sample
include-what-you-use -I../../include -g -Wall -Wextra -Wundef    -c ../../samples/main.cpp
In file included from ../../samples/main.cpp:24:
In file included from ../../samples/../include/iutest.hpp:23:
In file included from ../../include/iutest_core.hpp:20:
In file included from ../../include/internal/iutest_result_reporter.hpp:20:
In file included from ../../include/internal/iutest_core_impl.hpp:20:
In file included from ../../include/internal/iutest_internal.hpp:20:
In file included from ../../include/internal/../iutest_pred.hpp:20:
In file included from ../../include/iutest_assertion.hpp:20:
In file included from ../../include/iutest_result.hpp:20:
In file included from ../../include/internal/iutest_message.hpp:20:
In file included from ../../include/internal/../iutest_env.hpp:20:
In file included from ../../include/internal/iutest_charcode.hpp:20:
In file included from ../../include/internal/iutest_port.hpp:24:
In file included from ../../include/internal/iutest_internal_defs.hpp:20:
In file included from ../../include/internal/../iutest_defs.hpp:20:
../../include/internal/iutest_compiler.hpp:38:12: fatal error: 'windows.h' file not found
#  include <windows.h>
           ^

../../samples/main.cpp should add these lines:
#include <vcruntime_new.h>                     // for operator new
#include "internal/../impl/../iutest_env.hpp"  // for Environment
#include "iutest_config.hpp"                   // for IUTEST_HAS_LIB
#include "util/iutest_util_output.hpp"         // for Console

../../samples/main.cpp should remove these lines:
- #include <iostream>  // lines 50-50

The full include-list for ../../samples/main.cpp:
#include <vcruntime_new.h>                     // for operator new
#include "../include/iutest.hpp"               // for AddGlobalTestEnvironment
#include "internal/../impl/../iutest_env.hpp"  // for Environment
#include "iutest_config.hpp"                   // for IUTEST_HAS_LIB
#include "util/iutest_util_output.hpp"         // for Console
---
Makefile:104: ターゲット 'main.o' のレシピで失敗しました
make: *** [main.o] エラー 7

Windows バイナリを使っているため、Windows sdk のパスを通さないといけません。
が、とりあえず sample.cpp に不要な iostream の include があるのがわかったので修正しました。

Visual Studio でできないか?
Visual Studio の拡張機能でないかなーと見ましたが、今現在はないもよう。
Clang for Windows があるし、このへんも対応してくれるとうれしいなーと思いました。
(※ なんとかできないか調査中)

2016/4/14 追記
include-what-you-use-cl を公開しました。
こちらは Visual Studio のプラットフォームツールセットとして、Include-What-You-Use を使えるようにするツールです。

git clone して install.bat を実行するとインストールされます。
別途、Include-What-You-Use.exe へのパスを通しておく必要があります。

インストールすると、プラットフォームツールセットに Include-What-You-Use の選択肢が出ます。

ビルドすると以下のように結果が出ます。


(※エラー出るかもしれませんが、依存関係の解析はできてるはず。)
(※なんでツールセットなのかは、ツールセットの定義の仕方の勉強がてらです。)

追記ここまで
==============

最後に
今回は、軽く触れる程度に Include-What-You-Use を紹介させていただきました。
では、また今度。


2016年4月4日月曜日

無料で使える CI サービス比較(Artifacts)

この記事は「ブログズミ: 無料で使える CI サービス比較」の追加記事です。
iutest の開発の都合で成果物を保存できるサービスを調べたので備忘録として残しておきます。

AppVeyorCircle CICodeshipdrone.ioMagnum CIsemaphoreShippableSnap CITravis CIWercker
Artifacts × × × × × ×

今回◯印をつけているのは、CI サービスのみで成果物保存が可能なものにつけています。
×のサービスでも Amazon S3 などを利用すれば成果物を保存することができます。

調べたものの結局使ってないので
短いですが、以上です。

2016年4月1日金曜日

Jenkins 2.0 beta 始めました

Jenkins 2.0 の beta 版が出てたのでダウンロードして使い始めました。
(今日はエイプリルフールですが、Jenkins 2.0 は本当です。)

起動すると以下の画面が出てきます。

$JENKINS_HOME\secrets\initialAdminPassword ファイルを開くか、
コンソールに出力されているパスワードを入力してください。


次に以下の画面が出ます。


今回は左の「Install suggested plugins」を選択。
以下のオススメプラグインがインストールされます。


インストールが完了すると、ユーザー登録画面が出ます。
必要な人は登録をしましょう。スキップも可能です。


これでセットアップが完了です。


ジョブを作成してみた
もちろん最初はなにもありませんので、とりあえずジョブを作成してみました。
新規作成をすると今までとは違う画面がでてきました。


ジョブの設定画面もタブ化されてスッキリ。


最後に
Jenkins 2.0 になって、UI が変わったこと以外は今まで同じ感覚で使えそうな感じでした。
今まで Pipeline Plugin を使ってませんでしたが、2.0 を始めるにあたって一から組みなおそうと思います。

あ、あと Jenkins 2.0 ということで Jenkins おじさんも2倍に増えてました。
2倍、いやそれ以上の働きに期待したいですね!