CircleCIでcheckoutしてきたリポジトリ以外のprivateリポジトリを操作する方法

マシンユーザーを作成する

一般的なユーザーを作るときと同じように作成します。
メール通知などが来るので、開発用の共有メールアドレスなどがあればそちらを使ったほうが良いかも。

マシンユーザにPersonal access tokenを発行する

Githubにマシンユーザでログインして、下記にアクセス。
https://github.com/settings/tokens/new
(ユーザーのSettings -> Developer Settings -> Personal access token)から発行します。

f:id:harinezumistudy:20201126181251p:plain

マシンユーザに操作したいリポジトリのRead権限を与える

リポジトリのSettings -> Manage access -> invite teams or people(https://github.com/{リポジトリのURL}/settings/access)から
マシンユーザを招待し、Read権限を与えます。

CircleCIでcheckoutをするプロジェクトの環境変数にPersonal access tokenを設定する

Project Settings -> Environment Variables
https://app.circleci.com/settings/project/github/{GitHubのユーザー名}/{リポジトリ名}/environment-variables) に
任意の名前でGithubのマシンユーザのPersonal access tokenを貼り付けます。 f:id:harinezumistudy:20201127110716p:plain

yamlの中で環境変数を使う

操作したいリポジトリに関して下記のようにyamlに記載すれば、
checkoutしてきたリポジトリ以外のprivateリポジトリでも操作できます。

git clone https://${GITHUB_PERSONAL_ACCESS_TOKEN}@github.com/Hoge/fuga.git

マシンユーザーとPersonal access tokenを使う理由

  1. リポジトリとPersonal access tokenで権限を与えた範囲でしかマシンユーザーは操作できない。
  2. 万が一マシンユーザーのPersonal access tokenが漏れた可能性がある場合、
    すぐにPersonal access tokenを無効にできる。
  3. ssh key pairだと管理が手間。

参考URL

How to Authorize Your CI/CD to Checkout Additional RepositoryEnquizit Inc

GitHub と Bitbucket のインテグレーション - CircleCI

Managing deploy keys | GitHub Developer Guide

本当にそれでいい?CircleCIにおける複数のPrivateリポジトリのClone方法 | by Takuo | VELTRA Engineering | Medium