This page is intended for users in Singapore. Go to the page for users in United States.

初心者向け!CircleCI2.0でprivateなリポジトリのgit submodule updateしてみました。

こんにちは、開発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をコピーするしかないかと考えていましたが、問題が解決出来たので良かったです。

(提供元:ホットリンク公式テックブログ

株式会社ホットリンク's job postings
4 Likes
4 Likes

Weekly ranking

Show other rankings