CircleCIでdot(graphviz)が動かなくなった

概要

qiita.com

↑な感じでDB定義の管理にSchemaSpyを利用しているんだが、リレーションの描画にSchemaSpyは Graphviz を使っている。 しかし最新のビルドでリレーションの描画がされていなかった。 その調査と対応のまとめ。

現象

SchemaSpyで描画されなかったメッセージ。

SchemaSpy was unable to generate a diagram of table relationships. 
SchemaSpy requires Graphviz version 2.2.1 or versions greater than 2.4 from www.graphviz.org.

SchemaSpyの実行ログ。

Failed to query Graphviz version information
  with: dot -V
  java.io.IOException: Cannot run program "dot": error=2, No such file or directory

原因と対応

CircleCIのコンテナイメージを変更したのが原因。
Graphviz は Ubuntu14 で動かない。

[Project Setting] → [Build Environment]→ [OS to use for builds]

Ubuntu 14.04 (Trusty)」を「Ubuntu 12.04 (Precise)」に変更することで解決する。

調査の記録

Rebuild with ssh してコンテナにSSHしてみた。

ubuntu@box32:~$ dot -V
The program 'dot' is currently not installed. You can install it by typing:
sudo apt-get install graphviz

無いと言われる。。描画されていたときのコンテナもsshしてみる。

ubuntu@box1032:~$ dot -V
dot - graphviz version 2.26.3 (20100126.1600)

もしかして無くなってしまった?と思い公式を確認。

Ubuntu 12.04 (Precise) - CircleCI

あるって書いてある。。

こんな記事を見つけた。

mao-instantlife.hatenablog.com

サンプルプロジェクトで自分でビルドしてインストールするようにしてみた。 →うまく行ったヽ(=´▽`=)ノ

dependencies:
  cache_directories:
    - graphviz-2.38.0
  pre:
    - wget -O graphviz.tar.gz --quiet http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.38.0.tar.gz
    - tar -zxf graphviz.tar.gz
    - graphviz-2.38.0/configure --silent
    - make --silent --ignore-errors && make --silent --ignore-errors install > /dev/null
    - echo 'which dot && version:'
    - which dot
    - dot -V

自分でビルドするのはイマイチなので、バイナリをインストールするように修正。

dependencies:
  pre:
    - wget -O ../graphviz-dev_2.38.0-1~precise_all.deb http://www.graphviz.org/pub/graphviz/stable/ubuntu/ub12.04/i386/graphviz-dev_2.38.0-1~precise_all.deb
    - sudo dpkg -i ../graphviz-dev_2.38.0-1~precise_all.deb
    - dot -V

wget毎回するのも嫌なので、プロジェクト内部で持つように修正。

pre:
    - sudo dpkg -i ./.circleci/graphviz-dev_2.38.0-1-precise_all.deb
    - dot -V

サンプルプロジェクトで動作検証できたので、本ちゃんのプロジェクトに適用!

ところが

$ dot -V
bash: line 1: dot: command not found

dot -V returned exit code 127

Action failed: dot -V

CIのログをサンプルプロジェクトと細かく比較してみる →Start containerに差分

CIRCLE_BUILD_IMAGE=ubuntu-12.04
CIRCLE_BUILD_IMAGE=ubuntu-14.04

どうも意図せずコンテナイメージを変更していたらしい。。

[Project Setting] → [Build Environment]→ [OS to use for builds]

Ubuntu 14.04 (Trusty)」を「Ubuntu 12.04 (Precise)」に変更。

そもそも Ubuntu14 で動かないのであった。。