原田です。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」の開発に参加して機能改善を業務で行っています。 |
![]() |
AWS Cloud9は、いつでもどこでも同じ環境が使えて、共同開発にも向いています。 |
![]() |
RubyWorld Conference 2019にPlatinumスポンサーとしてブースを出展。プレゼント企画としてクイズに挑戦していただきました。 |
![]() |
今日使える明日のRedmine「RedMica」!Redmineの次期バージョンで利用できる新機能をいち早く利用できるのが最大のメリットです。 |
![]() |
OSC 2019 島根でプレゼン。スライド作成で工夫したところを紹介します。 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |