2017年5月25日木曜日

RedmineのテストFixturesを手動テスト用に投入する

RedmineのテストFixturesを手動テスト用に投入するのに以下のようなスクリプトを作成しました。
https://github.com/jbbarth/redmine-scripts
を参考にしました。

#!/bin/bash
export RAILS_ENV=test
test -e test/.fixtures.core || cp -a test/fixtures test/.fixtures.core
rm -rf test/fixtures
mkdir test/fixtures
cp -i test/.fixtures.core/*yml test/fixtures/
cp -i plugins/*/test/fixtures/*yml test/fixtures/
cp -i plugins/*/spec/fixtures/*yml test/fixtures/
bundle exec rake db:drop db:create db:migrate redmine:plugins db:schema:dump db:fixtures:load
cp -f db/test.sqlite3 db/test.template.sqlite3

上記を実行してから、
$ RAILS_ENV=test ruby bin/rails server
で起動すると、Fixturesに含まれているeCookbookなどのプロジェクトが使えます。

2017年5月21日日曜日

Travis-CIで行っているRedmineプラグイン用テストをローカルで行う

Redmine XLSX format issue exporterのCIはTravis-CIを使わせてもらっています。
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-Image
https://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上でのみ失敗するとかでなければ、大人しくブランチにプッシュしてクラウドで回してもらう方が良さそうです。


2017年5月1日月曜日

JaSST'17 Niigataの振り返り

2017/04/28(金)に、「JaSST'17 Niigata ソフトウェアテストシンポジウム 2017 新潟」行われました。
テーマは「ユーザビリティ / UX」。私は実行委員なのにテーマが決まってから本を読む、という有様でしたので、非常に勉強になりました。
そのうち資料の公開もあると思いますが、現時点での振り返りです。


基調講演

基調講演は、利用品質ラボの樽本 徹也さんから
「ユーザエクスペリエンスの要素とプロセス——UX/UCD概論」
でお話頂きました。
UXとは?なぜUXなのか?そしてUCDと、概論として非常に分かりやすい形でのお話でした。著書の「ユーザビリティエンジニアリング (第2版)」を読んでから臨みましたが、更に理解が深まった気がしました。
心にとまった幾つかピックアップ。
  • 効果、効率、満足度
  • Experienceが儲かる
  • UXの要素 表層、骨格、構造、要件、戦略
    (ジェス・ジェームス・ギャレットの「The Elements of User Experience」)

事例紹介

事例紹介として、日立ソリューションズの柳生 大介さんから、
「機能中心から人間中心へ ~日立ソリューションズの取り組み~」
でお話頂きました。
どんなきっかけでUXへの活動を始めたのかから、具体的な取り組みと非常に興味深かったです。
手法の紹介も具体的で実際のイメージがつかみやすかったのではないかと思います。
心にとまった幾つかピックアップ。
  • 共通の物差しとしてのペルソナ
  • ブレストでのアンチプロブレム
  • ユーザーに伝わるのか、まずは言葉を見直す

情報交換会

JaSST Niigataでは毎回、本会後に情報交換会が行われています。
お茶やお菓子とともに講演者の方々や参加者の方々と語り、交流を深めるという会です。
新潟だけではなく各地から参加してくださ方もおられ、いい刺激になりました。
そして、樽本さんからは「ユーザビリティエンジニアリング (第2版)」にサインを頂きました!

というわけで

ぼんやりな感じの振り返りになりましたが、UXを知る、というところからと考えていた私としては、得るものが多い場となりました。
このあとも、JaSSTは東北、関西、北海道と続いていきますので、足を運んでみてはいかがでしょうか?



RedmineプラグインをGitHub Actionsでテストする

Redmine Advent Calendar 2019 の Qiita で書きました。追っかけで もう一つ 。 Travis-CIで行っていたRedmineプラグインのCIを、GitHub Actionsに変更したものです。 GitHub Actionsをやってみようという...