CircleCI

CircleCI 2.1のOrbを利用したShallow Cloneチェックアウトでチェックアウトを高速化する


はじめに

CircleCI 2.1ではOrbと呼ばれる新機能を利用できます。

Orbとはサードパーティー製のパッケージのことで、CircleCI Orb Registryに公開されているOrbをインポートしてconfig.yamlを記述できるようになります。1

このCircleCI Orb Registryにganta/gitというOrbが公開されており、このOrbを利用することでShallow Cloneチェックアウトができるようになります。

今回は、このganta/gitを利用したShallow Cloneチェックアウトを試してみました。

また、普通にチェックアウトした場合およびCircleCI 2.0のソースキャッシュを使った場合と速度を比較してみました。


検証に使ったリポジトリ

パックファイルのサイズが2.5GiBのリポジトリを使って検証しました。

$ git gc

$ git count-objects -vH
count: 378
size: 1.69 MiB
in-pack: 488802
packs: 1
size-pack: 2.50 GiB
prune-packable: 0
garbage: 0
size-garbage: 0 bytes


普通にチェックアウトした場合

まずは、普通にチェックアウトした場合です。


config.yaml

jobs:

build:
steps:
- checkout

普通にチェックアウトした場合は、チェックアウトに1分10秒かかりました。

スクリーンショット 2018-12-11 23.12.48.png


CircleCI 2.0のソースキャッシュを使った場合

次に、CircleCI 2.0のソースキャッシュを使った場合です。


config.yaml

version: 2.0

jobs:
build:
steps:
- restore_cache:
keys:
- source-v1-{{ .Branch }}-{{ .Revision }}
- source-v1-{{ .Branch }}-
- source-v1-
- checkout
- save_cache:
key: source-v1-{{ .Branch }}-{{ .Revision }}
paths:
- ".git"

ソースキャッシュを使った場合は、チェックアウトは8秒で完了するようになりましたが、キャッシュの復元に35秒、キャッシュの保存に1分3秒かかるようになってしまい、合計で1分46秒と逆に遅くなってしまいました。

スクリーンショット 2018-12-11 23.11.56.png


CircleCI 2.1のOrbを利用してShallow Cloneチェックアウトした場合

最後に、CircleCI 2.1のOrbを利用してShallow Cloneチェックアウトした場合です。


config.yaml

version: 2.1

orbs:
ganta-git: ganta/git@1.2.0
jobs:
build:
steps:
- ganta-git/shallow-clone-checkout

Orbを利用してShallow Cloneチェックアウトした場合は、チェックアウトが33秒で完了するようになりました。

スクリーンショット 2018-12-11 23.03.39.png


まとめ

CircleCI 2.1はいいぞ。





  1. 自分でOrbを作って公開することもできます。