CircleCIでAlpine LinuxベースのDockerイメージを使う時にGit LFSに対応する

CircleCIでGit LFS管理下のファイルを使おうとする場合、CIの環境でもGit LFSが利用可能でなければいけません。

CircleCI提供のイメージでGit LFSをインストールする方法は「CircleCIでgit-lfsをインストールしてからテストする」で紹介されています。

しかし、独自のDockerイメージとして、軽量なAlpine Linuxベースのものを採用する場合があります(例えばpaperist/alpine-texlive-ja)。

Alpineは最小構成のLinuxであり、例えばcurlが存在しないため、上記記事の方法をそのまま使うことはできません。

そのため、Alpine用の設定方法を調べました。


環境


設定

テストなどを実行する前にGit LFSをインストールし、LFS管理下のファイルを取得します。


公開リポジトリ用


.circleci/config.yml

    steps:

- checkout
- run:
name: Install Git LFS
command: |
apk add git git-lfs
git lfs pull


非公開リポジトリ用


.circleci/config.yml

    steps:

- checkout
- run:
name: Install Git LFS
command: |
apk add openssh git git-lfs
mkdir ~/.ssh
ssh-keyscan github.com >> ~/.ssh/known_hosts
git lfs pull


解説


apk add (openssh) git git-lfs

Alpineではapk addでGit LFSをインストールすることができます。素の状態のAlpineにはGitもないので、一緒に入れています。

リポジトリが非公開の場合は、OpenSSHも必要です。


mkdir ~/.ssh / ssh-keyscan github.com >> ~/.ssh/known_hosts

非公開リポジトリに対してSSHを使ってpullを行います。しかし、CIの場合大抵は初めての接続なので、以下の警告が出てCIが止まってしまいます。

The authenticity of host 'github.com (192.30.253.112)' can't be established.

RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?

回避方法は様々ありますが、本記事では「初回SSH接続時の対話的Fingerprint確認フローをssh-keyscanでスキップする」を参考にssh-keyscanで警告を回避しています。ただ、そもそも~/.sshがないとエラーでCIが落ちてしまうので、作成しておきましょう。


git lfs pull

Git LFSで管理しているファイルの実体を入手します。