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 がノンブロッキングモードになっていたみたいです。


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

0 件のコメント:

コメントを投稿