読者です 読者をやめる 読者になる 読者になる

CircleCIでElixir環境構築

Elixir

CircleCIだとElixirの環境は用意されてないので自分で構築する必要がある。

なのでasdfというバージョンマネージャーを使ってElixir環境を構築してみた。

環境

  • circleci: Ubuntu 14.04 (Trusty)
  • erlang: 19.0
  • elixir: 1.4.0

circle.yml

machine:
  environment:
    PATH: "$HOME/.asdf/bin:$HOME/.asdf/shims:$PATH"
    MIX_ENV: "test"
dependencies:
  pre:
    - if ! asdf | grep version; then git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.2.0; fi
    - asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git || true
    - asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git || true
    - asdf install erlang '19.0'
    - asdf install elixir '1.4.0'
    - asdf global erlang '19.0'
    - asdf global elixir '1.4.0'
    - mix local.hex --force
    - mix local.rebar --force
    - mix deps.get
    - mix deps.compile
  cache_directories:
    - ~/.asdf
    - ~/.mix
    - deps
    - _build
database:
  override:
    - mix ecto.setup
test:
  override:
    - mix test

簡単な流れ説明

  1. asdfのPATHを通す & MIX_ENVを"test"に設定
  2. asdfコマンドが失敗した場合にはasdfをインストールする
  3. asdferlang, elixirプラグインを取得
    • cacheなどでインストール済みの状態の場合、そのままだとエラーになるのでとりあえずOR入れてる
  4. asdferlang, elixirをインストール
  5. hexとrebarをインストール
  6. depsをインストールしてコンパイル
  7. 各種キャッシュ
    • ~/.asdf
    • ~/.mix
    • deps
    • _build
  8. DBセットアップ
  9. テスト実行

その他

migrationが一個もないと** (Mix) Could not find migrations directory "priv/repo/migrations"って怒られる。 priv/repo/migrations/.gitkeepを入れてあげて解消できた。

所感

  • erlangの初回インストールで10分くらいかかるのが結構つらい
    • 結論erlang環境がデフォルトでほしい。他のCI使えって話かもだが。。。

参考