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

2019年4月23日火曜日

[Cirrus CI] OSX VM 数制限対策としてマトリックスを直列にしてみた




OSX VM は1つしか使えない制限があり、その制限により CI が FAIL することがあったので対策しました。
もともとの YAML はこんな感じでした(一部抜粋)
cirrus_osx_test_task:
  only_if: *default-condition
  auto_cancellation: true
  osx_instance:
    image: mojave-xcode-10.1
  env:
    matrix:
      STDFLAG: -std=c++14
      STDFLAG: -std=c++17
  test_script: cd test && make -j4 showcxxversion default && make test


c++14 と c++17 コンパイルを並列していました。
単純にどちらかだけにしたら制限に引っかかることはなくなりますが、できれば減らしたくない条件です。
そこで、並列に実行するのではなく、直列で実行するようにしました。
修正した YAML はこんな感じです。
cirrus_osx_14_test_task: &osx_task
  only_if: *default-condition
  auto_cancellation: true
  osx_instance:
    image: mojave-xcode-10.1
  env:
    STDFLAG: -std=c++14
  test_script: cd test && make -j4 showcxxversion default && make test

cirrus_osx_17_test_task:
  <<: *osx_task
  env:
    STDFLAG: -std=c++17
  depends_on:
    - cirrus_osx_14_test
depends_on で依存を貼って、直列にしています。 YAML エイリアスが使えるため直列にしても記述量はさほど増えませんでした。メンテナンス性が問題になることはないでしょう。 ただし、実行時間が長くなるデメリットはあります。が、iutest の現状の開発ペースでは特に問題にならないのでこのようにしました。

今回は、これで以上です。
では。

2018年11月1日木曜日

GitHub Checks 対応 CI サービスを使ってみた

さて、お気づきの方もいらっしゃると思いますが、GitHub の PR ベージに「Checks」タブが現れました。


こちらは、最近5月頃リリースされた Checks API 用のタブのようです。
Introducing the Checks API, a better way to connect integrations and code | The GitHub Blog
サード・パーティCIツールとのより深い連携を実現する新機能「Checks API」のパブリックベータ版を公開 | The GitHub Blog

CI での指摘がこちらのタブに集約される感じでしょうか。
これまでは、CI の「成功/失敗」はすぐに確認できたものの、失敗の内容は CI サービスに飛ばないとわからない(権限ないと見ることすらできない)状態だったので、これは便利になりそうです。


実際に使ってみた(失敗 PRの例)
iutest ではいろんな CI サービスを使ってますが、その中の1つ Cirrus CI が Checks API に対応して、タブに表示されていたのでそちらを例として紹介します。

テストが失敗すると↑のように Checks タブから確認できます。
Cirrus CI では OS および -std オプションをパラメタライズドに4つのテストが実施されています。サービスのぶら下がって4つのプレートが出ていますね。
それぞれ、プレートをクリックすると結果が確認できる仕組みです。

Re-run,Re-run all があるので、環境エラーなどで失敗してた場合に PR した側でも再実行できるので、それはレビュイーとしては助かりそうです。

最後に
PR ベースの開発をあまりしていないので、まだ使ってみた機会は少ないのですが、失敗原因を1つの画面で確認できるのは便利そうな気がしました。
早く他のサービスも対応していくといいなーと思いました。

今回は以上です。





ちなみに… Travis CI の表示がありますが、iutest ではまだ結果を Checks タブで見ることはできません。
実のところ、Checks API が出た5月ころにはもうこの記事を書いていて、Travis CI で試した感想を書こうと思ってましたが、いろいろあって(略)このタイミングとなりました。

編集後記1
供養
インストール
Checks タブを開くと Marketplace へのリンクがあるので開いて、お好きなものをインストールだけです。




といっても、iutest で使っている CI サービスで、
Checks API に対応しているサービスは現在(2018/6)時点では Travis CI くらいなので、そちらをインストールしました。
(インストール手順は特につまるとこもないので省略)

ここで文章は途切れている・・・
Travis CI は Checks Api に対応しているのですがタブができるだけで特に何も表示されませんでした。

0・・・

The Travis CI Blog: Announcing support for the GitHub Checks API on travis-ci.com


OSS , will soon , ははあーんまだか・・・
(まだそうだったので、記事作成を中断・・・)

・・・3ヶ月後
おおー Cirrus CI が Checks API に対応したでぇ!

Travis CI はまだかー・・・
と思いつつ、Cirrus CI で記事の続きを書くことにしました。

編集後記2
Travis CI の状況を確認
記事の続きを書くにあたって、 Travis CI の状況をちゃんと把握しようということでドキュメントを確認しました。
https://docs.travis-ci.com/user/open-source-on-travis-ci-com/#existing-open-source-repositories-on-travis-ciorg

どうやら、移行は勝手にしてくれるみたいですが、遅れているようです。
もし、ビルド履歴や設定(環境変数を含む)が消えてもいいのであれば、リクエストメールを送ることですぐさま移行ができるみたいです。

iutest の場合、設定は特に消えても大丈夫(月一定期実行してるくらい)で、ビルド履歴も数年間歩んできた思い出くらいの意味しかないので、綺麗さっぱり移行することに決めました。
travis-ci.com への移行手順は別途記事を書いてますので、そのうち公開する予定です。

公開したらここに追記

2018年4月10日火曜日

[CI] Cirrus CI はじめました



新しい CI サービスを見つけたので、早速使ってみました。
今回使ったのは Cirrus CI です。
Cirrus CI の特徴は Github App であること、そしてシンプルかつ Windows にも対応しています(OS X も今後対応するようです)
また、気になる Pricing も OSS であれば無料です。


はじめる
Cirrus CI は他の CI サービスと異なり Github App で提供されているため Github 専用です。
使う場合も、Marketplace からインストールして開始します。
https://github.com/apps/cirrus-ci

Marketplace にアクセスしたら、「Install」ボタンを押します。


権限の確認画面が出ますので、自分のリポジトリ全部に権限を与えるか、一部のリポジトリのみに与えるか選択します。使い方にあったほうを選択したら、「Install」ボタンを押してください。


インストールはこれだけです。
完了すると「Quick Start」のページにジャンプします。
(ドキュメントは他のサービスと比べると少ない印象がありますが、シンプルな作りだったので十分でしたし、yml フォーマットも理解しやすかったです)


タスクを作成
Cirrus CI も多くの CI サービスと同様に yml ファイルをリポジトリに配置して、その記述に沿って CI が実行されます。
yml のフォーマットは公式ドキュメントに説明があります。

iutest では以下のようなタスクを作成しました。(コメント足してます)


フォーマットはシンプルで、基本的には task と script を作成する感じです。
もちろん、マトリックスや、タスクの依存関係などを組みこともでき、メインの CI サービスとして使っていける機能が揃っています。

.cirrus.yml を push する
作成した .cirrus.yml を push するとタスクが実行されます。
タスクの状態は Github の Commit Status に表示されます。



Details から詳細ページにジャンプできます。
そちらでビルドログが確認できますので、失敗した場合はそちらを確認する感じ。




バッジを付ける
最後に、CI サービスお約束のバッジを付けていきます。
バッジの付け方は以下のページに説明があります。
https://cirrus-ci.org/guide/writing-tasks/#embedded-badges


iutest の場合は
|[![Cirrus Build Status](https://api.cirrus-ci.com/github/srz-zumix/iutest.svg?branch=master)](https://cirrus-ci.com/github/srz-zumix/iutest/master)
のようになります。



最後に
たまたま Cirrus CI のことを発見して使ってみましたが、躓くところもなくすんなりと導入ができました。
今まで多くの CI サービスを使ってきたこともあってか、yml ファイルの記述が理解しやすかったように感じました。

また、今回は使用しませんでしたが Windows のワーカーも使えるとのことですし、OS X も今後対応予定なので複数 OS のテストが1つのサービスでできるようになる日も近そうです。
Travis CI や Circle CI で Linux/OS X、AppVeyor で WIndows の CI を回している方は、お引越しを検討してみてはいかがでしょうか。

今回は以上です。では。