はじめに
スライドを Markdown で書いてバージョン管理したり、CI/CD っぽいことをしてみました。
やったこと
- Markdown で記述
- reveal-ck でスライドに変換
- GitLab でバージョン管理
- GitLab Pages にホスティング
- GitLab CI で CI/CD (push するたびに Pages にホストしたスライドも更新)
サンプル
- サンプルスライド: https://otuhs_d.gitlab.io/slide-cicd
- サンプルリポジトリ: https://gitlab.com/otuhs_d/slide-cicd
reveal-ck のインストール
reveal-ck の説明はここでは割愛します。
$ gem install reveal-ck
でインストール。
あとは
-
slides.md
にスライドの中身を書く -
config.yml
に設定内容を書く
ローカルでスライドの確認
$ reveal-ck generate
で slides
ディレクトリが作成され、その中にコンテンツが自動生成されます。
$ reveal-ck serve
でサーバを立ち上げてプレビュー。
http://localhost:10000 で確認できます。
slides.md
を更新すると自動で更新される。すごく便利。slides/
以下はバージョン管理する必要ないので.gitignore
にいれておいていいかも。
.gitlab-ci.yml の作成
作成したジョブは以下2つ。
-
reveal-ck generate
で Markdown から スライドを生成するジョブ - 生成したスライドを GitLab Pages にホスティングするジョブ
.gitlab-ci.yml
stages:
- build
- deploy
build:
# デフォルトの Ruby Image だと上手くいかない。詳しくは後述。
image: registry.gitlab.com/xxx/yyy
stage: build
script:
- reveal-ck generate
# 次のジョブに成果物を受け渡すために artifacts 定義
artifacts:
paths:
- slides/ # reveal-ck generate で slides/ 以下にコンテンツが生成されるのでコレを指定
# ここは GitLab Pages のお作法のとおり
pages:
stage: deploy
dependencies:
- build
script:
- mv slides/ public/ # 上で生成された slides/ をそのまま public/ に
artifacts:
paths:
- public
Docker Image の作成
デフォルトの Ruby Image だと文字コードが US-ASCII
なので、slides.md
に日本語が入っているとエラーになってしまいます。
$ reveal-ck generate
error: slides.md is not valid US-ASCII
Generating slides for 'slides.md'..
ERROR: Job failed: exit code 1
というわけで、Docker Image 作って GitLab の Container Registry に push して使うことに。
- ベースは
ruby:2.5
- 文字コードを
UTF-8
に -
reveal-ck
もインストールしておく
Dockerfile
FROM ruby:2.5
ENV LANG C.UTF-8
RUN gem install reveal-ck
Conteiner Registry に push
手順は GitLab のプロジェクトページ > Registry
に記載されているとおり。
GitLab の Container Registry にログイン
$ docker login registry.gitlab.com
Image の build と push
$ docker build -t registry.gitlab.com/xxx/yyy .
$ docker push registry.gitlab.com/xxx/yyy
おわりに
かなり雑な説明になってしまったけど、結構いい感じな環境を作れた気がしています。
後輩ができたら薦めてみよう。。。