Nginx + MariaDB + Unicorn で動くRedmineを作っているのですが、先日動いていたはずのものが別の環境でdocker-composeしても動きませんでした。「こういう時のためのCIサービスだぜ!」というわけでGitHubのリポジトリと CirecleCIを連携させてビルドさせてみることにしました。

目次

  1. 前書き
  2. CircleCIにアカウント作る
  3. circle.ymlを書く
    1. ビルドディレクトリの指定(build_dir)
    2. Dockerのインストール(machine)
    3. Docker Composeのインストール(dependencies)
    4. RedmineソースコードのダウンロードとDocker Compose ビルド(test)
  4. ログ

前書き


今回やった結果docker-composeビルドはできました。しかしcircle.ymlの各キーの意味がそこまでよくわかってません。とりあえずdocker-composeビルドができること優先させたかったのでcircle.ymlの書き方はあまり正しくないと思います。

また、自作のDocker compose製Redmineは現時点で正常に動作します。日本語の(泥酔しながら書いた)ザックリしたドキュメントもあります。自称3分でRedmine環境が構築できますが、多少課題があって、現時点の課題はリポジトリのIssueに起票しています。これらは改善する予定です。このリポジトリは完成したらまた別の記事で書きたいと思います。完成しました

また、定期ビルドをしたい方はこちらの記事もどうぞ。

CircleCIにアカウント作る


アカウント作ってリポジトリを登録します。特に記述することはないので省略。

circle.ymlを書く


前述の通り、あまりcircle.ymlの各キーの意味はわかっていません。とりあえず、リポジトリのルートに下記のcircle.ymlを作成します。今回は下記のように記述しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
general:
build_dir: redmine
machine:
pre:
- curl -sSL https://s3.amazonaws.com/circle-downloads/install-circleci-docker.sh | bash -s -- 1.10.0
services:
- docker
dependencies:
override:
- sudo curl -L "https://github.com/docker/compose/releases/download/1.8.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
test:
pre:
- sudo sh redmine/redmine_3.3.1_download.sh
- sudo docker-compose up -d

以下書いたことを順番に説明

ビルドディレクトリの指定(build_dir)

docker-compose.ymlはルートディレクトリの1階層下のディレクトリ(redmine)に配置しています。どうもCircleCIではdocker-compose upはカレントディレクトリでしかできない(?)ため、ビルドディレクトリはdocker-compose.ymlが存在するルートディレクトリ1階層下のディレクトリ(redmine)を指定しています。

test: pre:キー内でcdコマンドを実行してもディレクトリが切り替わらなかったので、今回のようにgeneralキーでディレクトリを指定するか、専用のシェルスクリプトを作成してそちらの中で必要なコマンドを実行する必要があると思います。

Dockerのインストール(machine)

machineキーでDockerをインストールしています。これはGitHubのCirecleCIリポジトリで起票されていたIssueを参考にしました。Issueの番号は…控えてなかったので失念しました…再度探しても見つからない…

Docker Composeのインストール(dependencies)

dependenciesキーでDocker Composeをインストールしています。

これは以前の記事で書いた通ですが、現時点でフツーにapt-getでDocker Composeをインストールした場合1.6.0以前のバージョンがインストールされてしまいます。このプロジェクトのdocker-compose.yml1.6.0以上のものでないと動作しないため、このままビルドしてもエラーが発生します。そのため、GitHubのリポジトリから1.8.1をインストールしています。

RedmineソースコードのダウンロードとDocker Compose ビルド(test)

testキーでRedmineソースコードのダウンロードとDocker Compose ビルド(up)を行っています。

私が作成しているリポジトリではシェルスクリプトで一旦Redmineのソースコードをダウンロードするようにしています。そのため、ソースコードダウンロード後にdocker-compose upでビルドするようにしています。なおdocker-compose upは初回もしくはDockerfileに変更があった場合はdocker-compose buildが走ります。

今回のCircleCIのビルドマシンでは(おそらく常に)docker-compose buildが走っているはずです…たぶん。

ログ


以下、こんな感じでログがでます。全部だと長いので一部切り取って載せます。