原田です。12月になり今年も終わり新しい年を迎えるということで、付き合いのある方々からカレンダーを頂きます。毎年デザインが変わるので年末ぎりぎりまで新しいカレンダーは開けないで楽しみにしています。
今回はRedmineの改善作業の一つであるテストをDockerコンテナを使用してすべて通してみることについて書きたいと思います。
当然のことですけどテストが失敗するコードをリリースするとRedmineを利用する多くの方々にご迷惑をかけます。最悪業務が止まってしまう事もあり得ます。Redmineでは公式サイトに投稿されたパッチが問題なくテストを通過した時のみ公式サイトのSubversionリポジトリにコミットされ適切な時期にリリースされます。
Redmine改善業務で使用している私のRedmineは以下のようなシンプルな構成です。
私のテスト環境ではPostgreSQLとLDAPをインストールしていないため、これらに関するテストはスキップします(画面末尾の7 skipsで判断できます)。
(テストが必要だからテストコードを作成しているはずなのに)テストをスキップしているのを見るのは個人的に好みません(嫌いです)。足らない機能は(DockerComposeを使って)Dockerコンテナで実装すればローカル環境を汚さずテストが実施できます。今回はPostgrteSQLとLDAPのDockerコンテナを動かしてテストをすべて通したいと思います。(もっとこうした方が良い等、ご意見をいただけると幸いです。)
私が実際に使用しているPostgreSQLのdocker-compose.ymlは以下のとおりです。テストで使用したデータやPostgreSQLの設定はDockerコンテナを再起動しても引き続き利用したいのでvolumes:
でローカル環境に保存(永続化)しています。
version: '3' services: postgres: image: postgres:12-alpine container_name: redmine_postgres environment: POSTGRES_PASSWORD: ******** POSTGRES_INITDB_ARGS: --encoding=UTF-8 --locale=C --lc-collate=ucs_basic --lc-ctype=ucs_basic volumes: - ./postgres/pgsql-data:/var/lib/postgresql/data ports: - 5432:5432
LDAPのdocker-compose.ymとDockerfileは以下のとおりです。実際にはPostgreSQLとLDAPのdocker-compose.ymlは一つにまとまっています。
version: '3' services: ldap: build: ./openldap image: farend/openldap.redmine container_name: redmine_ldap ports: - 389:389
LDAPに投入する認証データはRedmineのテストデータ(test/fixtures/ldap/test-ldap.ldif)を使用します。OpenLDAPのDockerイメージ(osixia/openldap)とテストデータで重複している定義の削除やRedmineのLDAPテストでは許可しているLDAPのアクセス制限等をsed
コマンドを使って調整しました。
FROM osixia/openldap:latest ENV LDAP_ORGANISATION redmine ENV LDAP_DOMAIN redmine.org ENV LDAP_ADMIN_PASSWORD ******** ENV LANG C.UTF-8 ENV DEBIAN_FRONTEND noninteractive ENV LDIF_DIR /container/service/slapd/assets/config/bootstrap/ldif RUN \ set -eux \ && apt-get update\ && apt-get install -y --no-install-recommends \ subversion \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* WORKDIR /tmp RUN \ set -eux \ && svn export http://svn.redmine.org/redmine/trunk/test/fixtures/ldap/test-ldap.ldif \ && sed -e '/^dn: dc=redmine,dc=org$/,/^$/d' -e '/^dn: cn=admin,dc=redmine,dc=org$/,/^$/d' test-ldap.ldif > $LDIF_DIR/50-test-ldap.ldif RUN \ set -eux \ && sed -e 's/^\(olcAccess: to \* by self read by dn="cn=admin,{{ LDAP_BASE_DN }}" write by \*\) none$/\1 read/' $LDIF_DIR/02-security.ldif > $LDIF_DIR/51-security.ldif
上記で作成したdocker-compose.ymlをdocker-compose up -d
で起動しRedmineのテストを実施しました。すべてのテストが通っていることを確認できました(画面末尾の0 skipsで判断できます)。
以前は仮想マシン(OS)を都度構築しアプリケーション(ミドルウェア)をインストールしていました。テスト用の環境を構築するだけでもかなりの時間(半日程度)を要していました。実際に必要なのはOSではなくミドルウェア。Dockerを使うことで仮想マシンの構築作業が不要になり、その時間を別の作業に割けるようになりました。
テストに限らず動作検証したい機能をDockerで実現すると短時間で欲しい機能が手に入ります(不要になれば停止・削除することも容易です)。RedmineはMySQLやメール送信機能もサポートしているのでこれらの動作検証にもDockerを使いたいと思います。
Redmineを改善するパッチを書いて、OSSへの貢献もする仕事 オープンソースソフトウェア「Redmine」の開発に参加して機能改善を業務で行っています。 |
|
クラウドベースの統合開発環境「AWS Cloud9」超便利ッス。 AWS Cloud9は、いつでもどこでも同じ環境が使えて、共同開発にも向いています。 |
|
RubyWorld Conference 2019に出展しました RubyWorld Conference 2019にPlatinumスポンサーとしてブースを出展。プレゼント企画としてクイズに挑戦していただきました。 |
|
Redmine互換課題管理システム「RedMica」 リリースの狙い 今日使える明日のRedmine「RedMica」!Redmineの次期バージョンで利用できる新機能をいち早く利用できるのが最大のメリットです。 |
|
OSC 2019 島根でのプレゼン発表へ向けての準備と工夫したところ OSC 2019 島根でプレゼン。スライド作成で工夫したところを紹介します。 |
2024年5月11日 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催) ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。 |
|
入門Redmine 第6版 出版記念企画セミナー「Redmineのアクセス制御」【2024/5/30開催】 入門Redmine 第6版(2024年3月23日発売)の書籍から「Redmineのアクセス制御」について解説します。 |
|
My Redmine 初回ご契約で「入門Redmine 第6版」プレゼントのお知らせ Redmineのクラウドサービス「My Redmine」を初めてご契約いただいたお客様にRedmine解説書「入門Redmine 第6版」を進呈いたします。 |
|
2024年度ブランドパートナーに島根県在住のモデル ユイさんを継続起用 ユイさん(モデルスタジオミューズ所属)をファーエンドテクノロジーの2024年度ブランドパートナーとして継続して起用します。 |
|
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |