• TOP
  • ブログ
  • ビギナー向け:CircleCI 2.0でのprivateなリポジトリのgit submoduleの使...

ホットリンク 公式ブログ

データから見えてくる注目のトピックスをとりあげます。

テック

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

こんにちは、開発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名)