CircleCI 2.0が登場し、Dockerイメージを使ってビルドできるようになりました。
C92や技術書典3に向けて執筆されている方でもRe:VIEWを使っている方がいると思います。
vvakameさんが作成したRe:VIEW用のイメージがあるので、CircleCI 2.0でRe:VIEWの原稿をビルドしてみました。
- サンプルのリポジトリ: https://github.com/mstssk/ReVIEW_CircleCI_Sample
解説
やったこととしては以前書いたWerckerでRe:VIEWの原稿をビルドするという記事のCircleCI 2.0版です。
GitHubとCircleCI間の連携については、特別なことは何もしていないので本記事では割愛します。
公式のドキュメントなどを参照してください。
設定ファイル
設定ファイルは20行未満になりました。並列処理したりしたいわけではないのでWorkflowは使っていません。
Dropboxへのアップロードの部分はオプションなので、ビルドするだけならもっと短くなります。
version: 2
jobs:
build:
docker:
- image: vvakame/review
steps:
- checkout
- run:
name: Build PDF
command: rake clean pdf
working_directory: ./articles
- store_artifacts:
path: ./articles/book.pdf
destination: book.pdf
- run:
name: Upload to Dropbox
command: ./upload_dropbox.sh ./articles/book.pdf ${DROPBOX_TOKEN}
使用するコンテナ
image: vvakame/review
vvakameさんが作ったRe:VIEWのビルド用Dockerイメージです。
https://hub.docker.com/r/vvakame/review/
PDFをビルド
- run:
name: Build PDF
command: rake clean pdf
working_directory: ./articles
Re:VIEWでPDFをビルドします。
今回はRe:VIEWの review-init
コマンドで環境を初期化しました。Rakefileができるので、ここではそのままrakeコマンドでビルドしています。
もちろん、他のビルドツールでreview-pdfmakerや他のRe:VIEWのサブコマンドを使ってもよいです。
PDFだけでなくHTMLやEPUBなどをビルドすることも出来ます。
成果物の保存
CIでビルドしたPDFファイルなどの成果物を保存できます。
ビルドの結果画面のArtifactsタブからダウンロードできます。
- store_artifacts:
path: ./articles/book.pdf
destination: book.pdf
path
対象のファイルを指定しています。
destination
は保存後のファイルパスを指定するオプションです。 pathだけだと、元ファイルのパスそのままに root/project/articles/book.pdf
という深いパスで成果物画面に出てきてしまい使いづらいので、指定しています。
ちなみにpathとdestinationには環境変数は使えないようです。ファイル名をタイムスタンプにしたかったんですが、今回は諦めています。
Dropboxにアップロードする
CircleCIの画面上から保存したPDFをダウンロードしてもよいですが、Dropboxに自動でアップロードするようにしておくと便利です。
複数人で執筆している場合は、他の都合がいいファイル共有ツールを使ってもよいでしょう。
- run:
name: Upload to Dropbox
command: ./upload_dropbox.sh ./articles/book.pdf ${DROPBOX_TOKEN}
./upload_dropbox.shはDropbox API v2にファイルをアップロードするスクリプトです。
${DROPBOX_TOKEN}
は事前に発行しておいたDropboxのAPIトークンです。CircleCIのリポジトリ設定で、環境変数として登録してあります。
APIトークンはDropboxの開発者向けページで自分のアプリを作成して発行しておきます。