2018年1月15日月曜日

[Travis CI] Resource temporarily unavailable で失敗する問題の回避策

The Travis CI Blog: Trusty as default Linux is coming

Travis CI で Precise を使っていたのですが、EoL とのことなので Trusty に変更しました。
そしたらビルドが盛大に失敗しまくってテンヤワンヤ。。
だいたい解消できたので、その時の対応をブログに残しておきます。
wine を使うジョブが未だ対応中なのです。。一旦コメントアウト中)

Resource temporarily unavailable
一部は apt-get してくるパッケージが変わっていたなど、設定の問題だったのですが、残りのほとんどがログが途中で途切れて exit 1 してました。
その中の、一部のジョブで「Resource temporarily unavailable」が出て失敗してたので、これをヒントに解決(回避)しました、というお話。

以前のワーカーイメージを使う(失敗)
最初にこれを試しました。(結果は失敗です)

これを試したのは、検索したときにこちらの issue がヒットして、そこに最初に書いてあったため。
Large writes to stdout sometimes fail with "Resource temporarily unavailable". · Issue #4704 · travis-ci/travis-ci


方法としては、.travis.yml ファイルに以下の一行を追加するだけです。
group: deprecated-2017Q2


が、結果変わらず。


The Travis CI Blog: The new Ubuntu Trusty 14.04 images are now live!
ここを見たら、sudo: false じゃダメだし、2017/9/1 まで保存って書いてあるので、もう使えない workaround でした・・・

sudo: required にする(意味なし)
そもそも、sudo less にして sudo: false にしてたものの、Precise だと Docker コンテナがなく、sudo: required と同じワーカーで実行されてました。
というわけで、sudo: required にして試してみました。


が、これも結果変わらず


脱線しますが、コンテナが使えるようになってあらためて確認すると、起動が 20 秒超から数百ミリ秒になってました。速くていいですねぇ。
頑張って sudo less にした甲斐がありました。

stdout/stderr のノンブロッキングモードを外す
最初にみてた issue (Large writes to stdout sometimes fail with "Resource temporarily unavailable". · Issue #4704 · travis-ci/travis-ci) のさらに下のほうに、別の workaround があってそこを見ると標準出力(エラー)のノンブロッキングモードを外す方法がありました。

Travis has a new nasty trick: it puts stdout in nonblock mode! · SpiNNakerManchester/SupportScripts@1a4a4b8
こちらを参考に、同じようにブロッキングモードになるようにしてみました。


結果は成功

ログを見ると stderr がノンブロッキングモードになっていたみたいです。


これでほとんどの失敗が解決しました。
この記事が誰かの助けになれば幸いです。では。

2018年1月12日金曜日

新しく無料で使える CI サービスを探しています

Travis CI で wine を使ったテストが失敗するようになって解決するのに時間がかかりそうな予感がしたので、新しい環境(CI サービス)を探すことにしました。
(順番が前後しますが、Travis CI での失敗については来週のブログで話す予定でした)
目的は Travis CI でやっていた mingw + wine のテストを引っ越すことです。

で、自分は結構 CI サービスを使い尽くしているため、"新しいもの" となると割りと探すの大変そうだな~と思ってました。




ないかなーと思ってググっていたらすごくいいまとめがあったので、速攻でブログにしました。


27 Best hosted continuous integration services as of 2018 - Slant

ちょっとこれを参考に探しみようと思います。

2018年1月10日水曜日

AppVeyor のフリーアカウントで定期ビルドが無効になっていたので有効化した

Scheduled builds for free accounts | AppVeyor

最近気づいたのですが、AppVeyor のフリーアカウントで定期ビルドがデフォルト無効になってました。
有料機能になったわけではなく、オプショナル機能として有効化依頼を出せば使えるっぽいです。

定期ビルド機能は、Wandbox の更新チェックに利用してたのですが、2ヶ月ほど停止してました・・・


実際にプロジェクトページに行って、設定しようとするとこうなります。


というわけで、有効化依頼をしました。
連絡手段はなんでも良さそうでした(メール、フォーラムTwitter)。
最初 Twitter で連絡してみたのですが、レスポンスがなかなかなかったので、こちらのフォーラムを参考に同じ感じで依頼を出したところ、すぐに有効化していただけました!


外部サービスから Webhook で定期ビルドしようか、とか
別の CI サービスへの引っ越し、とか
サービス連携サービスで実装しなおす、とか
いろいろ考えましたけど、案外簡単に有効化できたのでよかったです。

ではでは。