MkDocsをGitLab上で構築する。
MkDocsをGitLab Pagesに移行したついでに、ビルドデプロイをGitLab CIを使って自動化、Dockerを使ってビルド環境も自動で整えてみました。
構成
GitLab上では2つのリポジトリを作成します。それぞれ
- MkDocsをビルドするためのDockerイメージを作成するリポジトリ
- MkDocsをビルドしてGitLabPageにデプロイするドキュメント本体のリポジトリ
になっており、ビルド環境と、ドキュメント本体のリポジトリを分けています。
MkDocsをビルドするためのDockerイメージを作成するリポジトリ
まずは、MkDocsのビルドを動かすためのDockerイメージを作成するリポジトリを作ります。DockerとはDocker社が開発しているコンテナ型の仮想環境で、このDockerを使ってLinuxの仮想環境を作りそのなかでMkDocsをビルドします。Dockerではミドルウェアのインストールや各セットアップがコードで記述できるので、MkDocsをビルドするために必要なパッケージを自動的にセットアップさせることができます。
Dockerfileの作成
まず、GitLab上で新たにリポジトリを作成します。作成が完了したら、そのリポジトリにDockerfile
という名前のファイルを追加します。Dockerfile
はセットアップされた仮想環境であるDockerイメージを作るための設計図です。Dockerfile
を作成しビルドすることで自分好みの設定のDockerイメージを作ることができます。Dockerfile
に以下を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
このDockerfile
で、AlpineというLinuxでMkDocsをビルドするための環境設定が出来ました。
.gitlab-ci.ymlの作成
次にDockerfile
を使ってGitLab-CI上でDockerイメージを作成するための設定ファイルを書きます。リポジトリに新たに.gitlab-ci.yml
ファイルを追加します。このファイルにはGitLab-CIで行うジョブの設定を記述します。設定内容は以下になります。
GitLab Container Registry
とは、リポジトリにDockerイメージを公開できる機能です。GitLab-CIでDockerfile
をビルドして、GitLab Container Registry
にpushします。pushするためのURLはリポジトリのメニューのPackages & Registries
からコンテナレジストリ
を開くと、赤丸で囲ったところにコンテナレジストリイメージを追加するためのコマンドが表示されています。
このコマンドを使って、以下のような.gitlab-ci.yml
を作成します。
1 2 3 4 5 6 7 8 9 |
|
このCIの処理としては、docker:latest
のDockerイメージを使用して、docker:dind
というDockerコンテナの中でDockerを使用できるサービスを指定します。そのあとscript:
ブロックで、dockerへのログイン、dockerイメージのビルド、GitLab Container Registry
にプッシュを行います。
Dockerfile
、.gitlab-ci.yml
をリポジトリにプッシュすればCIが動きだし、ビルドが始まります。始まらない場合はRunner
が設定されているか確認してください。
MkDocsをビルドしてGitLabPageにデプロイするドキュメント本体のリポジトリ
次に先ほど作ったDockerイメージを使ってMkDocsをビルドし、成果物をGitLabPageにデプロイするリポジトリを作成します。ドキュメント本体を管理するのもこのリポジトリです。
.gitlab-ci.ymlの作成
ここのCIで指定するのは、Dockerイメージを使ってMkDocsをビルドし、成果物をGitLabPageにデプロイする処理です。以下のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
この処理は3つのステージに分かれており、1つ目のdocker
ステージでは、先ほどと同様docker:dind
を使って、GitLab Container Registry
から、作ったDockerイメージをプルしてきます。2つ目のbuild
ステージでは、プルしてきたDockerイメージを起動し、mkdocs build
を実行してMkDocsのサイトを生成します。成果物のパスを次のジョブに渡します。3つ目のrelease
ステージでは、siteフォルダ以下のファイルをpublicフォルダに移します。
そのあとはGitLabが自動でpublicフォルダの変更を検知し、Pagesにデプロイしてくれます。
ローカルビルドする
ここで作成したDockerImageはローカルで実行して、ローカルサーバー上でMkDocsのテストができるようになっています。
以下のコマンドをMkDocsのディレクトリ上で実行すると、DockerfileからDockerイメージをビルドし、MkDocsのテストサーバーを立ち上げます。
1 |
|
1 |
|
ビルドされたページはlocalhost:8000
でWebブラウザで確認できます。
停止したい場合は以下のコマンドを実行します。
1 |
|
Dockerイメージの削除まで行いたい場合は以下のコマンドを実行します
1 |
|