2017年11月8日水曜日

[Appveyor] イメージを環境変数で指定する

今回は Appveyor で環境変数を使ったイメージの指定を紹介します。
iutest のテストでイメージごとにそれぞれ異なる環境変数を設定したかったときに、この方法に行き着きましたのでそれの紹介です。

テストではよくマトリックスを組んで複数の環境でテストをすることが多いと思います。
Appveyor なら、イメージが複数用意されているので、それぞれでテストを実行することになります。その場合はイメージを複数指定すれば OK です。
さらに環境変数を列として、イメージ×環境変数のマトリックスも組むこともできます。
さきにこちらの方法を紹介しておきます。

イメージと環境変数のマトリックス
まずイメージは「SETTINGS」「Environment」の「Build worker image」で複数設定することができます。
指定したイメージの分だけ、ジョブが実行されます。


さらに、同じく「Environment」の「Environment variables」で環境変数を指定できます。
「Add variable」だと、各イメージで共通の環境変数が設定されますが、「Add build matrix group」では環境変数のマトリックスを作成できます。


グループを追加すると「Environment variables - 1」「Environment variables - 2」のようにグループが増えていきます。
それぞれ「Add variable」から環境変数を設定できます。



テーブルにするとこんな感じです。
ENV_M valueVisual Studio 2015Visual Studio 2017
Environment variables - 111
Environment variables - 222

Visual Stduio 2015/2017 のイメージそれぞれに対して、ENV_M が 1 と 2 のジョブが実行され、計4つのジョブが実行されます。

iutest でやりたかった構成
さて、これに対して iutest でやりたかったことはこうです。
ENV_M valueVisual Studio 2015Visual Studio 2017
Environment variables - 11×
Environment variables - 2×2
※×印はジョブを実行しないという意味です
上と合わせて書きましたが、わかりやすくするとこうです。
Visual Studio 2015Visual Studio 2017
ENV_M value12
つまり、マトリックスにしたいわけではなく、イメージ対して一意な環境変数を設定したいわけです。



これができないか調べていたら、イメージのマトリックスを使わずに、「APPVEYOR_BUILD_WORKER_IMAGE」環境変数でイメージの指定ができることを知りましたので、これで解決しました。

イメージを環境変数で指定する
環境変数マトリックスでイメージを指定するので「Build worker image」は空にします。
次に、「Add build matrix group」で環境変数のグループを作成し、環境変数名「APPVEYOR_BUILD_WORKER_IMAGE」でイメージの名前を設定します。


これで実行すると「Environment variables - 1」のときだけ、イメージ設定が上書きされます。


環境変数が変わっただけでイメージが変わってないかもしれないので、以下のコマンドで確認しました。


結果、このようにイメージが変わっていることを確認。


まとめ
イメージに対して環境変数を別途指定したい場合は、環境変数のマトリックスと APPVEYOR_BUILD_WORKER_IMAGE を使うと実現できます。
イメージ×環境変数のマトリックスを組みつつ、イメージに対して個別で一意な環境変数をセットしたい場合は、APPVEYOR_BUILD_WORKER_IMAGE 環境変数を参照して判断するのが良さそうです。

マトリックス化する予定があるなら、最初から APPVEYOR_BUILD_WORKER_IMAGE を参照して分岐させるほうがいいかもしれないです。
このへんは好み、かなぁ・・・
ともあれ、APPVEYOR_BUILD_WORKER_IMAGE は ReadOnly じゃなくて Write もできるってことを覚えておくと今後役に立つかもしれません。(たぶん)


今回は以上です。では。

2017年11月1日水曜日

初出社

本日、初出社でございます。
報告記事でブログ更新回数を稼いでいますが、ここ1ヶ月ほどやることが多くて全くもってプログラムをしてませんでした。(引越前の駆け込み観光とか引越後の観光とか)インプットがないとアウトプットもなかなかないわけで…

休暇も終わってこれから新天地での生活ルーチンが構築されていくわけですが、これまで通り趣味プロやブログを書く時間を作っていきたいと思います。(早速この記事は通勤中に書いてます)

では、今後ともよろしくお願いしますm(__)m

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 での運用を開始しつつ、より深く触っていきたいと思います。

以上。