はじめに
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
普通にチェックアウトした場合
まずは、普通にチェックアウトした場合です。
jobs:
build:
steps:
- checkout
普通にチェックアウトした場合は、チェックアウトに1分10秒かかりました。
CircleCI 2.0のソースキャッシュを使った場合
次に、CircleCI 2.0のソースキャッシュを使った場合です。
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秒と逆に遅くなってしまいました。
CircleCI 2.1のOrbを利用してShallow Cloneチェックアウトした場合
最後に、CircleCI 2.1のOrbを利用してShallow Cloneチェックアウトした場合です。
version: 2.1
orbs:
ganta-git: ganta/git@1.2.0
jobs:
build:
steps:
- ganta-git/shallow-clone-checkout
Orbを利用してShallow Cloneチェックアウトした場合は、チェックアウトが33秒で完了するようになりました。
まとめ
CircleCI 2.1はいいぞ。
-
自分でOrbを作って公開することもできます。 ↩