LoginSignup
24
18

More than 5 years have passed since last update.

Dockerを使ってCircle CIでLatexをビルドできるようにしてみた

Posted at

Latexを使って文章を書いている際に,Githubにpushしたら自動的に最新版のpdfがreleaseブランチにあるといいなーと思いやってみました.

概要

手順

Latex文書を管理しているリポジトリがあることを前提とします.

CircleCIのプロジェクトにリポジトリを追加する

Circle CIの画面左の「ADD PROJECTS」から,対象リポジトリを追加しておいてください.

ビルドするためのスクリプトをリポジトリに追加

先のDocker ImageのDockerfileを置いてあるリポジトリ内にスクリプトを置いているので,これビルド対象のリポジトリにおいてください.

中身はdocker runをする単純なものです.

置くのが嫌な場合は,後に述べるcircle.ymllatex_build.shの部分を中身のコマンドのように書き換えてください

CircleCIにpush用の鍵を追加

CircleCIがデフォルトで用意する鍵はread-onlyなので,リポジトリにpushすることができません.
そこで,自分でwrite/read権限をもった鍵をリポジトリに登録しなくてはなりません.

まず,今回のプロジェクトのCircle CI専用の鍵を作成します

ssh-keygen -f ./circle_ci_push_key

パスフレーズは設定しないようにしてください.

次に,CircleCIの「BUILDS」から,対象リポジトリをクリックすると下の画面に行くので,「Project Settings」をクリックします.
Screen_Shot_2016-07-22_at_16_33_16.png

Project Settingsの画面でSSH Permissionsというメニューがあるので開きます.

下のようにHostnameにはgithub.comを,Private Keyには先程生成した鍵ペアの秘密鍵(circle_ci_push_key)の内容を貼り付け,submitします.
Screen_Shot_2016-07-22_at_16_41_00.png

これで,githubへのpush時にこの鍵を使ってくれるようになりました.

CircleCIに追加した鍵ペアの公開鍵をGithubのリポジトリへ登録

Githubの対象リポジトリの[Settings]>[Deploy keys]>[Add deploy key]にて先ほどの公開鍵を登録します.

Screen_Shot_2016-07-22_at_16_47_21.png

circle.ymlの追加

適宜リポジトリ名や対象ファイル名,メールアドレスやユーザネームは置き換えてください.

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

ビルド

あとはmasterpushされれば毎回最新のPDFがreleaseブランチに!!!

私の場合はREADME.mdreleaseブランチの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"]

やっていること

  1. ミラーをjaistに変更 (ローカル開発用)
  2. aptの更新
  3. git, wget, software-properties-commonをインストール
    • software-properties-commonapt-add-repositoryコマンドを追加するためです
  4. texliveインストールのためのリポジトリ追加
  5. texliveのインストール及び,latexmkのインストール
  6. docmuteのダウンロードとインストール
  7. mktexlsrでdocmuteの有効化
  8. 最後に,PDFへのフォント埋め込みを有効化

しています.

何が良くなったのか?

特にこれが幸せになったと感じられるのが無かったのが正直なところです...

が,masterでpdf管理をしなくて良くなったので,コミットごとに一々差分が生じなくなったのがハッピーです.

加えて,このDockerImageを使うことでローカルを汚さずにlatexをビルドできますね!

24
18
0

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
24
18