手製のRedmineプラグインのCIを複数バージョンRedmine経由でまわすようにした

プラグインが動かないからRedmineのバージョンを上げれない」という意見をよく見る。ではどうすべきかと思い、とりあえず自分が作ってるRedmineプラグインredmine_audit の .travis.yml 周辺を更新して複数のバージョンのRedmineRubyでまわすようにした。

以下のようにenvを設定する(= 9パターンテストできる)ようにした。

env:
  - RUBY_VER=2.6.0-preview2 REDMINE_VER=master
  - RUBY_VER=2.6.0-preview2 REDMINE_VER=3.4-stable
  - RUBY_VER=2.5 REDMINE_VER=master
  - RUBY_VER=2.5 REDMINE_VER=3.4-stable
  - RUBY_VER=2.4 REDMINE_VER=master
  - RUBY_VER=2.4 REDMINE_VER=3.4-stable
  - RUBY_VER=2.3 REDMINE_VER=master
  - RUBY_VER=2.3 REDMINE_VER=3.4-stable
  - RUBY_VER=2.3 REDMINE_VER=3.3-stable

Travisから以下のようにdocker build→docker runの流れでコミットしたブランチを上述の組み合わせでテストしている。

before_install:
  - docker build -t ${TRAVIS_REPO_SLUG}:${RUBY_VER} --build-arg RUBY_VER=${RUBY_VER} --file=Dockerfile.travis .
script:
  - docker run -e REDMINE_VER=${REDMINE_VER} -e TRAVIS_BRANCH=${TRAVIS_BRANCH} -e TRAVIS_REPO_SLUG=${TRAVIS_REPO_SLUG} ${TRAVIS_REPO_SLUG}:${RUBY_VER}

以下はその他の関連するファイル。Travisさんはほんと便利やで...

Dockerを使う事にした理由はRedmineからプラグインのテストを呼びたかったため。Redmine本体のコードに依存するテストはRedmineからrake redmine:plugins:testしてやる必要がある。(自分のプラグイン程度だと依存度が低いのでモックでもやれなくもないけど

実行スクリプトではプラグインマイグレーションは呼んでないので参考にする時はご注意を。(マイグレーション付きのプラグインは更にこれにDBの組み合わせが増える事になるのかな。

なお、本当は12パターンになる予定だった。Redmine 3.3系をRuby 2.4以上で回してないのは以下のチケットがあるため。SystemStackErrorになってしまうようだったが対応はされないようなので外した。新しいRedmine使ってくだされという事でいいと思うので自分でもパッチ投げたりはしない予定。

# 2018/07/22 更新: 少し移動や更新がやりやすくなるように修正。