LoginSignup
4
2

More than 5 years have passed since last update.

GitLab CIでreveal-ckをビルドする時のTips

Posted at

GitLab Meetup Tokyo #1 で発表した ここがすごいよGitLab CI はreveal-ckを使ってたのですが、GitLab CIでビルドするにあたって幾つか工夫した点があるので紹介します。

たぶん他のツールを使う場合にも応用できると思います

スライドのリポジトリ

今回紹介しているTipsは全部このリポジトリからの引用です

reveal-ckとは?

reveal.js をちょっと便利にしたラッパツールのようなものです。

詳しくは下記で紹介しています

reveal.js + markdownでスライドを作る時は reveal-ck が便利だった - くりにっき

GitLab CIでreveal-ckをビルドする時のTips

reveal-ckはbundlerで依存管理する

下記内容で Gemfile を作成。

Gemfile
# frozen_string_literal: true
source "https://rubygems.org"

gem "reveal-ck"

bundle install を実行。作成された Gemfile.lock をコミット。

.gitlab-ci.yml を下記のように設定

.gitlab-ci.yml
variables:
  BUNDLE_CACHE: "vendor/bundle/"

cache:
  untracked: true
  key: "$CI_BUILD_NAME"
  paths:
    # variables.BUNDLE_CACHEと同じものを指定する
    - vendor/bundle/

before_script:
  - bundle check --path=${BUNDLE_CACHE} || bundle install --path=${BUNDLE_CACHE} --jobs=2 --retry=3

理由

  • インストールしたgemをGitLab CIのキャッシュに載せるため
    • 毎回 gem install reveal-ck すると遅い
    • 上記のような設定にしておくとビルドが正常終了にした時にRunnerにキャッシュが保存されるので、次に同じRunnerでビルドされた時にキャッシュからgemが読まれてビルドが早くなる
  • 依存してるgemのバージョンをロックするため
    • reveal-ckに限ったことではないですが、最新になった時に急に動かなくなることがあるので依存しているgemも含めてバージョンは固定しておいた方が安全
    • 以前reveal-ckの中で使ってるcelluloidのバージョンが上がった時にreveal-ckが動かなくなるという事象があり、Gemfile でcelluloidを古いバージョンで固定する必要があった 1

Rakefileでコマンドを短縮する

普通に reveal-ck generate するとslidesディレクトリにスライド一式が作られるのですが、GitLab Pagesに公開するためにはpublicディレクトリに静的ファイルを作る必要があります

.gitlab-ci.yml くらいなら reveal-ck generate --dir=public って書いてもいいと思うんですが、ローカルで毎回 --dir=public って書いて実行するのも大変なので自分は Rakefile でラップしています。2

さっき作った Gemfile にrakeを追加して

Gemfile
# frozen_string_literal: true
source "https://rubygems.org"

gem "rake"
gem "reveal-ck"

Rakefileを作成

Rakefile
DIST_DIR = "public"

desc "generate slide to #{DIST_DIR}/"
task :generate do
  sh "reveal-ck generate --dir=#{DIST_DIR}"
end

desc "serve slide"
task :serve => :generate do
  sh "reveal-ck serve --dir=#{DIST_DIR}"
end

task default: :serve

bundle exec rake generate でpublicディレクトリにスライドを作って、bundle exec rake serve でローカルでサーバを実行してスライドを表示

publicディレクトリが存在しない場合に serve を実行するとサーバは実行できるけどスライドが表示できないため、:serve => :generateserve の前に明示的に generate を実行しています。

task default: :serverake にタスク名が渡されなかった場合に実行したいタスクを設定。
今回の場合だと bundle exec rakeserve が実行されます。

bundle exec ~ なんてtypeしたくない人は ~/.bashrc 辺りにalias設定推奨

~/.bashrc
alias be='bundle exec'

あと、ローカルで作ったpublicディレクトリがコミットされないように .gitignore に下記を書いておくといいでしょう。

.gitignore
public/

GitLab CIでのデプロイ時にもRakefileで作ったコマンドを使うように設定

.gitlab-ci.yml
pages:
  stage: deploy
  script:
    - bundle exec rake generate
  artifacts:
    paths:
    - public
  only:
    - master

  1. https://github.com/jedcn/reveal-ck/issues/58 

  2. まあローカル実行時にslidesディレクトリを使ってもいいんですが、本番とローカルの状態は合わせておいた方が何かと健全なのでローカル実行時もpublicディレクトリ使うようにしています 

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2