Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

travisのbuildが失敗する件 #3

Closed
syui opened this issue Jul 27, 2017 · 15 comments
Closed

travisのbuildが失敗する件 #3

syui opened this issue Jul 27, 2017 · 15 comments

Comments

@syui
Copy link
Member

syui commented Jul 27, 2017

現在2つの理由で失敗しているように見えます。travisの主要なlogはこちらです。

No output has been received in the last 10m0s, this potentially indicates a stalled build or something wrong with the build itself.
Check the details on how to adjust your build configuration on: https://docs.travis-ci.com/user/common-build-problems/#Build-times-out-because-no-output-was-received

この問題ついてはyaourtのイメージを作成する時に失敗しているようで、travis上で実行する以下のコマンドが原因だと見られます。

.travis.yml

docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh;
docker push $DOCKER_TEARM/archlinux-yaourt;

よって、この問題については一旦、yaourtのイメージを作成する処理をやめることで一時的な対処とします。

次に以下のエラーが出る問題があります。

docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory
The command "docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it tmp /bin/bash /mkimage-arch-jp.sh" exited with 127.

これはpacman -Sccのような処理が原因かもしれない考えていますが、はっきりとしたことは調査していません。

Cache directory: /var/cache/pacman/pkg/
:: Do you want to remove ALL files from cache? [y/N] 
Database directory: /var/lib/pacman/
:: Do you want to remove unused repositories? [Y/n] 
removing unused sync repositories...
docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory
@syui
Copy link
Member Author

syui commented Jul 28, 2017

When a long running command or compile step regularly takes longer than 10 minutes without producing any output, you can adjust your build configuration to take that into consideration.

https://docs.travis-ci.com/user/common-build-problems/#Build-times-out-because-no-output-was-received

上のようにあることから、travisは10分以上出力がない場合のbuild処理を制限するように変更したようです。

リポジトリを統合したことによってtravisに集中的に負担がかかってしまい、build時間が増えてしまったことが原因ですが、この前は、archlinux-yaourtのイメージを作成する処理を消して対応しました。

#867792e

これに対する対処法で最も順当なのはリポジトリを分離して、archlinux-yaroutを再度、docker hubにpushするリポジトリを作成しCIを回すことですが、現時点でどうすべきかはまだ考えていません。一応、これまでの情報を再度まとめておくことにします。

archlinux-yaourtの利点

archlinux-yaourtの利点の一つはdockerfileyaourt -S $appのような処理を直接書くことができるところにあります。

dockerfile

FROM archlinuxjp/archlinux-yaorut
RUN yaourt -S $app --noconfirm 

なぜイメージを日々アップデートしなければならないか

archlinux-yaourtをtravis-ciのcronを介して日々アップデートする理由は、他のdocker imageと同様、アップデートされずに古くなってしまったarchlinuxのイメージがpacman -Syuができなくなることによって壊れてしまう危険を回避するためです。また、当該docker imageを使用する利用者にとっても古いイメージはアップデートの時間がかかってしまいその辺のタイムロスを縮小する狙いもあります。(dockerfileに最初にpacman -Syuのようなパッケージアップデートの処理を書く人が多いため)

よって、このままarchlinux-yaourtが自動アップデート(docker push)されない日々が続くようなら、いずれこのdocker imageが動かなくなってしまうことが予想されます。壊れたらその時にlocalでイメージを作成してdocker pushすれば済む話であり、そちらのほうがエコですが、この辺りはできる限り人間の手を煩わすこと無くメンテナンスしていきたいというのがあります。

@syui
Copy link
Member Author

syui commented Jul 28, 2017

この問題に対応するため、yaourtのイメージを生成するリポジトリを分離しました。
https://github.com/ArchLinuxJP/docker-yaourt

@syui syui closed this as completed Jul 28, 2017
@syui
Copy link
Member Author

syui commented Jul 28, 2017

再度、リポジトリを作成してCIを回して初めて気づきましたが、問題はビルド時間ではなく出力がない時間であるため、本家であるdocker-archの方で、travis.ymlを書いて実験してみます。

@syui
Copy link
Member Author

syui commented Jul 28, 2017

こんな感じで書いたら通りましたが、正直なところよく分かりません。そもそも出力がないというけれど、普通にありましたし、そのあたりなんで通らなくなっていたのか、よくわからない感じです。そもそも10分間出力がないといいますけど、調べてみるとビルド時間自体が10分もかかっていませんでした。

.travis.yml

after_success:
        - travis_wait 30 mvn install
        - docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh
\"}"

@arkenous
Copy link
Member

@syui さん
travis_wait 30 mvn install ですが,これは mvn install の実行中は毎分ごとに 30 分経過まで short line を出力するという内容になります.

なので,以下の様に修正すべきかと思います.

after_success:
    - travis_wait 30 docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh

本 Issue に関してですが, yaourt イメージ作成時のパッケージダウンロード時にミラーサーバからの通信が stuck してしまい,出力が無いまま 10 分経過して…ってのがありそうかなーと思いました.

@syui
Copy link
Member Author

syui commented Jul 29, 2017

@k3nsuk3
なるほど、ありがとうございます。

@syui
Copy link
Member Author

syui commented Jul 29, 2017

例えば、ifを使う場合などはifの前にtravis_waitを置いたほうがいいのでしょうか。

after_success:
- if [ "$TRAVIS_BRANCH" == "master" ]; then
    travis_wait 30 docker run ...;
  fi
after_success:
- travis_wait 30 if [ "$TRAVIS_BRANCH" == "master" ]; then
    docker run ...;
  fi

@syui
Copy link
Member Author

syui commented Jul 29, 2017

ちょっと実験中です。

yaourtのdocker pushだけが何故か成功していない感じがする。

@syui
Copy link
Member Author

syui commented Jul 29, 2017

理由は分かりませんが、travis-ciを回して何故か以下のような結果になりました。

travis_wait 30 mvn install;でやった時は何故かyaourtのdocker pushに成功しますが、travis_wait 30 docker ...とかでやる場合はなぜかyaourtのdocker pushに成功しませんでした。

build成功、しかし、yaourtにdocker push失敗

after_success:
- if [ "$TRAVIS_BRANCH" == "master" ]; then
        travis_wait 30 docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh;
        ...
  fi
after_success:
- if [ "$TRAVIS_BRANCH" == "master" ]; then
        travis_wait 30 docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh;
        travis_wait 30 docker push $DOCKER_TEARM/archlinux-yaourt;
        ...
  fi

build成功、yaourtにdocker push成功

after_success:
- if [ "$TRAVIS_BRANCH" == "master" ]; then
        travis_wait 30 mvn install;
        docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh;
        ...
  fi

build失敗

after_success:
- travis_wait 30 if [ "$TRAVIS_BRANCH" == "master" ]; then
        docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh;
        ...
  fi

@arkenous
Copy link
Member

@syui さん

b5c5342132b1a3 については, mkimage-arch-jp.sh の中身の実行には成功している(Success が出力されている)ようですが,その後以下のようなログが出力され, exit with 1 となっているようです.

Still running (1 of 30): docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh
The command docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh exited with 1.

Log:

the input device is not a TTY
/home/travis/.travis/job_stages: line 169: 10059 Terminated              travis_jigger $! $timeout $cmd

ab6300ejob_stages にコマンドを渡す部分で syntax error near unexpected token 'then' となっていることから,おそらく travis_wait に if 文をそのまま渡すことは出来ないのかなと思います.

b5c5342132b1a3 で出力されたログについて調べてみますが,パッケージダウンロードで stuck するのが原因であると仮定するなら,travis_retry の利用を検討されてもいいかもしれません.


解決案

mkimage-arch-jp.sh を用いた yaourt イメージの作成時に, travis_wait ではなく travis_retry を用いる.

travis_retry docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged -it yaourt /bin/bash /mkimage-arch-jp.sh;

@arkenous
Copy link
Member

@syui さん

エラーログに関してですが,まさしくこれかなと思います.
travis-ci/travis-ci#6934

travis_waitdocker コマンドのために使うことは出来ないそうなので,本件の用途では travis_wait は使えないかなと思います.

@syui
Copy link
Member Author

syui commented Jul 29, 2017

調べてくださって本当に助かります。

今、pushしてtravisを回してみました。もしよろしければ、 @k3nsuk3 さんがmasterにpushしてもらっても構いませんよ。

ようはちゃんと動いていることが重要ですから。

@syui
Copy link
Member Author

syui commented Jul 29, 2017

いけたみたいです。ありがとうございます。

@arkenous
Copy link
Member

@syui さん
とりあえず,様子見ですね😅
何も無いことを祈りますが,もし何かあったら僕の方でも Commit, Push 対応します!

@syui
Copy link
Member Author

syui commented Jul 29, 2017

助かります!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants