Latexを使って文章を書いている際に,Githubにpushしたら自動的に最新版のpdfがreleaseブランチにあるといいなーと思いやってみました.
概要
- LatexをビルドできるDockerImageを作った
- このDockerImageを使ってCircleCIでLatexファイルからpdfを生成する
- CircleCIからリポジトリのreleaseブランチへ生成されたpdfファイルをpushする
手順
Latex文書を管理しているリポジトリがあることを前提とします.
CircleCIのプロジェクトにリポジトリを追加する
Circle CIの画面左の「ADD PROJECTS」から,対象リポジトリを追加しておいてください.
ビルドするためのスクリプトをリポジトリに追加
先のDocker ImageのDockerfileを置いてあるリポジトリ内にスクリプトを置いているので,これビルド対象のリポジトリにおいてください.
中身はdocker run
をする単純なものです.
置くのが嫌な場合は,後に述べるcircle.yml
のlatex_build.sh
の部分を中身のコマンドのように書き換えてください
CircleCIにpush用の鍵を追加
CircleCIがデフォルトで用意する鍵はread-onlyなので,リポジトリにpushすることができません.
そこで,自分でwrite/read権限をもった鍵をリポジトリに登録しなくてはなりません.
まず,今回のプロジェクトのCircle CI専用の鍵を作成します
ssh-keygen -f ./circle_ci_push_key
パスフレーズは設定しないようにしてください.
次に,CircleCIの「BUILDS」から,対象リポジトリをクリックすると下の画面に行くので,「Project Settings」をクリックします.
Project Settingsの画面でSSH Permissions
というメニューがあるので開きます.
下のようにHostname
にはgithub.com
を,Private Key
には先程生成した鍵ペアの秘密鍵(circle_ci_push_key
)の内容を貼り付け,submitします.
これで,githubへのpush時にこの鍵を使ってくれるようになりました.
CircleCIに追加した鍵ペアの公開鍵をGithubのリポジトリへ登録
Githubの対象リポジトリの[Settings]>[Deploy keys]>[Add deploy key]にて先ほどの公開鍵を登録します.
circle.yml
の追加
適宜リポジトリ名や対象ファイル名,メールアドレスやユーザネームは置き換えてください.
general:
branches:
only:
- master
machine:
timezone:
Asia/Tokyo
services:
- docker
dependencies:
pre:
- docker pull ogajun/latex
- git config --global user.email 'email address'
- git config --global user.name 'user name'
test:
override:
- cd <リポジトリ名> && ./latex_build.sh <ビルド対象のtexファイル名>
deployment:
release:
branch: master
commands:
- cd <リポジトリ名>
- git checkout -b release
- git add --all :/
- git commit -m "[ci skip] build pdf"
- git push -f origin release
ビルド
あとはmaster
にpush
されれば毎回最新のPDFがrelease
ブランチに!!!
私の場合はREADME.md
にrelease
ブランチのPDFファイルへのリンクを掲載しております.
Dockerfileについて
LatexビルドのためのDockerfile
は次のようになっています.
(https://github.com/Oga-Jun/docker-latex)
FROM ubuntu:xenial
MAINTAINER Junya Ogasawara <like.bump.oga@gmail.com>
RUN set -x && \
sed -i.bak -e "s%http://archive.ubuntu.com/ubuntu/%http://ftp.jaist.ac.jp/pub/Linux/ubuntu/%g" /etc/apt/sources.list && \
apt update && apt -y upgrade && \
apt -y install git wget software-properties-common && \
apt-add-repository -y ppa:texlive-backports/ppa && \
apt -y install texlive-lang-cjk latexmk && \
wget http://mirrors.ctan.org/macros/latex/contrib/docmute.zip && \
unzip docmute.zip && \
mv docmute /usr/share/texmf/tex/latex/ && \
mktexlsr && \
kanji-config-updmap-sys auto
WORKDIR /data
VOLUME ["/data"]
やっていること
- ミラーをjaistに変更 (ローカル開発用)
-
apt
の更新 -
git
,wget
,software-properties-common
をインストール-
software-properties-common
はapt-add-repository
コマンドを追加するためです
-
- texliveインストールのためのリポジトリ追加
- texliveのインストール及び,latexmkのインストール
- docmuteのダウンロードとインストール
- docmuteについてはこちらを参照のこと
- 僕が個人的に利用しているためインストールしています.
-
mktexlsr
でdocmuteの有効化 - 最後に,PDFへのフォント埋め込みを有効化
しています.
何が良くなったのか?
特にこれが幸せになったと感じられるのが無かったのが正直なところです...
が,masterでpdf管理をしなくて良くなったので,コミットごとに一々差分が生じなくなったのがハッピーです.
加えて,このDockerImageを使うことでローカルを汚さずにlatexをビルドできますね!