CircleCI で git clone を1秒でも早くしたい(git-shallow-clone)

CircleCI Orbsを利用して、git shallow cloneをしてみました。
2023.11.07

CircleCIを利用するとき、リポジトリからgit cloneをします。実際には、用意されているcheckoutコマンドを利用することが多いと思います。

リポジトリサイズが大きい場合(バイナリファイルが多く含まれるなど)、すべてをgit cloneするとデータ量が多く時間がかかる可能性があります。 そのため、1秒でも早くgit cloneするために、CircleCIでgit shallow cloneをしてみます。

おすすめの方

  • CircleCIでgit shallow cloneしたい方
  • CircleCIで1秒でも早くgit cloneしたい方

実験用のリポジトリを作成して、CircleCIを設定する

実験用のリポジトリを作成する

適当にリポジトリを作成します。

01_github_repository

READMEを適当に記載する

# CircleCI-git-shallow-clone-test

## 今日の天気

晴れです。

## 明日の天気

雨です。

CircleCIの設定ファイルを作成する

mkdir .circleci
touch .circleci/config.yml

CircleCIのconfigファイル

git-shallow-cloneのCircleCI Orbを利用します。今回はデフォルトで利用しますが、いくつかのオプションも指定できます。

config.yml

version: 2.1

orbs:
  # https://circleci.com/developer/orbs/orb/guitarrapc/git-shallow-clone
  git-shallow-clone: guitarrapc/git-shallow-clone@2.8.0

jobs:
  build:
    docker:
      - image: cimg/base:2023.10
    steps:
      - git-shallow-clone/checkout
      - run: echo "this is the build job"
      - run: cat README.md
  test:
    docker:
      - image: cimg/base:2023.10
    steps:
      - git-shallow-clone/checkout
      - run: echo "this is the test job"
      - run: cat README.md

workflows:
  build_and_test:
    jobs:
      - build
      - test:
          requires:
            - build

更新後、git pushします。

CircleCIでプロジェクトを設定する

02_circleci_setting

もし、3rd party製のCircleCI Orbを利用できない場合は、Orb Security Settings を確認し、更新してください。

03_circleci_orb

04_circleci_orb_setting

Jobを確認すると、mainブランチのREADME.mdが表示されました。

11_circleci

いろんなブランチでREADME.mdを更新して確認する

aaaブランチ

mainブランチをベースにして、aaaブランチを作成します。

git switch -c aaa main
# CircleCI-git-shallow-clone-test

## 今日の天気aaa

晴れです。

## 明日の天気aaa

雨です。

git pushしてREADME.mdを確認すると、問題ありません。

12_circleci

bbbブランチ

aaaブランチをベースにして、bbbブランチを作成します。

git switch -c bbb aaa
# CircleCI-git-shallow-clone-test

## 今日の天気aaa

晴れです。bbb

## 明日の天気aaa

雨です。bbb

git pushしてREADME.mdを確認すると、問題ありません。

13_circleci

xxxブランチ

mainブランチをベースにして、xxxブランチを作成します。

git switch -c xxx main
# CircleCI-git-shallow-clone-test

## 今日の天気

xxx晴れです。

## 明日の天気

xxx雨です。

git pushしてREADME.mdを確認すると、問題ありません。

14_circleci

さいごに

CircleCIでshallow clone(depth指定)をしてみました。 リポジトリ規模が大きい場合や、cloneで取得するデータ量を少なくしたい場合などに活用できると思います。

参考