2016年1月12日火曜日

Snap CI 始めました

近頃 iutest の CI 環境として様々な CI サービスを紹介してきましたが、今回の CI サービスは Snap CI です。
Snap CI を使うことにした一番の理由は後述するとして、まずは登録からテストするまでを紹介します。
Snap CI を使う


まずはアカウント登録をします。
Snap CI は Github のアカウントで登録できます。
Try Now ボタンを押すと Github のログイン/認証画面が出るので許可をします。

登録したら、セットアップ画面になるので目的のリポジトリを選択してください。


リポジトリを選択すると設定画面が開きます。


最初は Github からのクローンステージとサンプルステージがあります。

まずは、サンプルステージに目的の処理を書いていくことになると思います。

ステージではそれぞれ Languages と Database の設定ができます。


「Stage Basic Info」は、ステージ名と実行トリガーの設定ができます。
Automatic は、1つ前のステージが成功したら自動で開始されます。
Manual は、手動で実行ボタンを押すと開始されます。
ただし、最初のステージだけは Manual にできませんので、注意。

処理は「Commands to be executed in this stage」に記述します。
ピン留めするとすべてのステージで実行するコマンドになります。

「Environment Variables」で環境変数、「Artifacts」で成果物集計の設定、
「Secure Files」で SSH keys などのセキュアなファイルを登録することもできます。
「Workers Configuration」は並列ビルドの設定ですが、無料アカウントでは1つしか使えません。

「Add Stage」でステージは増やすことができます。
またドラッグアンドドロップでステージの順番を入れ替えることもできます。

最後に「Build now」ボタンを押すとビルドが始まります。

結果はこのように閲覧できます。


失敗していますね。
ここでちょっと脱線します。
この失敗、終了コード 0 を返しているので成功と判断されるべきなのですが、なぜか失敗とされてしまってました。
この原因を探るのに非常に手間がかかりました。。。
不正な文字列を出力すると失敗になる?
終了コード 0 を返しているにも関わらずテストが失敗する問題ですが、どのテストが原因かを実行しているテストを1つ1つしらみつぶしに調べていって、ようやく絞り込むことができました。

原因としては不正な文字列を出力することっぽいんですが、例えばこんなコード。
ランダムな char の値を出力するのですが、ASCII コード外の値を出力することがあります。
IUTEST_P(RandomValuesTest2, Test)
{
    const char v = GetParam();
    IUTEST_SUCCEED() << v;
}


わかってしまえば簡単なことですし、よろしくない挙動もありましたが、
なぜ失敗になっているのか、どこが原因なのか調べるのにすごく時間がかかりました。
失敗にするのは構わないですが、失敗原因をちゃんと表示してほしいですね。。。

Snap CI の特徴
Snap CI の特徴として、
  • ステージをつなげてパイプラインを作る仕組み
  • 長いタイムアウト時間
  • マニュアルトリガー
が上げられると思います。

今回 Snap CI を使ったのは、常に実行する必要はないものの、非常に時間のかかるテストをしたかったからです。
Snap CI はタイムアウト時間が2時間と長く、かつパイプライン全体でのタイムアウトではなくステージごとのタイムアウトになっているのがありがたいです。

つまり長いテストも複数に分割して2時間以内に収めれば実行することができます。
iutest でもご覧のように複数に分割して実行するように設定しました。


また、マニュアルトリガーで手動で実行開始をしたときにだけテストされるようにしています。
常にやる必要がなく、長いテストには便利な機能です。

バッジ
最後に CI サービスお決まりのバッジです。
バッジは Notifications で確認できます。


こんな感じです。

まとめ
Snap CI には他の CI にはない機能があって便利に使えそうだと思いました。
今まではローカル環境でしていた時間のかかるテストがサービス上で実行できるようになったのは、非常にうれしいことです。

もし、他の CI サービスに不満を感じていたら Snap CI を一度試してみてはいかがでしょうか?

2016年1月5日火曜日

[2016年] あけましておめでとうございます

あけましておめでとうございます。

週一回はブログを更新するという目標でやっておりますが、このブログも6年目に入っております。
今年も週一ペースでやっていけたらよいなと思ってます。
今年も何卒よろしくお願いしますm(__)m

新年一発目は、最近よく書いている CI ネタの予定です。
では。

2015年12月29日火曜日

2015年最後の下書き供養

さて、2015 年も残りわずかになりましたね。

思いつきで下書きにタイトルを残しておいたものや、ちょっとした文章書いてそれから全く手を付けてないものがかなり溜まってきました。
そこで、今回は「2015年最後の下書き供養」ということで、溜まった下書きを一掃したいと思います。

Jenkins Plugin を作ってみよう - その1(環境構築)

作ってみようと思ってある程度環境構築までしたのですが、結局そこまでで作れていません。
プラグインはホントに作りたいと思ってますが、この下書きはだいぶ古いので捨ててしまいます。

[Jenkins] メール通知をスルーされにくくするためのちょっとした工夫
メール通知の Tips 的な記事としてまとめていて、多少中身ができているのですが、自分自身メール通知がちゃんと運用できていないこともあってまだまだ半端な状態です。
一応残しておきますが、公開できるようになるにはもっと実践する必要があると思います。
(要望があれば、ちょっと頑張ります。)

Haskell はじめました
はじまりませんでした。

Visual Studio Community 2013 でアドインを作る
Community でアドイン(拡張機能)が使えるようになりましたが、使うだけでなく作ることもできるので、簡単にサンプル的なものを作って記事にしようとおもったのですが、VS 2015 Community も出てしまいましたし、完全に旬を過ぎているのでお蔵入りです。

Visual Studio のデバッガ拡張「MIEngine」を使ってみた


便利そうだなと思って少し触って、よくわからなかったので放置してました。
とりあえず今は必要としてないので捨てます。

Perforce を hosting サイトの Assembla を利用して使ってみた
Perforce 使ったことがなかったので、一度使ってみたいな~と思って、どこかホスティングサービスないかというときに見つけたのが Assembla です。

で、Perforce を使おうとしたものの、よくわからなかった・使いこなせなかったので放置。
Perforce 使う機会があればいいのですが、個人的に使おうとしないとそういうことはなさそうなので、これも破棄。

[Arduino] 個人的備忘録
ある程度たまったら、と思っていたのですが、最近は Arduino を弄ってないため全くと言って皆無。
まだしばらくは電子工作から離れてると思います。(たぶん)

[Arduino] コマンドラインでビルドから転送までをする
こっちは書き終わってたんですが、公開するタイミングをうかがっていたら、いつの間にかすっかり忘れていてこの記事を書き始めて気づきました。
気づいた時には既に遅し。だいぶ前に書いたので今はあげるのは…な感じなので、一応保存しておいて次に Arudino を弄る機会があったら、見直して公開することにします。

「C++のためのAPIデザイン」を読んで自作コードを評価してみた


まだ全部読んでない。

2015年に読んだ本
私、本をあまり読まないので、
今年はちょっと本を読もうかなという決意も込めて下書きしていたのですが、
結局読んだのはマンガと
「システムテスト自動化 標準ガイド」と

「マンガでよくわかる 教える技術」くらい。

(それもマンガやろ、というツッコミはなしで)

ギア本もまだ全部読んでないですしね…

というわけで、この記事はボツ。
そして、「2016年に読んだ本」というタイトルに決意を込めて変える!

最後に
今年も残りわずかですね。
もう休みに入られている方も、まだまだ仕事があるよという方もよいお年をお過ごしください。
それでは、また来年~