Travis Integration for Redmine Pluginsを使うとRubyとRedmineのバージョンの組み合わせなども結構簡単に環境を作れます。
ただGitHubへのPushがトリガーなのでローカルでもできると確認とかできていいかな、と思って、Travis-CI環境をローカルでというのをやってみました。
結論から言うと、Pushしちゃう方が早い、と言う感じでした。。。
まずは公式
Troubleshooting Locally in a Docker Imageで、Dockerで提供されているイメージと.travis.ymlからCI用のシェルスクリプトを出力するtravis-buildのインストールについて書かれています。最後の最後で手動で依存関係解決しCIコマンド実行してね、で終わってて詰まりました。
実際にやった手順
環境
- macOS Sierra 10.12.4
- Docker version 17.03.1-ce, build c6d412e
手順
1. Dockerイメージを起動してログインする~ $ docker pull travisci/ci-garnet:packer-1478744932 packer-1478744932: Pulling from travisci/ci-garnet Digest: sha256:9380acbb65ed1ae6e5a0b545616f2f4a9f8d6855c264a45924dd52d3ff0589f5 Status: Image is up to date for travisci/ci-garnet:packer-1478744932 ~ $ docker run --name travis-redmine-ci --rm -dit travisci/ci-garnet:packer-1478744932 /sbin/init <snip> ~ $ docker exec -it travis-redmine-ci bash -l root@foo:/# su - travis travis@bar:~$
参考ページ
https://docs.docker.com/engine/reference/commandline/run/
http://docs.docker.jp/engine/reference/run.html
https://docs.docker.com/engine/reference/commandline/exec
2. Travis-CI CLIをインストールする
travis@bar:~$ gem install travis <snip> travis@bar:~$ git clone --depth=50 --branch=master https://github.com/travis-ci/travis-build.git <snip> travis@cc01d74d8710:~$ travis Shell completion not installed. Would you like to install it now? |y| <snip> travis@bar:~$ cd travis-build travis@bar:~$ ln -s `pwd` ~/.travis/travis-build travis@bar:~$ bundle install --gemfile ~/.travis/travis-build/Gemfile <snip> travis@bar:~$
参考ページ
https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Imagehttps://github.com/travis-ci/travis.rb
3. .travis.ymlからCI用のスクリプトを生成する
ここでは、Redmine XLSX issue exporterのリポジトリをクローンしています。
リポジトリのルートに.travis.ymlがあります。
travis@bar:~$ cd ~/builds travis@bar:~$ git clone https://github.com/two-pack/redmine_xlsx_format_issue_exporter.git travis@bar:~$ cd redmine_xlsx_format_issue_exporter travis@bar:~$ travis compile 1.1 > ci.sh
4. スクリプトを修正する(その1)
Dockerの制約でスクリプト内で行っている/etc/hostsの変更ができなくなっています。
このため、無理やりですが参考ページを参考に、スクリプトを変更して対処します。
変更前
sudo sed -e 's/^\(127\.0\.0\.1.*\)$/\1 '`hostname`'/' -i'.bak' /etc/hosts test -f ~/.m2/settings.xml && sed -i.bak -e 's|https://nexus.codehaus.org/snapshots/|https://oss.sonatype.org/content/repositories/codehaus-snapshots/|g' ~/.m2/settings.xml sudo sed -e 's/^\([0-9a-f:]\+\) localhost/\1/' -i'.bak' /etc/hosts
変更後
cp /etc/hosts ./hosts.new sudo sed -e 's/^\(127\.0\.0\.1.*\)$/\1 '`hostname`'/' -i'.bak' ./hosts.new test -f ~/.m2/settings.xml && sed -i.bak -e 's|https://nexus.codehaus.org/snapshots/|https://oss.sonatype.org/content/repositories/codehaus-snapshots/|g' ~/.m2/settings.xml sudo sed -e 's/^\([0-9a-f:]\+\) localhost/\1/' -i'.bak' ./hosts.new cp -f ./hosts.new /etc/hosts
参考ページ
http://blog.jonathanargentiero.com/docker-sed-cannot-rename-etcsedl8ysxl-device-or-resource-busy/5. スクリプトを修正する(その2)
travis-buildのページに書いてありますが、.travis.ymlに書かれているenvやmatrixはスクリプト生成時に反映されません。このため、スクリプトでいくつかの修正が必要です。
赤字部分が該当箇所で.travis.ymlの定義に該当します。
- 使用するRubyバージョンを書き換え
travis_cmd rvm\ use\ 2.0.0\ --install\ --binary\ --fuzzy --assert --echo --timing
- 使用するRedmineバージョンの書き換え
travis_cmd export\ REDMINE_VERSION\=2.5.2 --echo
- 対象ブランチの指定
travis_cmd git\ clone\ --depth\=50\ --branch\=\'\'\ https://github.com/two-pack/redmine_xlsx_format_issue_exporter.git\ two-pack/redmine_xlsx_format_issue_exporter --assert --echo --retry --timing
6. スクリプトを実行する
travis@bar:~$ bash ci.sh
まとめ
.travis.ymlのmatrixやenvの設定を活かしたスクリプトをうまく生成できないため、手間がかかってしまいます。
Travis-CI上でのみ失敗するとかでなければ、大人しくブランチにプッシュしてクラウドで回してもらう方が良さそうです。
0 件のコメント:
コメントを投稿