ホットピ

ビギナー向け:CircleCI 2.0でのprivateなリポジトリのgit submoduleの使い方

2018年01月23日

最終更新日:2023年6月12日

こんにちは、開発2部の長久保です。 弊社ではCI環境にCircleCIを利用しています。CircleCI 2.0でのprivateなリポジトリのgit submoduleの使い方で少しハマったので記録に残したいと思います。

はじめに

サンプルのリポジトリを用意しました。 

Submoduleを利用するリポジトリ
https://github.com/htl-dev/public_circleci2_submodule_example

利用されるリポジトリ
https://github.com/htl-dev/public_submodule_example

中身はpythonでpublic_circleci2_submodule_exampleのmain.pyがpublic_submodule_exampleのsubmodule.pyを呼び出す単純な構成になっています。

CircleCIのconfigファイル
.circleci/config.yaml

version: 2
jobs:
  build:
    working_directory: /work_space
    docker:
      - image: docker:17.05.0-ce-git
 
    branches:
      only:
        - master
    steps:
      - checkout
      - run:
          name: submodule update and execute
          command: |
            git submodule init
            git submodule update
            git submodule foreach git pull origin master
            apk add --update python && rm -rf /var/cache/apk/*
            python main.py

git submodule init
git submodule foreach git pull origin master

にてsubmoduleの更新を行なっています。

問題点

submoduleのリポジトリがpublicなら問題がないのですが、privateになると下記のようなエラーがでます。

原因ですが、CircleCIはpublic_circleci2_submodule_exampleに対するアクセス権はあるものの、public_submodule_exampleに対してのアクセス権は持ってない為です。public_submodule_exampleをCircleCIにadd projectしてもpublic_circleci2_submodule_exampleから実行した場合は上記のエラーになります。CircleCIはデフォルトでは単一のリポジトリの読み込み権限しか持っていません。

対処法

CircleCIのUIにてプロジェクトの設定からPERMISSIONSにあるCheckout keysを選択します。

Add user keyにあるAuthorized with Githubボタンを押下すると、CircleCIにuser keyのリポジトリの権限が付与されます。 

 こちらを適用することで、privateなリポジトリのgit submodule updateが行えます。

最後に

リポジトリにsubmoduleをコピーするしかないかと考えていましたが、問題が解決出来たので良かったです。


▼ホットリンク では一緒に働く仲間を募集しています!
 プログラマー(募集人員4名)
 サーバサイドエンジニア(募集人員1名)

 
SNSを理解する無料動画を今すぐチェックしよう!

Twitter, Instagramマーケティングについてお悩みの方へ

プロ視点の解決策をご提案いたします!
まずはお気軽にご相談ください

03-6261-6933受付時間:平日9:00-18:00
今すぐ相談する24時間365日受け付けています
お問い合わせエリアのイメージ