2018年06月

ブラウザでPHPマニュアルがビルドできたら便利ですよね?

開発を進めている docker-phd-ja (PHPマニュアル日本語版ビルド用Dockerイメージ)、PHPアプリケーションが動かせるようになりました

まだ実装できていませんが、将来的にはブラウザだけで「ソースファイルの更新 → ファイルの編集 → ビルド」ができるようにしたいと思っています。

ちなみに、ひとつのコンテナで PHP-FPM と nginx を連携させることにしたのは、下記の理由からです。

  • Docker イメージの pull だけですぐに使えるようにしたかった(複数コンテナにはできない)
  • apache を試したら重かった(やっぱり nginx がいい)

ひとつのコンテナで複数のプロセスを起動するために Supervisor を使っています。便利です。

docker-phd-ja の文字化けを修正したり、イメージを分割したり

引き続き docker-phd-ja (PHPマニュアル日本語版ビルド用Dockerイメージ)の改善を進めています。今日は下記の3点を主に進めました。

日本語の文字化けを修正

Dockerコンテナに入って vim で日本語マニュアル用のソースファイルを開いたら、思いっきり文字化けしていることに気づきました。完全にチェック漏れです。

解決のため、locales-all パッケージを入れて LANG を設定しました。修正前に試そうとしてくださった方、申し訳ありません。

イメージの分割

CircleCI でのビルドに少し時間がかかっていたので、テストに関係ない部分を別イメージに切り出しました。具体的には Subversion からのチェックアウト部分です。

ビルドの速度を追求するなら nginx のインストールなども別イメージのほうに移すべきなのですが、CI に特化したイメージを作るのは主客転倒な気がしています(もっと遅くなったら考えが変わるかもしれません)。「特定リビジョンのソースがチェックアウトされたイメージ」なら論理的な意味があると思い、それにとどめました。

Docker Hub リポジトリの再作成

CircleCI の利用によりオートメーションビルドではなくなったのですが、Docket Hub 上ではオートメーションビルド扱いのままだったので、いったん削除して通常のリポジトリとして再作成しました。

PHPマニュアル日本語版ビルド用DockerイメージのCI環境、こんな感じでどうでしょうか

先日公開したPHPマニュアル日本語版ビルド用Dockerイメージ(iwamot/phd-ja)について、CircleCI でテストにパスした場合にだけ、イメージを Docker Hub にプッシュするようにしてみました。

ただ、なんでもかんでもプッシュするわけにはいかないので、下記のように処理させています。

master ブランチを GitHub リポジトリにプッシュした場合
CircleCI 上でイメージをビルドし、テストにパスした場合にだけ、latest イメージが Docker Hub にプッシュされます。
タグを GitHub リポジトリにプッシュした場合
CircleCI 上でイメージをビルドし、テストにパスした場合にだけ、同名タグ付きのイメージと latest イメージが Docker Hub にプッシュされます。
master 以外のブランチを GitHub リポジトリにプッシュした場合
CircleCI 上でイメージをビルドし、テストします。パスしても Docker Hub にはプッシュしません。
パスしなかった場合、そのブランチから master ブランチへのプルリクエストはマージできません(GitHub の「Branch protection rules」を利用)。

処理の詳細は .circleci/config.yml で定義されています。実装にあたっては「CircleCI2.0でDockerをビルドしてDocker HubにPushするまで」という記事がたいへん参考になりました。

なお、テストフェーズでは「ビルドされたマニュアルのトップページが参照できること」を確認しています。下記が該当部分です。

- run:
    name: Run test
    command: docker run --network container:phd-ja appropriate/curl --retry 10 --retry-connrefused http://localhost/phd-ja/

今回ご紹介したCI環境で今は満足していますが、改善すべき点があるかもしれません。何かお気づきの方は、お知らせいただければ幸いです。

プロフィール
知識欲と謎解き欲が旺盛なWebエンジニア。AWS認定ソリューションアーキテクト - アソシエイト。JAPAN MENSA会員
記事検索