みかづきメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

CircleCI で object not found と言われて checkout に失敗する

こういうこと:

  • CircleCI でのビルドに、カスタムイメージを使用している
  • そのカスタムイメージには Git がインストールされていない
    • よって CircleCI 側の Git に Fallback されて実行される
  • 通常実行時は問題が無いが、 tag push での checkout に失敗する

といった感じです。 tag を push したときにだけ checkout が下のように失敗するのがポイント。

Either git or ssh (required by git to clone through SSH) is not installed in the image. Falling back to CircleCI's native git client but the behavior may be different from official git. If this is an issue, please use an image that has official git and ssh installed.
Enumerating objects: 416, done.
Counting objects: 100% (416/416), done.
Compressing objects: 100% (231/231), done.
Total 416 (delta 206), reused 314 (delta 125), pack-reused 0

object not found

直し方は簡単で、 CircleCI の Job の中で、自分で Git クライアントをインストールしてあげること。

jobs:
  checkout-code:
    docker:
      image: custom/image:version

    steps:
      # checkout より前に Git をインストールしてあげる
      - run:
          command: |
            apt update
            apt install -y git
# 略

こうすれば、イメージの中にインストールされた Git が使われて、タグも正常に checkout 出来るようになります。